Форум программистов, компьютерный форум, киберфорум
MS Office Excel
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 13.09.2019
Сообщений: 44
1

Как объявить многомерный массив из двух таблиц?

18.06.2020, 17:09. Просмотров 968. Ответов 10

есть две одинаковые таблицы на лите1 и листе2 диапазоном A1:C3
как сделать многомерный массив? (как его объявить и как сослаться на ячейку например A1 на листе1 и листе2)?
так я себе представляю его

---------лист1---------------------лист2-----------
(0,0,0) (0,0,1) (0,0,2) ¦ (1,0,0) (1,0,1) (1,0,2) ¦
(0,1,0) (0,1,1) (0,1,2) ¦ (1,1,0) (1,1,1) (1,1,2) ¦
(0,2,0) (0,2,1) (0,2,2) ¦ (1,2,0) (1,2,1) (1,2,2) ¦
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.06.2020, 17:09
Ответы с готовыми решениями:

Как объявить многомерный массив?
Как объявить многомерный массив так чтоб к нему можно было обратиться из других форм? Например...

Как объявить многомерный массив и сразу инициализировать его?
Методом проб выяснил, что объявить и сразу проинициализировать многомерный массив можно так (пример...

Как объявить внутри своего класса многомерный массив?
И вообще, возможно ли это? Задачи по порядку: Объявить внутри класса: 1) Одномерный массив...

Объявить многомерный массив из N*3 и ввести данные в него
Задача объявить многомерный массив из N*3 и ввести данные в него. Пишу на Си. Объявляю: ...

10
1147 / 811 / 401
Регистрация: 23.03.2015
Сообщений: 2,749
18.06.2020, 17:57 2
Лучший ответ Сообщение было отмечено GreenJoy как решение

Решение

GreenJoy,
Visual Basic
1
2
3
Arr1 = Sheets("A").Range("A1:C3").Value
Arr2 = Sheets("B").Range("A1:C3").Value
ARR = Array(Arr1, Arr2)
Ячейка А1 листа "А"будет
Visual Basic
1
ARR(0)(1, 1)
Ячейка А1 листа "В"будет
Visual Basic
1
ARR(1)(1, 1)
1
0 / 0 / 0
Регистрация: 13.09.2019
Сообщений: 44
19.06.2020, 10:07  [ТС] 3
Спасибо, а как в таком массиве сослаться на ячейку A1 "лист1"?
Кликните здесь для просмотра всего текста
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Sub dfhdh()
 
Arr1x = Sheets("Лист1").Range("A1:A3").Value
Arr2x = Sheets("Лист1").Range("C1:C3").Value
Arr3x = Sheets("Лист1").Range("E1:E3").Value
 
Arr1x = Sheets("Лист2").Range("A1:A3").Value
Arr2x = Sheets("Лист2").Range("C1:C3").Value
Arr3x = Sheets("Лист2").Range("E1:E3").Value
 
ARRx = Array(Arr1x, Arr2x, Arr3x)
ARRy = Array(Arr1y, Arr2y, Arr3y)
 
ARRxy = Array(ARRx, ARRy)
 
 
Sheets("Лист3").Range("A1").Value = ARRxy(0)(0)(1, 1)
End Sub

чего он выдаёт значение A1 "лист2"?
0
Вложения
Тип файла: zip Книга115.zip (12.8 Кб, 0 просмотров)
0 / 0 / 0
Регистрация: 13.09.2019
Сообщений: 44
19.06.2020, 10:21  [ТС] 4
ОЙ! я понял где ошибка
Кликните здесь для просмотра всего текста
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Sub dfhdh()
 
Arr1x = Sheets("Лист1").Range("A1:A3").Value
Arr2x = Sheets("Лист1").Range("C1:C3").Value
Arr3x = Sheets("Лист1").Range("E1:E3").Value
 
Arr1y = Sheets("Лист2").Range("A1:A3").Value
Arr2y = Sheets("Лист2").Range("C1:C3").Value
Arr3y = Sheets("Лист2").Range("E1:E3").Value
 
ARRx = Array(Arr1x, Arr2x, Arr3x)
ARRy = Array(Arr1y, Arr2y, Arr3y)
 
ARRxy = Array(ARRx, ARRy)
 
 
Sheets("Лист3").Range("A1").Value = ARRxy(0)(0)(1, 1)
End Sub

всё работает.
0
0 / 0 / 0
Регистрация: 13.09.2019
Сообщений: 44
22.06.2020, 09:10  [ТС] 5
Narimanych, появился ещё один вопрос.
А как массив Arr1 = Sheets("A").Range("A1:C3").Value объявить от первой ячейки до последней заполненной?
0
1147 / 811 / 401
Регистрация: 23.03.2015
Сообщений: 2,749
22.06.2020, 09:46 6
GreenJoy,
Если по всему листу , то можно и так
Visual Basic
1
Arr1=Sheets("A").Usedrange.value
0
0 / 0 / 0
Регистрация: 13.09.2019
Сообщений: 44
22.06.2020, 09:51  [ТС] 7
Извините, по столбцу.
мне уже написали что так можно сделать Arr1x = Range([A1], Range("A" & Rows.Count).End(xlUp)).Value
но макрос выдаёт ошибку
Кликните здесь для просмотра всего текста
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Sub dfhdh()
 
Arr1x = Sheets("Лист1").Range([A1], Range("A" & Rows.Count).End(xlUp)).Value
Arr2x = Sheets("Лист1").Range([C1], Range("C" & Rows.Count).End(xlUp)).Value
Arr3x = Sheets("Лист1").Range([E1], Range("E" & Rows.Count).End(xlUp)).Value
 
Arr1y = Sheets("Лист2").Range([A1], Range("A" & Rows.Count).End(xlUp)).Value
Arr2y = Sheets("Лист2").Range([C1], Range("C" & Rows.Count).End(xlUp)).Value
Arr3y = Sheets("Лист2").Range([E1], Range("E" & Rows.Count).End(xlUp)).Value
 
ARRx = Array(Arr1x, Arr2x, Arr3x)
ARRy = Array(Arr1y, Arr2y, Arr3y)
 
ARRxy = Array(ARRx, ARRy)
 
 
Sheets("Лист3").Range("A1").Value = ARRxy(0)(0)(1, 1)
End Sub


в чём ошибка?
0
Вложения
Тип файла: zip Книга115.zip (13.8 Кб, 2 просмотров)
1147 / 811 / 401
Регистрация: 23.03.2015
Сообщений: 2,749
22.06.2020, 10:12 8
GreenJoy,
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Sub dfhdh()
 
LR1 = Cells(Rows.Count, 1).End(xlUp).Row
With Sheets("Лист1")
Arr1x = Range(.Cells(1, 1), .Cells(Cells(.Rows.Count, 1).End(xlUp).Row, 1)).Value
Arr2x = Range(.Cells(1, 3), .Cells(Cells(.Rows.Count, 3).End(xlUp).Row, 1)).Value
Arr3x = Range(.Cells(1, 5), .Cells(Cells(.Rows.Count, 5).End(xlUp).Row, 1)).Value
End With
 
With Sheets("Лист2")
Arr1y = Range(.Cells(1, 1), .Cells(Cells(.Rows.Count, 1).End(xlUp).Row, 1)).Value
Arr2y = Range(.Cells(1, 3), .Cells(Cells(.Rows.Count, 3).End(xlUp).Row, 1)).Value
Arr3y = Range(.Cells(1, 5), .Cells(Cells(.Rows.Count, 5).End(xlUp).Row, 1)).Value
End With
 
 
 
ARRx = Array(Arr1x, Arr2x, Arr3x)
ARRy = Array(Arr1y, Arr2y, Arr3y)
 
ARRxy = Array(ARRx, ARRy)
 
 
Sheets("Лист3").Range("A1").Value = ARRxy(0)(0)(1, 1)
End Sub
0
0 / 0 / 0
Регистрация: 13.09.2019
Сообщений: 44
22.06.2020, 12:06  [ТС] 9
ошибка 13 в 24-й строке
0
1147 / 811 / 401
Регистрация: 23.03.2015
Сообщений: 2,749
22.06.2020, 12:37 10
GreenJoy,

код не копировать , а переписать руками

Добавлено через 2 минуты
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Sub dfhdh()
 
LR1 = Cells(Rows.Count, 1).End(xlUp).Row
With Sheets("Лист1")
Arr1x = Range(.Cells(1, 1), .Cells(Cells(.Rows.Count, 1).End(xlUp).Row, 1)).Value
Arr2x = Range(.Cells(1, 3), .Cells(Cells(.Rows.Count, 3).End(xlUp).Row, 3)).Value
Arr3x = Range(.Cells(1, 5), .Cells(Cells(.Rows.Count, 5).End(xlUp).Row, 5)).Value
End With
 
With Sheets("Лист2")
Arr1y = Range(.Cells(1, 1), .Cells(Cells(.Rows.Count, 1).End(xlUp).Row, 1)).Value
Arr2y = Range(.Cells(1, 3), .Cells(Cells(.Rows.Count, 3).End(xlUp).Row, 3)).Value
Arr3y = Range(.Cells(1, 5), .Cells(Cells(.Rows.Count, 5).End(xlUp).Row, 5)).Value
End With
 
 
 
ARRx = Array(Arr1x, Arr2x, Arr3x)
ARRy = Array(Arr1y, Arr2y, Arr3y)
 
ARRxy = Array(ARRx, ARRy)
 
 
Sheets("Лист3").Range("A1").Value = ARRxy(0)(0)(1, 1)
End Sub
1
4056 / 2178 / 922
Регистрация: 01.12.2010
Сообщений: 4,538
22.06.2020, 13:59 11
GreenJoy, Если количество строк(ячеек) во всех столбцах одинаково, но нет особого смысла высчитывать последние строки для каждого столбца.
А если разное, то финт с ARRxy не 'прокатит', точнее сказать, Вы получите ошибку, когда в процессе работы - укажите несуществующее кол-во строк в массиве.

В общем, для первого варианта можно так. Но можно и высчитывать кол-во строк(ячеек) в цикле (второй вариант, закоммент.)

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Private Sub Test()
    ARRxy = Array( _
    GetArr(Worksheets("Лист1"), 1, 1, 3, 5), _
    GetArr(Worksheets("Лист2"), 1, 1, 3, 5))
 
    Worksheets("Лист3").Range("A1") = ARRxy(0)(0)(1, 1)
End Sub
 
Private Function GetArr(ws As Worksheet, rwStart&, ParamArray Columns())
    Dim rw&, cl&, i&
    rw = ws.Cells(ws.Rows.Count, Columns(0)).End(xlUp).Row
    For i = 0 To UBound(Columns)
        cl = Columns(i)
        Columns(i) = ws.Range(ws.Cells(rwStart, cl), ws.Cells(rw, cl)).Value
    Next
    GetArr = Columns
End Function
 
'Private Function GetArr(ws As Worksheet, rwStart&, ParamArray Columns())
'    Dim cl, i&
'    For Each cl In Columns
'        Columns(i) = ws.Range(ws.Cells(rwStart, cl), _
'        ws.Cells(ws.Rows.Count, cl).End(xlUp)).Value: i = i + 1
'    Next
'    GetArr = Columns
'End Function
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.06.2020, 13:59

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Как создать многомерный массив из двух обычных?
есть два массива: $personal_number= array( "Вася" => "8864", "Петя" => "3455", "Саша"...

Объявить массив? Запросто! Объявить массив массивов? А как это?
Доброго времени суток! Конечно, все знают, как объявить массив! int main () { int array; }

Добавление массива в многомерный массив (не элемента в многомерный массив)
Доброго времени суток уважаемые форумчане! Столкнулся с такой проблемой: требуется в многомерный...

Как добавить строковый массив в многомерный массив типа дабл
Добрый день! Есть такая проблема, никак не получается добавить строковый массив в многомерный...

Как переписать многомерный массив(матрица) с изменениями в новый массив
Здравствуйте, есть у меня двумерный массив. Если быть точнее то это матрица $maitrix = ,...

Как создать многомерный массив?
Подскажите, пожалуйста, возможно ли задать многомерный массив в С, если заранее (на момент...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.