MyTetra Share
Делитесь знаниями!
Перенос двумерного массива на лист Excel
Время создания: 16.03.2019 23:43
Текстовые метки: vba, array, excel, sheet
Раздел: Разные закладки - VBA - Array
Запись: xintrea/mytetra_db_adgaver_new/master/base/1514663547i8m4ivsaey/text.html на raw.githubusercontent.com

Перенос двумерного массива на лист Excel

  • Макросы VBA Excel
  • Работа с диапазонами ячеек и листами
  • Обработка массивов

Функция 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

  • 29844 просмотра
Так же в этом разделе:
 
MyTetra Share v.0.65
Яндекс индекс цитирования