Vba excel вывод данных на лист

Содержание

  1. VBA: Запись результатов на другой лист
  2. Сообщения 6
  3. 1 Тема от alkhimovmet 2018-09-29 15:57:28
  4. Тема: VBA: Запись результатов на другой лист
  5. 2 Ответ от alexii 2018-09-29 16:43:09 (изменено: alexii, 2018-09-29 16:44:01)
  6. Re: VBA: Запись результатов на другой лист
  7. 3 Ответ от alkhimovmet 2018-09-30 08:41:06
  8. Re: VBA: Запись результатов на другой лист
  9. Информатика_2 семестр / 2-VBA / VBA-Учебные материалы / VBA-2 Ввод-вывод,лин_процессы
  10. Vba excel вывод данных на лист

VBA: Запись результатов на другой лист

Чтобы отправить ответ, вы должны войти или зарегистрироваться

Сообщения 6

1 Тема от alkhimovmet 2018-09-29 15:57:28

  • alkhimovmet
  • Участник
  • Неактивен
  • Рейтинг : [ 0 | 0 ]

Тема: VBA: Запись результатов на другой лист

Добрый день.
У меня имеется макрос, результаты которог выводятся в столбец 1 на том же листе. А что прописать в макросе, чтобы результаты выводились на другой лист?
Вот код макроса:

Надо, чтобы результааты выводились не в первый столбец этого же листа, а на другой лист с именем Лист 2

2 Ответ от alexii 2018-09-29 16:43:09 (изменено: alexii, 2018-09-29 16:44:01)

  • alexii
  • Разработчик
  • Неактивен

Re: VBA: Запись результатов на другой лист

результааты выводились не в первый столбец этого же листа

Результаты у Вас выводятся не на «этот же лист», а на активный рабочий лист, работает лишь потому, что активный рабочий лист у Вас не меняется в процессе.

а на другой лист с именем Лист 2

Видимо, речь про это (не проверялось):

3 Ответ от alkhimovmet 2018-09-30 08:41:06

  • alkhimovmet
  • Участник
  • Неактивен
  • Рейтинг : [ 0 | 0 ]

Re: VBA: Запись результатов на другой лист

Написал так и работает, но меня терзают смутные сомнения , что это не совсем так правильно. Может подскажите?

Источник

Информатика_2 семестр / 2-VBA / VBA-Учебные материалы / VBA-2 Ввод-вывод,лин_процессы

ОПЕРАТОРЫ ВВОДА И ВЫВОДА ДАННЫХ.

ЛИНЕЙНЫЕ ВЫЧИСЛИТЕЛЬНЫЕ ПРОЦЕССЫ

ОПЕРАТОР ПРИСВАИВАНИЯ LET

Оператор присваивания служит для вычисления значения выражения и присваивания этого значения переменной. При записи программы оператор Let можно опускать.

[Let] Имя_переменной = Выражение

Следует различать оператор присваивания и алгебраическое равенство. Оператор Y = A + B означает для ЭВМ: сложить содержимое ячеек памяти, отведенных для размещения значений переменных А и В, и поместить результат в ячейку памяти, отведенную для значения переменной Y. В программировании широко используется конструкция оператора присваивания типа I = I + 1. К заданному значению переменной I прибавляется 1, и результат помещается в ту же ячейку, заменив бывшую там информацию на новую. С точки зрения математики равенство i=i+1 не имеет смысла.

При присвоении переменным строковых значений их необходимо заключать в кавычки:

а значения типа Дата/Время заключать в символы # («решетка»):

ОПЕРАТОРЫ ВВОДА ДАННЫХ

Рассмотрим три основных способа ввода данных.

1. Запись значений переменных непосредственно в тексте программы осуществляется с помощью оператора присваивания.

Этот способ используется, если исходные данные не изменяются при нескольких исполнениях программы.

2. Ввод данных из ячеек рабочего листа Excel.

Для этого используется инструкция Сells(i, j), которая в данном случае выступает как функция ввода данных. Формат использования:

где i, j – порядковые номера соответственно строки и столбца (числовые значения!), на пересечении которых находится ячейка, т. е. адрес ячейки.

При этом следует иметь в виду, что данные на листе Excel уже имеются.

Пример: А = Сells(1, 2)

После выполнения этой команды переменной А присвоится значение, которое хранится в ячейке, находящейся в первой строке (первая цифра) и во втором столбце (вторая цифра), т. е. в ячейке B1 электронной таблицы.

3. Ввод данных непосредственно в ходе выполнения программы, т. е. в диалоговом режиме, выполняется с помощью диалогового окна ввода информации, реализуемого функцией InputBox. Основной формат этой функции:

Имя_переменной = InputBox(“Сообщение” [, “Заголовок”] [, “Значение”]).

В ходе работы программы при выполнении данной команды на экране монитора появляется диалоговое окно с указанным Заголовком, содержащее текст Сообщения, а также поле ввода с указанным Значением:

Выполнение программы приостанавливается в ожидании ввода данных с клавиатуры и нажатия одной из кнопок. После ввода информации и нажатия на кнопку ОК переменной присваивается значение типа String (строковый тип данных), содержащее текст, введенный в поле ввода.

Пример: x = InputBox(“Введите x”, “Ввод исходных данных”, “0.15”)

Имя окна можно опустить (при этом местоположение запятых сохраняется):

x = InputBox(«Введите x», , «0.15»)

Функция InputBox используется, когда исходные данные меняются при каждом запуске программы, поэтому обычно значение переменной не задается и применяется простейший вариант записи этой функции:

Пример: d = InputBox(“Введите значение диаметра”)

Если в поле ввода в появившемся диалоговом окне ввести 23, то в переменную d будет записан текст “23”, а не число 23. Текстовая строка “23” представляет собой лишь визуальное отображение числа, но не является числом в буквальном смысле слова, т. е. с ним, как и с любым другим текстом, нельзя производить никаких арифметических действий.

Для преобразования строкового типа данных в числовой тип используется функция Val(Строка), которая возвращает число, содержащееся в Строке, как числовое значение соответствующего типа.

При записи в коде программы

d = Val(InputBox(“Введите значение диаметра”))

и вводе в поле ввода цифр 23 переменной d присвоится число 23.

ОПЕРАТОРЫ ВЫВОДА ДАННЫХ

Рассмотрим три основных способа вывода данных.

1. Вывод в диалоговое окно с помощью команды MsgBox:

MsgBox «Сообщение», , «Заголовок»

В результате выполнения этой команды на экране появляется диалоговое окно Заголовок, содержащее указанный текст Сообщения. Выполнение программы приостанавливается до нажатия пользователем кнопки ОК.

Пример: MsgBox y , , «Результат»

В данном случае в качестве выводимого в окно Результат сообщения задано текущее значение переменной y:

Простейший формат записи оператора MsgBox:

Обычно сообщение включает в себя не только выводимое значение, но и комментарий, который заключается в кавычки. Для слияния нескольких фрагментов в одну строку в операторе вывода их разделяют знаком &.

Пример: MsgBox “Значение диаметра =” & d

В результате на экране появится следующее диалоговое окно:

2. Вывод данных на лист рабочей книги Excel с использованием инструкции Сells(i, j). В этом случае в отличие от ранее рассмотренного она выступает как команда вывода:

В результате этой команды указанное Сообщение помещается в ячейку с адресом, определяемым номером строки i и номером столбца j.

Cells(1, 2) = x ‘Вывод в ячейку B1 текущего значения переменной x

3. Вывод данных в окно отладки Immediate («Немедленно»). Это окно обычно располагается под окном программного кода. Если этого окна нет, то его можно вывести, нажав Ctrl+G или из главного меню VBA View Immediate Window.

Для вывода в окно отладки применяется метод Print (печать) объекта Debug (отладчик). Формат записи:

Пример: Debug.Print “Значение диаметра =” & d

Как видно из этого примера, команда Debug.Print используется аналогично команде MsgBox.

Пустой (т. е. без Сообщения) метод Debug.Print выводит пустую строку.

Помимо знака & в методе Print возможно использование разделителей списка выводимых данных. При этом знак «;» означает вывод очередного значения непосредственно за предыдущим, знак «,» – переход к началу новой зоны печати (окно отладки делится на 5 вертикальных зон по 14 символов каждая). При вводе знак «;» между элементами выводного списка можно опускать, VBA добавит его автоматически.

Запятая или точка с запятой в конце выводного списка в команде Debug.Print подавляет переход на новую строку (следующий Debug.Print начнет печать в той же строке).

Пример: Debug.Print «Результат y=»; y;

В любом операторе вывода (MsgBox, Cells, Debug.Print) возможен вывод не только готовых результатов, но и одновременный расчет и вывод:

Debug.Print «s = «; s, » k1+k2 = «; k1 + k2

MsgBox «Если диаметр = » & d & «, то радиус = » & d / 2

Для вывода числового значения в заданном формате в операторах вывода MsgBox, Debug.Print вместо имени переменной следует использовать функцию Format с указанием количества десятичных знаков.

Debug.Print z ‘вывод переменной z обычным образом

Debug.Print Format(z, «#0.00«) ‘вывод переменной z с 2-мя десятичными знаками

MsgBox Format(z, «#0.000«) ‘вывод переменной z с 3-мя десятичными знаками

В операторе вывода Cells функцию Format использовать не рекомендуется.

ЛИНЕЙНЫЕ ВЫЧИСЛИТЕЛЬНЫЕ ПРОЦЕССЫ

Простейшими являются программы, реализующие алгоритмы линейного вычислительного процесса. Программа в этом случае содержит операторы ввода данных, присваивания и вывода данных. Операторы записываются последовательно друг за другом в естественном порядке их следования и выполняются только один раз.

Общая структура линейной программы:

Option Explicit ‘Запрет использования необъявленных переменных

Ввод исходных данных

Пример_Л1. Составить ГСА и текст программы для вычисления функции:

где x = a∙t 2 + 0.2 , a = 18, t – произвольное.

ГСА Текст программы:

Option Explicit ‘Запрет использования необъявленных переменных

Sub Лин_процесс1() ‘Начало процедуры Лин_процесс1

Const a = 18 ‘Объявление константы a

Dim t As Single ‘Объявление вещественной переменной t

Dim x As Single ‘Объявление вещественной переменной x

Dim y As Single ‘Объявление вещественной переменной y

t = Val(InputBox(«Введите t»)) ‘Ввод значения t

x = a * t ^2 + 0.2 ‘Расчет x

y = (x ^ 2 + Log(x) — (x + 1) ^ 2) / (x * Sin(x)) ‘Расчет y

MsgBox «Результат y=» & y ‘Вывод y в диалоговое окно

End Sub ‘Конец процедуры

Ниже приведено решение того же примера с использованием других способов ввода и вывода данных.

Источник

Vba excel вывод данных на лист

Сделал сам с помощью цикла For . Next

Public Sub Пример12()
Dim Kodklienta As Integer, Stoimost As Integer, Vyplata As Integer
With Worksheets(«Лист4»).Range(«A3»)
kod = Range(.Offset(1, 0), .End(xlDown)).Rows.Count
qwe = 0
For i = 1 To kod
Stoimost = .Offset(i, 1)
Vyplata = .Offset(i, 2)
Dolg = Stoimost — Vyplata
kodkl = .Offset(i, 0)
If Dolg > 1000 Then
qwe = qwe + 1
Worksheets(«Лист5»).Range(«B3»).Off set(qwe, 0) = Dolg
Worksheets(«Лист5»).Range(«A3»).Off set(qwe, 0) = kodkl
End If
Next i
End With
End Sub

Позволю себе небольшой ликбез. Все что я скажу — мое ИМХО.

Система координат (СК).
Существуют два типа СК: абсолютные и относительные.
Относительные СК — это те которые ведет отсчет от каких либо ближайших ориентиров, а изменения координат записываются любим способ описывающим смещением объектов от ориентиров, или раннее описанных объектов. Они удобны для локальных пространств, и как правило применяются для сильно ограниченных объектов (содержащих ограниченное число точек (объектов)). Их преимущество в гибкости, объекты записанные (описанные) в подобных СК без особых проблем и потери точности можно привязать к любым абсолютным СК и связать между собой (если при описании объектов соблюдались ряд правил). Минус в том, что любое изменение влияет на ВЕСЬ объект (зачастую фатально) и как следствие нужно пересчитывать ВСЕ с нулю. Если объект большой (или это огромная цепочка объектов) то подобный пересчет весьма затруднителен, даже с использованием ЭВМ. А так же велика вероятность ошибки, так их очень ТРУДНО отслеживать.
Абсолютные СК — имеет одну единую точку взятую за ноль, а координаты объектов записываются в некой мере смещений от нулевой точки. Это глобальные системы, любая крупная сеть объектов должна иметь абсолютную СК. Минус систем в том, что перевод из одной СК в другую, может быть весьма проблематичен, и иметь в сложных случаях коэффициент не точности. Плюс же в том, что можно создавать единый СК. Что позволяет без каких либо дополнительных расчетов объединять неограниченное количество совершенно разных объектов и информации. Обработка данных становиться более легкой и наглядной, а алгоритмы упрощаются. Появляется понятие — стандарт.

Ты упорно используешь относительную СК «.Offset(i, 1)». Тогда как я стараюсь всегда стараюсь работать в абсолютной СК «cells(1,1)». В первую очередь из-за наглядности кода, поиск ошибок значительно упрощается, система ведет себя предсказуемо, тогда как при относительной СК заранее быть уверенным в результате нельзя — появляются факторы которые ты не контролируешь.
Range(«B3») — относится к абсолютной СК, но следует избегать использования такой адресации, так как подобные вид кода труднее воспринимается человеком, и сложнее поддает модернизации.

Прекрати использовать обращение вида «Worksheets(«Лист5″)». Обращайся к листу в текущей книге по кодовому имени, это даст независимость от пользователя, будет занимать меньше места, что благоприятно скажется на читаемости когда (строки бывают ох какие длинные и мудреные). Упростить модернизацию кода в будущем, да и это проще для восприятия, что так же не мало важно.

Константы вместо цифр.
ВЕЗДЕ где можно следует заменять цифры константами, и описывать их в начале когда. Это сделает код гибче, и позволит вносить изменения без серьезных исправлений самого кода. А так же повысится его читаемость. Например, что ты будешь делать если потребуется выявить клиентов с задолженностью в 2000 или 900 рублей? :))

Имена переменных.
Переменным лучше давать сложные составные имена. Так как простые имена не отображаются всех особенностей содержащейся в переменной информации. Например: «Stoimost» Это стоимость чего? Или «Dolg» — это чей долг (фирмы, партнера, банка или долг по зарплате)?
Переменные следует разбивать на группы, объединяя их по главному общему признаку, при это общий признак должен находиться в начале названия переменной. Например: КлиентСтоимость, КлиентДолг, КлиентТоварКолво, ФирмаДолг, СкладТоварКолво СкладТоварСтоимость и т.п.
Соблюдение этого правили будет особенно полезно, если ты собираешься развивать программу и код. В отдельных случаях удобно отображать в имени переменной ее тип, ставя первым знаком английскую букву — первую букву типа переменной (s, b, d, i и т.п.)

Все описанное я отразил в приведенном выше примере.

Источник

Студворк — интернет-сервис помощи студентам

Всем добрый вечер.
Собственно, проблема вот в чем, пользователь вводит количество столбцов и строк массива, после чего сам же вводит значения
Как сделать так, чтобы это выводилось на лист excela?

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Sub massiv()
Dim A() As Integer
Dim i, j As Integer
Dim n, m As Single
n = InputBox("Введите кол-во столбцов массива")
m = InputBox("Введите кол-во строк массива")
ReDim Preserve A(n, m)
For i = 1 To n
  For j = 1 To m
  A(i, j) = InputBox("Введите значения массива  А ")
Next j
Next i
 
End Sub

Заранее благодарю за помощь

Добавлено через 15 минут

Visual Basic
1
Worksheets("Лист1").Cells(1, 1).Resize(n, m).Value = A

Вроде бы добавил это после next i, выводит на лист, но проблема теперь в другом, почему при вводе первых трех значений — например ввожу подряд 1-2-3-4 с матрицей 2х2, он выдает на лист 0 0 0 и 4-ый элемент 1, не понимаю, к сожалению

Лекция
для ЗФ

ОПЕРАТОРЫ ВВОДА
И ВЫВОДА ДАННЫХ.

ЛИНЕЙНЫЕ
ВЫЧИСЛИТЕЛЬНЫЕ ПРОЦЕССЫ

ОПЕРАТОР
ПРИСВАИВАНИЯ
LET

Оператор присваивания
служит для вычисления значения выражения
и присваивания этого значения переменной.
При записи программы оператор Let
можно опускать.

Формат оператора:

[Let]
Имя_переменной
= Выражение

Примеры:

A=2.1

SUMMA=X+COS(X)^2

Следует различать
оператор присваивания и алгебраическое
равенство. Оператор Y
= A
+ B
означает для ЭВМ: сложить содержимое
ячеек памяти, отведенных для размещения
значений переменных А и В, и поместить
результат в ячейку памяти, отведенную
для значения переменной Y.
В программировании широко используется
конструкция оператора присваивания
типа I
= I
+ 1. К заданному значению переменной I
прибавляется 1, и результат помещается
в ту же ячейку, заменив бывшую там
информацию на новую. С точки зрения
математики равенство i=i+1
не имеет смысла.

При присвоении
переменным строковых значений их
необходимо заключать в кавычки:

T
= «Параметр 1»,

а значения типа
Дата/Время заключать в символы #
(«решетка»):

D
= #11/29/2008#

ОПЕРАТОРЫ
ВВОДА ДАННЫХ

Рассмотрим три
основных способа ввода данных.

1.
Запись значений переменных непосредственно
в тексте программы

осуществляется с помощью оператора
присваивания
.

Имя_переменной
= Выражение

Примеры:

A
= 3

TOK
= 480

Этот способ
используется, если исходные данные не
изменяются

при нескольких исполнениях программы.

2.
Ввод данных из
ячеек рабочего листа
Excel.

Для этого используется
инструкция Сells(ij),
которая в данном случае выступает как
функция ввода данных. Формат использования:

Имя_переменной
=
С
ells(i,
j),

где i,
j
– порядковые номера соответственно
строки и столбца (числовые значения!),
на пересечении которых находится ячейка,
т. е. адрес ячейки.

При этом следует
иметь в виду, что данные на листе Excel
уже имеются.

Пример: А
= Сells(1,
2)

После
выполнения этой команды переменной А
присвоится значение, которое хранится
в ячейке, находящейся в первой строке
(первая цифра) и во втором столбце (вторая
цифра), т. е. в ячейке B1
электронной таблицы.

3.
Ввод данных непосредственно в
ходе выполнения программы
,
т. е. в диалоговом режиме, выполняется
с помощью диалогового окна ввода
информации, реализуемого функцией
InputBox.
Основной
формат этой функции:

Имя_переменной
=
InputBox(“Сообщение”
[, “Заголовок”] [, “Значение”])
.

В ходе работы
программы при выполнении данной команды
на экране монитора появляется диалоговое
окно с указанным Заголовком,
содержащее текст Сообщения,
а также поле ввода с указанным Значением:

Выполнение программы
приостанавливается в ожидании ввода
данных с клавиатуры и нажатия одной из
кнопок. После ввода информации и нажатия
на кнопку ОК
переменной присваивается значение типа
String
(строковый тип данных), содержащее текст,
введенный в поле ввода.

Пример:
x

=
InputBox(“Введите
x”,
“Ввод исходных данных”, “0.15”)

Имя окна можно
опустить (при этом местоположение
запятых сохраняется):

x
= InputBox(«Введите
x»,
, «0.15»)

Функция InputBox
используется, когда исходные данные
меняются при
каждом запуске программы
,
поэтому обычно значение переменной не
задается и применяется простейший
вариант записи этой функции:

Имя_переменной
=
InputBox(“Сообщение”)

Пример:
d
= InputBox(“Введите
значение диаметра”)

Если в поле ввода
в появившемся диалоговом окне ввести
23, то в переменную d
будет записан текст “23”, а не число 23.
Текстовая строка “23” представляет
собой лишь визуальное отображение
числа, но не является числом в буквальном
смысле слова, т. е. с ним, как и с любым
другим текстом, нельзя производить
никаких арифметических действий.

Для преобразования
строкового типа данных в числовой тип
используется функция
Val(Строка),
которая возвращает число, содержащееся
в Строке,
как числовое значение соответствующего
типа.

При записи в коде
программы

d
= Val(InputBox(“Введите
значение диаметра”))

и вводе в поле
ввода цифр 23 переменной d
присвоится число 23.

ОПЕРАТОРЫ
ВЫВОДА ДАННЫХ

Рассмотрим три
основных способа вывода данных.

1.
Вывод в
диалоговое окно

с помощью команды MsgBox:

MsgBox
«Сообщение», , «Заголовок»

В
результате выполнения этой команды на
экране появляется диалоговое окно
Заголовок,
содержащее указанный текст Сообщения.
Выполнение программы приостанавливается
до нажатия пользователем кнопки ОК.

Пример:
MsgBox y , ,
«Результат»

В данном случае в
качестве выводимого в окно Результат
сообщения задано текущее значение
переменной y:

Простейший формат
записи оператора MsgBox:

MsgBox
«Сообщение»

Обычно сообщение
включает в себя не только выводимое
значение, но и комментарий, который
заключается в кавычки. Для слияния
нескольких фрагментов в одну строку в
операторе вывода их разделяют знаком
&.

Пример: MsgBox
“Значение диаметра =” & d

В результате на
экране появится следующее диалоговое
окно:

2.
Вывод данных на
лист рабочей книги
Excel
с использованием инструкции Сells(i,
j).
В этом случае в отличие от ранее
рассмотренного она выступает как команда
вывода:

Cells(i,
j)
=
«Сообщение».

В результате этой
команды указанное Сообщение
помещается в ячейку с адресом, определяемым
номером строки i
и номером столбца j.

Примеры:

Cells(1,
1) = “x=” ‘Вывод
в ячейку
A1
текста
x=

Cells(1,
2) = x ‘Вывод
в ячейку
B1
текущего значения переменной
x

3.
Вывод данных в
окно отладки

Immediate
(«Немедленно»). Это окно обычно
располагается под окном программного
кода. Если этого окна нет, то его можно
вывести, нажав Ctrl+G
или из главного меню VBA
View
Immediate Window.

Для вывода в окно
отладки применяется метод Print
(печать)
объекта
Debug
(отладчик). Формат записи:

Debug.Print
[«Сообщение»]

Пример:
Debug.Print “Значение диаметра =” & d

Как видно из этого
примера, команда Debug.Print используется
аналогично команде MsgBox.

Пустой (т. е. без
Сообщения)
метод Debug.Print
выводит пустую строку.

Помимо знака &
в методе Print
возможно использование разделителей
списка выводимых данных. При этом знак
«;»
означает вывод очередного значения
непосредственно за предыдущим, знак
«,»
– переход к началу новой зоны печати
(окно отладки делится на 5 вертикальных
зон по 14 символов каждая). При вводе знак
«;»
между
элементами выводного списка можно
опускать, VBA
добавит его автоматически.

Запятая или точка
с запятой в конце выводного списка в
команде Debug.Print
подавляет переход на новую строку
(следующий Debug.Print
начнет печать в той же строке).

Пример:
Debug.Print «Результат y=»;
y;

В любом операторе
вывода

(MsgBox,
Cells,
Debug.Print)
возможен вывод не только готовых
результатов, но и одновременный расчет
и вывод:

Примеры:

Debug.Print
«s = «;
s,
» k1+k2 = «;
k1 + k2

MsgBox
«Если диаметр = » & d & «, то
радиус = » & d / 2

Для вывода числового
значения в заданном формате в операторах
вывода MsgBox,
Debug.Print
вместо имени переменной следует
использовать функцию Format
с указанием количества десятичных
знаков.

Примеры:

Debug.Print
z
‘вывод
переменной z
обычным образом

Debug.Print
Format(z,
«#0.
00«)
‘вывод переменной
z
с 2-мя десятичными знаками

MsgBox
Format(z,
«#0.
000«)
‘вывод переменной
z
с 3-мя десятичными знаками

В операторе вывода
Cells
функцию Format
использовать не рекомендуется.

ЛИНЕЙНЫЕ
ВЫЧИСЛИТЕЛЬНЫЕ ПРОЦЕССЫ

Простейшими
являются программы, реализующие алгоритмы
линейного вычислительного процесса.
Программа в этом случае содержит
операторы ввода данных, присваивания
и вывода данных. Операторы записываются
последовательно друг
за другом в естественном порядке их
следования и выполняются только один
раз.

Общая
структура линейной программы:

Option
Explicit ‘Запрет
использования необъявленных переменных

Sub
Имя_процедуры()

Объявление
констант

(Const
)

Объявление
переменных

(Dim
)

Тело процедуры:

Ввод исходных
данных

Вычисления

Вывод результатов

End
Sub

Пример_Л1.
Составить ГСА и текст программы для
вычисления функции:


где x
= a∙t2
+ 0.2 , a
= 18, t
– произвольное.

ГСА Текст
программы:

Option
Explicit
‘Запрет
использования необъявленных переменных

Sub
Лин_процесс1()
‘Начало
процедуры
Лин_процесс1

Const
a
= 18 ‘Объявление
константы a

Dim
t
As
Single
‘Объявление
вещественной переменной t

Dim
x
As
Single
‘Объявление
вещественной переменной x

Dim
y
As
Single
‘Объявление
вещественной переменной y

t
= Val(InputBox(«Введите
t»))
‘Ввод значения t

x = a
* t ^2 + 0.2
‘Расчет
x

y = (x
^ 2 + Log(x) — (x + 1) ^ 2) / (x * Sin(x))
‘Расчет
y

MsgBox
«Результат y=»
& y
‘Вывод y
в диалоговое окно

End
Sub
‘Конец
процедуры

Ниже приведено
решение того же примера с использованием
других способов ввода и вывода данных.

стр. 6 из
6

Соседние файлы в папке VBA-Учебные материалы

  • #
  • #
  • #
  • #
  • #
  • #
  • #

Перейти к содержимому раздела

Серый форум

разработка скриптов

Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.

Страницы 1

Чтобы отправить ответ, вы должны войти или зарегистрироваться

1 2018-09-29 15:57:28

  • alkhimovmet
  • Участник
  • Неактивен
  • Рейтинг : [0|0]

Тема: VBA: Запись результатов на другой лист

Добрый день.
У меня имеется макрос, результаты которог выводятся в столбец 1 на том же листе. А что прописать в макросе, чтобы результаты выводились на другой лист?
Вот код макроса:

Public Sub Counter()
Dim CounterCell As Range, i As Long, r As Range, dest As Range
Set CounterCell = ActiveSheet.Range("A1")
CounterCell.Value = 2674.96

Application.ScreenUpdating = False


i = 1372
Do While CounterCell.Value < 10000#
    CounterCell.Value = CounterCell.Value + 0.01
    If [MAX(BN6:BN1018)] > 4 Then
    Cells(i, 1) = [A1]
    i = i + 1
    Else
    If [MAX(EF6:EF1018)] > 4 Then
    Cells(i, 1) = [A1]
    End If
    End If
Loop

Application.ScreenUpdating = True

End Sub

Надо, чтобы результааты выводились не в первый столбец этого же листа, а на другой лист с именем Лист 2

2 Ответ от alexii 2018-09-29 16:43:09 (изменено: alexii, 2018-09-29 16:44:01)

  • alexii
  • Разработчик
  • Неактивен

Re: VBA: Запись результатов на другой лист

alkhimovmet пишет:

результааты выводились не в первый столбец этого же листа

Результаты у Вас выводятся не на «этот же лист», а на активный рабочий лист, работает лишь потому, что активный рабочий лист у Вас не меняется в процессе.

alkhimovmet пишет:

а на другой лист с именем Лист 2

Видимо, речь про это (не проверялось):

ThisWorkbook.Worksheets.Item("Лист 2").Cells(i, 1).Value = [A1]

3 Ответ от alkhimovmet 2018-09-30 08:41:06

  • alkhimovmet
  • Участник
  • Неактивен
  • Рейтинг : [0|0]

Re: VBA: Запись результатов на другой лист

Sheets("Лист2").Cells(i, 1) = Sheets("Sheet1").[A1]

Написал так и работает, но меня терзают смутные сомнения , что это не совсем так правильно. Может подскажите?

4 Ответ от alexii 2018-09-30 09:03:38

  • alexii
  • Разработчик
  • Неактивен

Re: VBA: Запись результатов на другой лист

Я бы написал так:

ThisWorkbook.Worksheets.Item("Лист 2").Cells(i, 1).Value = ThisWorkbook.Worksheets.Item("Sheet1").Range("A1").Value

5 Ответ от alkhimovmet 2018-09-30 16:12:38

  • alkhimovmet
  • Участник
  • Неактивен
  • Рейтинг : [0|0]

Re: VBA: Запись результатов на другой лист

Спасибо огромное! Непременно заменю

6 Ответ от alkhimovmet 2018-10-02 14:23:26

  • alkhimovmet
  • Участник
  • Неактивен
  • Рейтинг : [0|0]

Re: VBA: Запись результатов на другой лист

Уважаемый alexii! Еще раз Вам спасибо. Вставил, как Вы рекомендовали, все работает, сбрев нет. Просто супер!!!

Сообщения 6

Страницы 1

Чтобы отправить ответ, вы должны войти или зарегистрироваться

Оптимальный путь вывода большого одномерного массива на лист

SkyPro

Дата: Пятница, 08.11.2013, 02:22 |
Сообщение № 1

Группа: Друзья

Ранг: Старожил

Сообщений: 1206


Репутация:

255

±

Замечаний:
0% ±


2010

Придумал такой алгоритм:

Процедура выводит одномерный массив на лист через функцию листа Transpose.
Подскажите, пожалуйста, как можно этот код улучшить и оптимизировать?
Или есть более быстрые варианты?
ЗЫ: Планируется выгружать около 1 млн. значений.


skypro1111@gmail.com

Сообщение отредактировал SkyProПятница, 08.11.2013, 02:31

 

Ответить

RAN

Дата: Пятница, 08.11.2013, 02:54 |
Сообщение № 2

Группа: Друзья

Ранг: Экселист

Сообщений: 5645

Хитрый ты наш. Cам себя перехитрил.
[vba]

Код

ReDim tmp(1 To UBound(arArray), 1 to 1)
         For i = 1To UBound(arArray)
             tmp(i, 1) = arArray(i)
         Next

[/vba]
И никаких Transpose.


Быть или не быть, вот в чем загвоздка!

 

Ответить

PowerBoy

Дата: Пятница, 08.11.2013, 06:20 |
Сообщение № 3

Группа: Проверенные

Ранг: Участник

Сообщений: 100


Репутация:

31

±

Замечаний:
0% ±


2003

Миллионы записей надо выводить запросами.


Excel + SQL = ActiveTables (http://vk.com/ExcelSQL)

 

Ответить

MCH

Дата: Пятница, 08.11.2013, 08:39 |
Сообщение № 4

Группа: Админы

Ранг: Старожил

Сообщений: 2002


Репутация:

751

±

Замечаний:
±


т.к. исходный массив arArray() и массив ar() объявлены как Variant,
то выводить можно сразу квадратом, с учетом пустых значений в конце массива ar(), ячейки будут пустыми:

[vba]

Код

Option Explicit

Sub proverka()
Dim i&
Dim x(1 To 777777)
For i = LBound(x) To UBound(x)
     x(i) = i
Next
arToRange x, 1, 1
End Sub

Public Sub arToRange(ByVal arArray, startRow&, startColumn&)
     Application.ScreenUpdating = False
     Application.Calculation = xlCalculationManual

           Dim maxRow&, maxCol&, i&, j&, k&
     maxRow = 50000
     ‘maxRow = Rows.Count — startRow + 1
     maxCol = (UBound(arArray) — LBound(arArray)) maxRow + 1
     ReDim ar(1 To maxRow, 1 To maxCol)
     j = 1
     For k = LBound(arArray) To UBound(arArray)
         i = i + 1
         If i > maxRow Then i = 1: j = j + 1
         ar(i, j) = arArray(k)
     Next k

     Cells(startRow, startColumn).Resize(maxRow, maxCol) = ar

           Application.ScreenUpdating = True
     Application.Calculation = xlCalculationAutomatic
End Sub

[/vba]

Сообщение отредактировал MCHПятница, 08.11.2013, 08:42

 

Ответить

RAN

Дата: Пятница, 08.11.2013, 09:00 |
Сообщение № 5

Группа: Друзья

Ранг: Экселист

Сообщений: 5645

Насколько я понял — нужен 1 столбец. Так что два цикла, вкупе с Transpose, большаяяя хитрость.


Быть или не быть, вот в чем загвоздка!

 

Ответить

MCH

Дата: Пятница, 08.11.2013, 09:17 |
Сообщение № 6

Группа: Админы

Ранг: Старожил

Сообщений: 2002


Репутация:

751

±

Замечаний:
±


Насколько я понял — нужен 1 столбец. Так что два цикла, вкупе с Transpose, большаяяя хитрость.

А я даже не обратил на это внимание, думал нужно по столбцам раскидать, макрос ведь не запускал :(
а так, нужно переложить из одномерного массива в двухмерный и выложить целиком на лист,

но в моем варианте есть небольшое плюс, можно массивы более миллиона записей выкладывать, раскидывая их по столбцам

 

Ответить

SkyPro

Дата: Пятница, 08.11.2013, 11:07 |
Сообщение № 7

Группа: Друзья

Ранг: Старожил

Сообщений: 1206


Репутация:

255

±

Замечаний:
0% ±


2010

Да. Выводить нужно в столбец.
Андрей, никак не пойму, как с твоим способом обойтись без транспоза?
Александр, чуток уточнить направление поиска «выводить запросами»? Насколько я понял, вы имели ввиду SQL ?


skypro1111@gmail.com

Сообщение отредактировал SkyProПятница, 08.11.2013, 11:09

 

Ответить

SkyPro

Дата: Пятница, 08.11.2013, 11:19 |
Сообщение № 8

Группа: Друзья

Ранг: Старожил

Сообщений: 1206


Репутация:

255

±

Замечаний:
0% ±


2010

«дурная голова рукам покоя не дает»
Я думал, что массив на лист вывести можно либо циклом по ячейкам (что ооооочень долго), либо транспозом (что быстро).
Вот и выбрал быстрый вариант и голову себе вчера ломал.
А всего-то нужно было сделать из одномерного массива двумерный =
Андрей, Михаил, спасибо вам, что просветили :)


skypro1111@gmail.com

Сообщение отредактировал SkyProПятница, 08.11.2013, 11:22

 

Ответить

PowerBoy

Дата: Пятница, 08.11.2013, 12:33 |
Сообщение № 9

Группа: Проверенные

Ранг: Участник

Сообщений: 100


Репутация:

31

±

Замечаний:
0% ±


2003

Александр, чуток уточнить направление поиска «выводить запросами»? Насколько я понял, вы имели ввиду SQL ?

Я так понимаю чтобы вывести быстро миллион записей, их еще надо быстро прочитать.
Оптимально конечно с помощью SQL, ADO.

Если лень писать макрос, можно воспользоваться моей надстройкой «Активные таблицы»:
http://www.excelworld.ru/forum/3-5665-68943-16-1383896892


Excel + SQL = ActiveTables (http://vk.com/ExcelSQL)

 

Ответить

SkyPro

Дата: Пятница, 08.11.2013, 13:15 |
Сообщение № 10

Группа: Друзья

Ранг: Старожил

Сообщений: 1206


Репутация:

255

±

Замечаний:
0% ±


2010

Спасибо.
В моем случае массив фомируется, а не считывается. Так что вывод проще организовать «обычным» способом.
А вашу надстройку, при возможности, обязательно попробую :)


skypro1111@gmail.com

 

Ответить

RAN

Дата: Пятница, 08.11.2013, 16:12 |
Сообщение № 11

Группа: Друзья

Ранг: Экселист

Сообщений: 5645

Надо было вчера еще строчку кода добавить. Но не подозревал, что проблема в этом.


Быть или не быть, вот в чем загвоздка!

 

Ответить

Понравилась статья? Поделить с друзьями:
  • Vba excel вывести значение ячейки
  • Vba excel вывести всю строку
  • Vba excel выбрать файл для открытия
  • Vba excel выбрать строки
  • Vba excel выбрать путь к файлу