Массив vba вывод на лист excel

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

Всем добрый вечер.
Собственно, проблема вот в чем, пользователь вводит количество столбцов и строк массива, после чего сам же вводит значения
Как сделать так, чтобы это выводилось на лист 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, не понимаю, к сожалению

I’ve written a macro that takes a 2 dimensional array, and «prints» it to equivalent cells in an excel workbook.

Is there a more elegant way to do this?

Sub PrintArray(Data, SheetName, StartRow, StartCol)

    Dim Row As Integer
    Dim Col As Integer

    Row = StartRow

    For i = LBound(Data, 1) To UBound(Data, 1)
        Col = StartCol
        For j = LBound(Data, 2) To UBound(Data, 2)
            Sheets(SheetName).Cells(Row, Col).Value = Data(i, j)
            Col = Col + 1
        Next j
            Row = Row + 1
    Next i

End Sub


Sub Test()

    Dim MyArray(1 To 3, 1 To 3)
    MyArray(1, 1) = 24
    MyArray(1, 2) = 21
    MyArray(1, 3) = 253674
    MyArray(2, 1) = "3/11/1999"
    MyArray(2, 2) = 6.777777777
    MyArray(2, 3) = "Test"
    MyArray(3, 1) = 1345
    MyArray(3, 2) = 42456
    MyArray(3, 3) = 60

    PrintArray MyArray, "Sheet1", 1, 1

End Sub

Вывод массива

Для
распечатки полученного массива на
рабочий лист Excel
используется следующая конструкция:

For i = 1 To n

Cells(k, i) = A(i) ‘
вывод массива в ячейки электронной
таблицы

Next
i ‘ k
– номер строки для заполнения ячеек.

Вместо
переменной k
можно использовать конкретное значение,
например 3, тогда массив распечатается
в третьей строке рабочего листа.

После
заполнения ячеек их содержимое можно
посмотреть, свернув окно программного
кода при помощи кнопки “Свернуть” или
переключившись в окно Excel
с помощью соответствующей кнопки на
панели задач.

В
VBA
удобно пользоваться различными рабочими
листами в одной программе. Для установки
нужного рабочего листа используется
следующая команда:

Worksheets(Имя
листа).
Select

Например,
Worksheets(“Лист1”).Select
– переход на рабочий лист с именем
“Лист1”.

Пример 14.

Пусть одномерный
массив А, состоящий из десяти элементов,
находится на рабочем листе “Лист1”, а
массив В, состоящий из десяти элементов,
находится на рабочем листе “Лист2”.
Необходимо прочитать массив А с листа
“Лист1” и расположить его на листе
“Лист2” ниже массива В.

Программный
код

Option
Explicit

Sub
PR14 (
)

Dim
A(10) As Integer

Dim
B(10) As Integer

Dim
i As Integer

For
i = 1 To 10

Worksheets(«Лист1»).Select
‘ выбираем
Лист1

A(i)
= Worksheets(«Лист1»).Cells(1,
i) ‘ считываем
с
Лист1
массив
А

Worksheets(«Лист2»).Select
‘ выбираем
Лист2

Worksheets(«Лист2»).Cells(2,
i) = A(i) ‘ выводим
на
Лист2
массив
А

Next i

End Sub

Вычисление суммы, произведения и количества элементов в одномерном массиве

Вычисление
суммы, произведения и количества
элементов в одномерных массивах
производится обязательно в цикле, перед
которым сумма приравнивается к нулю,
произведение – к единице, количество
– к нулю.

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

Пример
15.

Задан
целочисленный массив А, состоящий из
N элементов. Вычислить среднее
арифметическое четных элементов и
среднее геометрическое нечетных
элементов.

Программный
код

Option
Explicit

Sub
PR15 (
)

Dim
i As Integer, S As Integer

Dim
K1, K2, N As Integer

Dim
PR, SA, SG As Double

Dim
A(50) As Integer

N
= Val(InputBox(«Введите
N»))

S
= 0: PR
= 1: K1
= 0: K2
= 0 ‘ начальные значения

For
i = 1 To N

A(i)
= Cells(1, i) ‘ ввод
массива

Next
i

For
i = 1 To N

If
A(i) mod 2 = 0 Then

S
= S
+ A(i)
‘ вычисление суммы
и

K1
= K1
+ 1 ‘ количества четных
элементов

End
If

If
A(i) mod 2 < > 0 Then

PR = PR *
A(i) ‘ вычисление
произведения
и

K2
= K2
+1 ‘ количества нечетных элементов

End
If

Next
i

MsgBox(«S=»
& S & » K1=» & K1)

MsgBox(«PR=»
& PR & » K2=» & K2)

If
K1
< > 0 Then

SA
= S
/ K1
‘ вычисление среднего
арифметического

MsgBox(«SA=»
& SA)

Else

MsgBox(«четных
элементов нет»)

End
If

If
K2 < > 0 And PR>0 Then

SG
= PR
^ (1 / K2)
‘ вычисление среднего геометрического

MsgBox(«SG=»
& SG)

Else

MsgBox(«нечетных
элементов нет»)

End
If

End
Sub

Соседние файлы в папке VBA

  • #
  • #
  • #

Функция Array2worksheet позволяет быстро сформировать лист на основании данных из двумерного массива

Sub Array2worksheet(ByRef sh As Worksheet, ByVal Arr, ByVal ColumnsNames)
    ' Получает двумерный массив Arr с данными,
    ' и массив заголовков столбцов ColumnsNames.
    ' Заносит данные из массива на лист sh
    If UBound(Arr, 1) > sh.Rows.Count - 1 Or UBound(Arr, 2) > sh.Columns.Count Then
        MsgBox "Массив не влезет на лист " & sh.Name, vbCritical, _
               "Размеры массива: " & UBound(Arr, 1) & "*" & UBound(Arr, 2): End
    End If
    With sh
        .UsedRange.Clear
        ColumnsNamesCount = UBound(ColumnsNames) - LBound(ColumnsNames) + 1
        .Range("a1").Resize(, ColumnsNamesCount).Value = ColumnsNames
        .Range("a1").Resize(, ColumnsNamesCount).Interior.ColorIndex = 15
        .Range("a2").Resize(UBound(Arr, 1), UBound(Arr, 2)).Value = Arr
        .UsedRange.EntireColumn.AutoFit
    End With
End Sub
Sub ПримерИспользованияФункции_Array2worksheet()
    ' формируем двумерный массив, и заполняем его данными
    ReDim MyArr(1 To 20, 1 To 3)
    For i = 1 To 20: For j = 1 To 3: MyArr(i, j) = "Ячейка " & i & " * " & j: Next j: Next i
 
    ' создаём новую книгу, а в ней - лист для массива
    Dim sh As Worksheet: Set sh = Workbooks.Add(-4167).Worksheets(1): sh.Name = "Массив"
    ' заносим данные из массива MyArr на лист sh
    Array2worksheet sh, MyArr, Array("Столбец 1", "Столбец 2", "Столбец 3")
End Sub

Несколько модернизированный вариант функции — вставку на лист можно начинать с любой выбранной ячейки:

Sub Array2worksheetEx(ByRef FirstCell As Range, ByVal Arr, ByVal ColumnsNames)
    ' Получает двумерный массив Arr с данными, и массив заголовков столбцов ColumnsNames.
    ' Заносит данные из массива на лист, начиная с ячейки FirstCell
    Dim sh As Worksheet: Set sh = FirstCell.Worksheet
    If UBound(Arr, 1) > sh.Rows.Count - FirstCell.Row Or _
       UBound(Arr, 2) > sh.Columns.Count - FirstCell.Column Then
        MsgBox "Массив не влезет на лист " & sh.Name, vbCritical, _
               "Размеры массива: " & UBound(Arr, 1) & "*" & UBound(Arr, 2): End
    End If
 
    ColumnsNamesCount = UBound(ColumnsNames) - LBound(ColumnsNames) + 1
    On Error Resume Next
    With FirstCell.Resize(1, ColumnsNamesCount)
        .ClearContents
        Intersect(sh.Range((FirstCell.Row + 1) & ":" & sh.Rows.Count), _
                  sh.UsedRange, .EntireColumn).ClearContents
        .Value = ColumnsNames
        .Interior.ColorIndex = 15: .Font.Bold = True
        FirstCell.Offset(1).Resize(UBound(Arr, 1), UBound(Arr, 2)).Value = Arr
        .EntireColumn.AutoFit
    End With
End Sub

Return to VBA Code Examples

In this Article

  • Output (Print) Array to Range
    • Output Data to a Different Range
    • Looping Through an Array and Outputting the data
    • Transpose Array Data
  • Output to Debug.Print

This tutorial will demonstrate how to output an array to a range using VBA.

Output (Print) Array to Range

Data that is stored in an array can easily be outputted into an Excel sheet.  There are 3 ways to do this.

Output Data to a Different Range

We could populate an array with data from one range in Excel, and then output the data to a different range in Excel.

Public Sub TestOutput()
'declare the array
   Dim rnArray() As Variant
'populate the array with the range 
   rnArray = Range("A1:H24")
'output the array to a different range of cells
   Range("J1:Q24") = rnArray()
End Sub

The entire array is copied in one line of code to the array, and then outputted in it’s entirety to a different range of cells on the sheet.

Looping Through an Array and Outputting the data

This example will loop through an array, outputting the array to a range.

Public Sub TestLoopArray()
'declare the array
   Dim rnArray() As Variant
'Declare the integer to store the number of rows
   Dim iRw As Integer
'Assign range to a the array variable
   rnArray = Range("A1:A10")
'loop through the values in the array
   For iRw = LBound(rnArray) To UBound(rnArray)
'populate a different range with the data
      Cells(iRw, 2).Value = rnArray(iRw, 1)
   Next iRw
End Sub

LBound and UBound returns the Starting index (Lower Bound) and Ending index (Upper Bound) of an array, in this case 1 and 10.

Transpose Array Data

We can also transpose the data in the Array to the Excel sheet.  Transpose allows you to display the data horizontally across the Excel sheet.

For example, if we have a list of states in Excel and wish to transpose them.

vba array transpose 1

We could then run the following code:

Public Sub TestOutputTranspose()
'declare the array
   Dim rnArray() As Variant
'populate it with the range
   rnArray = Range("A1:A38")
'transpose the data
   Range(Cells(1, 3), Cells(1, 40)).Value = Application.Transpose(rnArray)
End Sub

Which would result in the following:

vba array transpose 2

Output to Debug.Print

We can also output the array values to the debug window.

Public Sub TestLoopArray()
'declare the array
   Dim rnArray() As Variant
'Declare the integer to store the number of rows
   Dim iRw As Integer
'Assign range to a the array variable
   rnArray = Range("A1:A10")
'loop through the rows - 1 to 10
   For iRw = 1 To UBound(rnArray)
'output to the immediate window
     Debug.Print rnArray(iRw, 1)
   Next iRw
End Sub

VBA Coding Made Easy

Stop searching for VBA code online. Learn more about AutoMacro — A VBA Code Builder that allows beginners to code procedures from scratch with minimal coding knowledge and with many time-saving features for all users!
vba save as

Learn More!

Василий, в VBA используются в основном два вида массивов (есть ещё трёхмерный и т.д.):

  • одномерный;
  • двумерный.

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

Vba-функция «Array» создаёт одномерный массив. Когда вы его помещаете в Excel, то он и занимает соответствующие ячейки.

Чтобы вставить массив в несколько строк, нужно создать двумерный массив. Для этого можно использовать разные способы. Ниже используется эксель-функция «Transpose». В результате её использования будет создан двумерный массив, представляющий собой таблицу, состоящую из одного столбца и несколько строк. Функция «Transpose» меняет местами строки и столбцы.

Sub TABL()
    Cells(1, 1).Resize(1, 7) = Array(«ФИО», «КД», «ТИП», «ПОД», «ОСЗ», «%%», «ПЕНИ»)
    Cells(2, 1).Resize(5, 1) = WorksheetFunction.Transpose(Array(«Иванов», «Петров», «Сидоров», «Козлов», «Конев»))
End Sub

Понравилась статья? Поделить с друзьями:
  • Массив vba excel с помощью цикла
  • Массив данных excel впр
  • Маска цифры в excel
  • Массив vba excel описание
  • Массив времени в excel