Домашняя страница Undo Do Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Готовые решения

МЕНЮ САЙТА
  • 1
  • 2
  • 3

КАТЕГОРИИ РАЗДЕЛА

ОПРОСЫ
Какой версией Excel Вы пользуетесь?
Всего ответов: 57567
Главная » Готовые решения » VBA » Полезные приёмы

Считывание диапазона в массив
18.08.2013, 18:47
Sub example_1() 'двумерные массивы (на выбор)
Dim x
x = Range("A1", Cells(Rows.Count, 1).End(xlUp)).Value
x = Range("A1", Cells(5, Columns.Count).End(xlToLeft)).Value
x = Range("A1").CurrentRegion.Value
With Sheets("Sheet1")
 x = .Range("A1:D" & .Cells(Rows.Count, 1).End(xlUp).Row).Value
 x = .UsedRange.Value
End With
End Sub
Sub example_2() 'одномерный массив (на выбор), индексация всегда с 1
Dim x
With Range("A1", Cells(Rows.Count, 1).End(xlUp)) 'из столбца
 x = WorksheetFunction.Transpose(.Value)
End With
With WorksheetFunction 'из строки
 x = .Transpose(.Transpose(Range("A1", Cells(1, Columns.Count).End(xlToLeft)).Value))
End With
x = Application.Index(Range("A1", Cells(1, Columns.Count).End(xlToLeft)).Value, 1, 0)
End Sub
Sub example_3() 'одномерный массив без дубликатов из столбца с заголовком
Dim x, i&
i = ActiveSheet.UsedRange.Columns(1).Rows.Count
x = Filter(Evaluate("TRANSPOSE(IF(COUNTIF(OFFSET(a2:a" & i & ",0,0,ROW(1:" & i - 1 & _
 ")),a2:a" & i & ")=1,a2:a" & i & ",CHAR(126)))"), "~", 0)
Range("B1").Resize(UBound(x) + 1).Value = WorksheetFunction.Transpose(x)
End Sub
Sub example_4() 'одномерный массив без дубликатов из столбца без заголовка
Dim x
With ActiveSheet.Cells(1).CurrentRegion.Columns(1)
 x = Filter(.Parent.Evaluate("TRANSPOSE(IF(COUNTIF(OFFSET(" & .Address & ",0,0,ROW(1:" & .Rows.Count & _
 "))," & .Address & ")=1," & .Address & ",CHAR(126)))"), "~", 0)
End With
Range("B1").Resize(UBound(x) + 1).Value = WorksheetFunction.Transpose(x)
End Sub
Sub example_5() 'одномерный массив без пустых значений из столбца
Dim x
With Range("A1", Cells(Rows.Count, 1).End(xlUp))
 x = Split(Replace(Join(Filter(Split("~" & Join(Application.Transpose(.Value), "~|~") & "~", "|"), _
 "~~", False), "|"), "~", ""), "|")
End With
Range("B1").Resize(UBound(x) + 1).Value = WorksheetFunction.Transpose(x)
End Sub
Sub example_6() 'массив из строки (только для англ. алфавита!)
Dim myStr As String, x: myStr = "AsDfghErt"
x = Split(StrConv(myStr, 64), Chr(0))
Range("B1").Resize(UBound(x)).Value = WorksheetFunction.Transpose(x)
End Sub
Добавил: nilem | | Теги: vba, диапазон в массив, range_to_array, ВБА
Просмотров: 27576 | Рейтинг: 3.9/13
Всего комментариев: 2
+1   Спам
1    VovaK   (28.08.2023 12:01) [ Материал]
   Добавлю для таблиц с Заголовками (в примере высотой 4 строки)
Sub example_1() 'двумерные массивы (на выбор)
Dim x

With Sheets("Sheet1")
x = Intersect(.UsedRange.Value,.UsedRange.Offset(4,0))
End With
End Sub

Считывание массива из несвязанных диапазонов (например после выполнения фильтра данных)
Массив горизонтальный (Итог необходимо транспонировать)

Sub Example()
Dim rng as Range, arr(), i as long, j as integer
Dim n as integer

With rng.SpecialCells(xlCellTypeVisible)
For i = 1 To .Areas.Count
For j = 1 To .Areas(i).Rows.Count
Redim Preserve arr(n,j)
For n=1 to rng.columns.count
Arr(n,j) = .Areas(i).Rows(j).cells(1,n).value
Next n
Next j
Next i
End With
End Sub

0   Спам
2    VovaK   (01.11.2023 14:48) [ Материал]
   Добавлю для таблиц с Заголовками (в примере высотой 4 строки)
Sub example_1() 'двумерные массивы

x = Intersect(.Rows("2:12"), .Columns("B:D")).Value

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!