|
|
|
Неполное транспонирование ...?
|
|||
|---|---|---|---|
|
#18+
Господа, а каким образом посредством VBA выбрать ненулевые значения из одномерного диапазона (горизонтально лежащего) с одного листа и вставить в вертикально стоящий диапазон на другом листе? Например: на Лист1 в диапазоне А1:А5 числа: 3, 2, 0, 1, 0. на Лист2 вставить, например в диапазон C3:С5, значения 3, 2, 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2007, 15:19:33 |
|
||
|
Неполное транспонирование ...?
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. KL [MVP - Microsoft Excel] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2007, 16:32:58 |
|
||
|
Неполное транспонирование ...?
|
|||
|---|---|---|---|
|
#18+
Работает великолепно! А при переносе из горизонтально лежащего в вертикально стоящий диапазон отображаются почему-то только значения первого ненулевого элемента... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2007, 17:59:57 |
|
||
|
Неполное транспонирование ...?
|
|||
|---|---|---|---|
|
#18+
Maksim1976А при переносе из горизонтально лежащего в вертикально стоящий диапазон отображаются почему-то только значения первого ненулевого элемента... Это потому что векторы исходного массива и ранга назначения не совпадают . Массив arr - одномерный, а одномерные массивы в VBA всегда (!) горизонтальны . Выхода два: - либо транспонируем исходный массив (arr) перед копированием - либо изначально создаем исходный массив (arr) как двухмерный Я предпочитаю первое: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. KL [MVP - Microsoft Excel] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2007, 00:18:55 |
|
||
|
Неполное транспонирование ...?
|
|||
|---|---|---|---|
|
#18+
Слов нет! It's working!!! А если в качестве исходного задан двухмерный массив, то его строки, насколько я понимаю, можно обрабатывать таким же образом? Только непонятно как к ним обращаться - посредством цикла ? В Range("A1:D3") указывать ((Cells(1,1),Cells(3,3))? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2007, 01:25:39 |
|
||
|
Неполное транспонирование ...?
|
|||
|---|---|---|---|
|
#18+
Maksim1976А если в качестве исходного задан двухмерный массив, то его строки, насколько я понимаю, можно обрабатывать таким же образом? Только непонятно как к ним обращаться - посредством цикла ? В Range("A1:D3") указывать ((Cells(1,1),Cells(3,3))? Необязательно. Вот пример с двухмерным массивом: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. KL [MVP - Microsoft Excel] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2007, 01:35:40 |
|
||
|
Неполное транспонирование ...?
|
|||
|---|---|---|---|
|
#18+
Естественно, есть еще более короткий, но, при большом кол-ве данных, более медленный вариант: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. KL [MVP - Microsoft Excel] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2007, 01:54:27 |
|
||
|
Неполное транспонирование ...?
|
|||
|---|---|---|---|
|
#18+
Уважаемый KL (XL), с Вашей помощью накорябал приатаченный макрос. Вроде работает. Прошу высказать критические замечания. Вообще то, по настоящему, на один лист нужно собирать данные с 4 или 5 листов. Хорошо, хоть на всех этх листах диапазоны имеют одинаковое расположение и размер, отличаются только типы данных. Нужно просто вставить цикл по листам? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2007, 22:43:24 |
|
||
|
|

start [/forum/topic.php?fid=61&msg=34414325&tid=2183245]: |
0ms |
get settings: |
9ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
54ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
46ms |
get tp. blocked users: |
2ms |
| others: | 204ms |
| total: | 351ms |

| 0 / 0 |
