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

Вход

Регистрация

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

 

= Мир MS Excel/Вывод в массив данных с двух листов книги - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Вывод в массив данных с двух листов книги (Макросы Sub)
Вывод в массив данных с двух листов книги
Shadow-xxx Дата: Четверг, 16.01.2014, 11:00 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Здравствуйте. Есть книга Excel c данными на двух листах (Лист1, Лист2). Данные записаны в три столбца и неизвестным количеством строк (не больше 1000). Я не могу понять, как обратиться к этим данным и сохранить их в два массива (A(x,y,z) - Лист1; В(x,y,z) - Лист2), чтобы потом производить с ними действия. Данные могут быть как строчные, так и цифры. Если возможно, то хотелось бы видеть код попроще, чтобы было удобнее в нем разобраться. Буду очень благодарен за понимание и помощь.
 
Ответить
СообщениеЗдравствуйте. Есть книга Excel c данными на двух листах (Лист1, Лист2). Данные записаны в три столбца и неизвестным количеством строк (не больше 1000). Я не могу понять, как обратиться к этим данным и сохранить их в два массива (A(x,y,z) - Лист1; В(x,y,z) - Лист2), чтобы потом производить с ними действия. Данные могут быть как строчные, так и цифры. Если возможно, то хотелось бы видеть код попроще, чтобы было удобнее в нем разобраться. Буду очень благодарен за понимание и помощь.

Автор - Shadow-xxx
Дата добавления - 16.01.2014 в 11:00
Матраскин Дата: Четверг, 16.01.2014, 12:05 | Сообщение № 2
Группа: Друзья
Ранг: Обитатель
Сообщений: 375
Репутация: 81 ±
Замечаний: 0% ±

20xx
Shadow-xxx, 2 варианта вычислений. 1ый брать по 1 столбцу, второй сразу все
[vba]
Код
Sub m()
'//--------------------------------------------------------------------------------------------------------------------
Dim lastUsedRow As Integer, i As Integer
Dim str As String
Dim Array_1() As Single
lastUsedRow = Worksheets("Лист1").Cells(Worksheets("Лист1").Rows.Count, 1).End(xlUp).Row ' нахожу посл. строку в столбце 1 листа Лист1
ReDim Array_1(lastUsedRow) ' задаю размер массива

For i = 1 To lastUsedRow
       Array_1(i) = Worksheets("Лист1").Cells(i, 1) ' заполняю массив данными из 1 столбца
Next

'если надо глянуть что получилось
For i = 1 To lastUsedRow
       str = str & Array_1(i) & Chr(13)
Next
MsgBox "Данные из 1ого столбца:" & Chr(13) & str
'//--------------------------------------------------------------------------------------------------------------------
' вариант с двумерным массивом
Dim max As Integer ', i As Integer, j As Integer
Dim Array_123() As Single ' будущий двумерный массив для 3ёх столбцов
Dim Array_lengthArray(1 To 3) As Integer ' массив длин столбцов
Dim str123 As String 'строка для вывода результатов на экран

'можно заполнять в цикле, усли столбцов будет больше 3ёх
Array_lengthArray(1) = Worksheets("Лист1").Cells(Worksheets("Лист1").Rows.Count, 1).End(xlUp).Row
Array_lengthArray(2) = Worksheets("Лист1").Cells(Worksheets("Лист1").Rows.Count, 2).End(xlUp).Row
Array_lengthArray(3) = Worksheets("Лист1").Cells(Worksheets("Лист1").Rows.Count, 3).End(xlUp).Row
'поиск макс эл-та
max = Array_lengthArray(1)
For i = 1 To 3
       If Array_lengthArray(i) > max Then
           max = Array_lengthArray(i)
       End If
Next
'заполняем наш массив
ReDim Array_123(1 To max, 1 To max)
For i = 1 To max
       For j = 1 To 3
           Array_123(i, j) = Worksheets("Лист1").Cells(i, j)
       Next
Next

'если надо глянуть что получилось   
For i = 1 To max
       For j = 1 To 3
           str123 = str123 & Array_123(i, j) & ","
       Next
       str123 = str123 & Chr(13)
Next
MsgBox "Данные из 3ёх столбцов:" & Chr(13) & str123
'//--------------------------------------------------------------------------------------------------------------------
End Sub
[/vba]
К сообщению приложен файл: _Microsoft_Exce.xls (40.5 Kb)


в интернете опять кто-то не прав

Сообщение отредактировал Матраскин - Четверг, 16.01.2014, 12:33
 
Ответить
СообщениеShadow-xxx, 2 варианта вычислений. 1ый брать по 1 столбцу, второй сразу все
[vba]
Код
Sub m()
'//--------------------------------------------------------------------------------------------------------------------
Dim lastUsedRow As Integer, i As Integer
Dim str As String
Dim Array_1() As Single
lastUsedRow = Worksheets("Лист1").Cells(Worksheets("Лист1").Rows.Count, 1).End(xlUp).Row ' нахожу посл. строку в столбце 1 листа Лист1
ReDim Array_1(lastUsedRow) ' задаю размер массива

For i = 1 To lastUsedRow
       Array_1(i) = Worksheets("Лист1").Cells(i, 1) ' заполняю массив данными из 1 столбца
Next

'если надо глянуть что получилось
For i = 1 To lastUsedRow
       str = str & Array_1(i) & Chr(13)
Next
MsgBox "Данные из 1ого столбца:" & Chr(13) & str
'//--------------------------------------------------------------------------------------------------------------------
' вариант с двумерным массивом
Dim max As Integer ', i As Integer, j As Integer
Dim Array_123() As Single ' будущий двумерный массив для 3ёх столбцов
Dim Array_lengthArray(1 To 3) As Integer ' массив длин столбцов
Dim str123 As String 'строка для вывода результатов на экран

'можно заполнять в цикле, усли столбцов будет больше 3ёх
Array_lengthArray(1) = Worksheets("Лист1").Cells(Worksheets("Лист1").Rows.Count, 1).End(xlUp).Row
Array_lengthArray(2) = Worksheets("Лист1").Cells(Worksheets("Лист1").Rows.Count, 2).End(xlUp).Row
Array_lengthArray(3) = Worksheets("Лист1").Cells(Worksheets("Лист1").Rows.Count, 3).End(xlUp).Row
'поиск макс эл-та
max = Array_lengthArray(1)
For i = 1 To 3
       If Array_lengthArray(i) > max Then
           max = Array_lengthArray(i)
       End If
Next
'заполняем наш массив
ReDim Array_123(1 To max, 1 To max)
For i = 1 To max
       For j = 1 To 3
           Array_123(i, j) = Worksheets("Лист1").Cells(i, j)
       Next
Next

'если надо глянуть что получилось   
For i = 1 To max
       For j = 1 To 3
           str123 = str123 & Array_123(i, j) & ","
       Next
       str123 = str123 & Chr(13)
Next
MsgBox "Данные из 3ёх столбцов:" & Chr(13) & str123
'//--------------------------------------------------------------------------------------------------------------------
End Sub
[/vba]

Автор - Матраскин
Дата добавления - 16.01.2014 в 12:05
Wasilich Дата: Четверг, 16.01.2014, 12:23 | Сообщение № 3
Группа: Друзья
Ранг: Старожил
Сообщений: 1232
Репутация: 326 ±
Замечаний: 0% ±

2003
Цитата Матраскин, 16.01.2014 в 12:05, в сообщении № 2
2 варианта вычислений.
А говорили, на форуме нет телепатов. :D
А, я вот так и не понял что хочет ТС. :(
хотелось бы видеть код попроще
Хотелось бы видеть пример, как есть и как надо.
 
Ответить
Сообщение
Цитата Матраскин, 16.01.2014 в 12:05, в сообщении № 2
2 варианта вычислений.
А говорили, на форуме нет телепатов. :D
А, я вот так и не понял что хочет ТС. :(
хотелось бы видеть код попроще
Хотелось бы видеть пример, как есть и как надо.

Автор - Wasilich
Дата добавления - 16.01.2014 в 12:23
Матраскин Дата: Четверг, 16.01.2014, 12:35 | Сообщение № 4
Группа: Друзья
Ранг: Обитатель
Сообщений: 375
Репутация: 81 ±
Замечаний: 0% ±

20xx
Wasilic,
[offtop]котоинтуиция[/offtop]


в интернете опять кто-то не прав
 
Ответить
СообщениеWasilic,
[offtop]котоинтуиция[/offtop]

Автор - Матраскин
Дата добавления - 16.01.2014 в 12:35
Shadow-xxx Дата: Четверг, 16.01.2014, 12:43 | Сообщение № 5
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Круто. Спасибо за описание. То что надо! Телепаты есть, однозначно=)
 
Ответить
СообщениеКруто. Спасибо за описание. То что надо! Телепаты есть, однозначно=)

Автор - Shadow-xxx
Дата добавления - 16.01.2014 в 12:43
Hugo Дата: Четверг, 16.01.2014, 13:42 | Сообщение № 6
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3255
Репутация: 707 ±
Замечаний: 0% ±

2019
Зачем циклы? Причём тут трёхмерный массив?
[vba]
Код
Sub попроще()
     Dim a(), b()
      
     a = Sheets(1).[a1].CurrentRegion.Value
     b = Sheets(2).[a1].CurrentRegion.Value

     MsgBox a(2, 3)
     MsgBox b(3, 2)
      
End Sub
[/vba]


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
СообщениеЗачем циклы? Причём тут трёхмерный массив?
[vba]
Код
Sub попроще()
     Dim a(), b()
      
     a = Sheets(1).[a1].CurrentRegion.Value
     b = Sheets(2).[a1].CurrentRegion.Value

     MsgBox a(2, 3)
     MsgBox b(3, 2)
      
End Sub
[/vba]

Автор - Hugo
Дата добавления - 16.01.2014 в 13:42
Матраскин Дата: Четверг, 16.01.2014, 14:05 | Сообщение № 7
Группа: Друзья
Ранг: Обитатель
Сообщений: 375
Репутация: 81 ±
Замечаний: 0% ±

20xx
Hugo,
Причём тут трёхмерный массив?

ввожу в заблуждение, там двумерный массив на самом деле. в файле не испраивил камент наверно


в интернете опять кто-то не прав
 
Ответить
СообщениеHugo,
Причём тут трёхмерный массив?

ввожу в заблуждение, там двумерный массив на самом деле. в файле не испраивил камент наверно

Автор - Матраскин
Дата добавления - 16.01.2014 в 14:05
Hugo Дата: Четверг, 16.01.2014, 14:07 | Сообщение № 8
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3255
Репутация: 707 ±
Замечаний: 0% ±

2019
Не, трёхмерный хотел Shadow-xxx


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
СообщениеНе, трёхмерный хотел Shadow-xxx

Автор - Hugo
Дата добавления - 16.01.2014 в 14:07
Матраскин Дата: Четверг, 16.01.2014, 14:11 | Сообщение № 9
Группа: Друзья
Ранг: Обитатель
Сообщений: 375
Репутация: 81 ±
Замечаний: 0% ±

20xx
Hugo, он попался в такое заблуждение как и я поначалу. 3 столбца не значат, что массив 3-х
кототелепатия-2


в интернете опять кто-то не прав

Сообщение отредактировал Матраскин - Четверг, 16.01.2014, 14:14
 
Ответить
СообщениеHugo, он попался в такое заблуждение как и я поначалу. 3 столбца не значат, что массив 3-х
кототелепатия-2

Автор - Матраскин
Дата добавления - 16.01.2014 в 14:11
Hugo Дата: Четверг, 16.01.2014, 14:15 | Сообщение № 10
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3255
Репутация: 707 ±
Замечаний: 0% ±

2019
Ну да, у листа два измерения - строка и столбец. И даже у одной ячейки их можно найти :)


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
СообщениеНу да, у листа два измерения - строка и столбец. И даже у одной ячейки их можно найти :)

Автор - Hugo
Дата добавления - 16.01.2014 в 14:15
Матраскин Дата: Четверг, 16.01.2014, 14:21 | Сообщение № 11
Группа: Друзья
Ранг: Обитатель
Сообщений: 375
Репутация: 81 ±
Замечаний: 0% ±

20xx
Hugo, Именно так. Размерность можно увеличить до трёх, если захотим отслеживать с какого листа данные. Или ещё чАво ;)
p.s. отслеживать прям в массиве


в интернете опять кто-то не прав
 
Ответить
СообщениеHugo, Именно так. Размерность можно увеличить до трёх, если захотим отслеживать с какого листа данные. Или ещё чАво ;)
p.s. отслеживать прям в массиве

Автор - Матраскин
Дата добавления - 16.01.2014 в 14:21
Shadow-xxx Дата: Четверг, 16.01.2014, 14:22 | Сообщение № 12
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Чем вариант Матраскина, может быть лучше Hugo.
Так-то у Hugo идеальный короткий код. Но нет ли где подводных камней?
Интересно на будущее.


Сообщение отредактировал Shadow-xxx - Четверг, 16.01.2014, 14:42
 
Ответить
СообщениеЧем вариант Матраскина, может быть лучше Hugo.
Так-то у Hugo идеальный короткий код. Но нет ли где подводных камней?
Интересно на будущее.

Автор - Shadow-xxx
Дата добавления - 16.01.2014 в 14:22
Shadow-xxx Дата: Четверг, 16.01.2014, 14:29 | Сообщение № 13
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Теперь мне необходимо сопоставить значения с Листа1 и Листа2. В результате True записать данные на Лист3. С вариантом Hugo я не знаю данных, необходимых для цикла проверки (то есть размер массива). С вариантам Матраскина я не понимаю как обратиться к Лист2 (чтобы сохранить и его данные в массив)


Сообщение отредактировал Shadow-xxx - Четверг, 16.01.2014, 14:53
 
Ответить
СообщениеТеперь мне необходимо сопоставить значения с Листа1 и Листа2. В результате True записать данные на Лист3. С вариантом Hugo я не знаю данных, необходимых для цикла проверки (то есть размер массива). С вариантам Матраскина я не понимаю как обратиться к Лист2 (чтобы сохранить и его данные в массив)

Автор - Shadow-xxx
Дата добавления - 16.01.2014 в 14:29
Матраскин Дата: Четверг, 16.01.2014, 16:40 | Сообщение № 14
Группа: Друзья
Ранг: Обитатель
Сообщений: 375
Репутация: 81 ±
Замечаний: 0% ±

20xx
Shadow-xxx, осталось сверить и записать на лист3.
К сообщению приложен файл: _Microsoft_Exce.xls (41.0 Kb)


в интернете опять кто-то не прав
 
Ответить
СообщениеShadow-xxx, осталось сверить и записать на лист3.

Автор - Матраскин
Дата добавления - 16.01.2014 в 16:40
Shadow-xxx Дата: Пятница, 17.01.2014, 07:10 | Сообщение № 15
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Спасибо hands
 
Ответить
СообщениеСпасибо hands

Автор - Shadow-xxx
Дата добавления - 17.01.2014 в 07:10
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Вывод в массив данных с двух листов книги (Макросы Sub)
  • Страница 1 из 1
  • 1
Поиск:

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