Здравствуйте. Есть книга 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
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]
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
Hugo, Именно так. Размерность можно увеличить до трёх, если захотим отслеживать с какого листа данные. Или ещё чАво p.s. отслеживать прям в массиве
Hugo, Именно так. Размерность можно увеличить до трёх, если захотим отслеживать с какого листа данные. Или ещё чАво p.s. отслеживать прям в массивеМатраскин
Теперь мне необходимо сопоставить значения с Листа1 и Листа2. В результате True записать данные на Лист3. С вариантом Hugo я не знаю данных, необходимых для цикла проверки (то есть размер массива). С вариантам Матраскина я не понимаю как обратиться к Лист2 (чтобы сохранить и его данные в массив)
Теперь мне необходимо сопоставить значения с Листа1 и Листа2. В результате True записать данные на Лист3. С вариантом Hugo я не знаю данных, необходимых для цикла проверки (то есть размер массива). С вариантам Матраскина я не понимаю как обратиться к Лист2 (чтобы сохранить и его данные в массив)Shadow-xxx
Сообщение отредактировал Shadow-xxx - Четверг, 16.01.2014, 14:53