Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Как транспонировать диапазон? / 18 сообщений из 18, страница 1 из 1
20.11.2009, 22:25
    #36323444
Dan-K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как транспонировать диапазон?
Как транспонировать диапазон?
Такой вариант не работает -

Код: plaintext
ThisWorkbook.Sheets("Лист1").Range("A1:A3").Value = ThisWorkbook.Sheets("Лист1").Range("B2:D2").Value
...
Рейтинг: 0 / 0
21.11.2009, 08:57
    #36323619
Deggasad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как транспонировать диапазон?
Такое ощущение, что вы форум совсем не читаете, вы же тут постоянный участник
Код: plaintext
ThisWorkbook.Sheets("Лист1").Range("A1:A3").Value = Application.Transpose(ThisWorkbook.Sheets("Лист1").Range("B2:D2").Value)
...
Рейтинг: 0 / 0
21.11.2009, 17:35
    #36323898
Dan-K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как транспонировать диапазон?
Учебники давно не читал, Затупил, Исправлюсь...
А вообще непонятно. Читаю Уокенбабаха - профессиональное программирование на VBA в Excel 2003 стр. 772 "Вызов функций Excel с помощью операторов VBA" - нету в таблице функции "Transpose" хоть ты тресни...
И в "cписке операторов VBA" на 769 странице тоже не нашел...
...
Рейтинг: 0 / 0
21.11.2009, 17:51
    #36323907
Dan-K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как транспонировать диапазон?
А теперь более интересный вопрос:
А нет ли тайной функции позволяющей "зеркально отразить диапазон"... в смысле в обратном порядке? типа StrReverse...но для ячеек
...
Рейтинг: 0 / 0
21.11.2009, 18:13
    #36323918
f
f
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как транспонировать диапазон?
Dan-K, поищите в меню Экселя слово сортировка.
...
Рейтинг: 0 / 0
21.11.2009, 18:47
    #36323940
Dan-K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как транспонировать диапазон?
Ну и как зеркально отразить слкедующий список сортировкой?
1
3
45
2
kkk
...
Рейтинг: 0 / 0
21.11.2009, 18:53
    #36323947
f
f
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как транспонировать диапазон?
То есть ячейку нужно прочитать справа-налево?
msgBox StrReverse(ActiveCell.Value)
...
Рейтинг: 0 / 0
21.11.2009, 19:20
    #36323964
m
m
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как транспонировать диапазон?
Выделяете диапазон и запускаете макрос:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Sub MirrorRange()
Dim cell As Range
Dim bEdgeLine As Byte

bEdgeLine = CByte(Mid(Selection.Address(ReferenceStyle:=xlR1C1), _
InStrRev(Selection.Address(ReferenceStyle:=xlR1C1), "C") +  1 ))
For Each cell In Selection
    If cell.Column = bEdgeLine Then
    Cells(cell.Row, cell.Column +  1 ).Value = cell.Value
    Else
    Cells(cell.Row, cell.Column +  1  + (bEdgeLine - cell.Column) *  2 ).Value = cell.Value
    End If
Next

End Sub
...
Рейтинг: 0 / 0
21.11.2009, 19:27
    #36323969
mds_world
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как транспонировать диапазон?
Dan-KА теперь более интересный вопрос:
А нет ли тайной функции позволяющей "зеркально отразить диапазон"... в смысле в обратном порядке? типа StrReverse...но для ячеек
Как маленький пример
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Sub TransposeDescending()
    Dim c As Range, arr, i As Long
    ReDim arr(Application.CountIf(Sheets( 1 ).Range("A1:A3"), ">0") -  1 )
    
    For Each c In Sheets( 1 ).Range("A1:A3")
        If c >  0  Then
            arr( 2  - i) = c
            i = i +  1 
        End If
    Next c
    Sheets( 1 ).Range("B2").Resize(, UBound(arr) +  1 ) = arr
End Sub
...
Рейтинг: 0 / 0
21.11.2009, 19:51
    #36323983
m
m
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как транспонировать диапазон?
2 mds_world ,
Спасибо, очень интересно. Теперь узнал про существование типа переменной 8204,
vbArray+vbVariant... Она используется со свойством Resize? Интересно, что когда в массив значения заносятся так: arr = [a1:a5] тоже используется этот тип переменной. Интересно, где еще применяется это тип...И сколько он памяти кушает, тоже vbArray+vbVariant ?
...
Рейтинг: 0 / 0
21.11.2009, 20:22
    #36324003
m
m
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как транспонировать диапазон?
2 mds_world ,
Еще раз спасибо, какой показательный пример :)...
Получается что тип 8204 используется для ввода/ввывода информации без использования циклов:
Код: plaintext
1.
2.
3.
4.
5.
Option Base  1 
Sub InputAndOutput()
Dim arr
arr = [a1:b5]
Cells( 1 ,  3 ).Resize(UBound(arr,  1 ), UBound(arr,  2 )) = arr
End Sub

Почаще заходите к нам :)
...
Рейтинг: 0 / 0
22.11.2009, 00:28
    #36324154
Dan-K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как транспонировать диапазон?
Код: plaintext
1.
2.
3.
4.
5.
Option Base  1 
Sub InputAndOutput()
Dim arr
arr = [a1:b5]
Cells( 1 ,  3 ).Resize(UBound(arr,  1 ), UBound(arr,  2 )) = arr
End Sub


А как в этом случае вставить диапазон [a1:b5] в активную ячейку? Аналог Копи-пасте?
...
Рейтинг: 0 / 0
22.11.2009, 11:57
    #36324317
m
m
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как транспонировать диапазон?
Код: plaintext
ActiveCell.Resize(UBound(arr,  1 ), UBound(arr,  2 )) = arr
...
Рейтинг: 0 / 0
22.11.2009, 17:49
    #36324579
Dan-K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как транспонировать диапазон?
Странно, внутри книги работает
Код: plaintext
ThisWorkbook.Sheets("Лист3").Range("A1:A3").Value = Application.Transpose(ThisWorkbook.Sheets("Лист3").Range("B2:D2").Value)

А между двумя книгами - не заботает...
Код: plaintext
Workbooks("ТЕСТ2.xlsm").Sheets("Лист3").Range("A1:A3").Value = Application.Transpose(Workbooks("SK.xlsb").Sheets("Лист3").Range("B2:D2").Value)
...
Рейтинг: 0 / 0
22.11.2009, 23:55
    #36324898
Deggasad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как транспонировать диапазон?
Dan-K,

Если книги сохранены на диске, то все работает, если не сохранена ТЕСТ2, то понятно что не работает :)
...
Рейтинг: 0 / 0
23.11.2009, 00:58
    #36324928
Deggasad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как транспонировать диапазон?
Dan-KА теперь более интересный вопрос:
А нет ли тайной функции позволяющей "зеркально отразить диапазон"... в смысле в обратном порядке? типа StrReverse...но для ячеек
На листе это очень просто - см. пример (обычные формулы)
Вот в макросе получить массив - формулы посложнее, но все же можно обойтись стандартными формулами Эксель, вот мозги поразмять:) :
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
' первая ячейка не должна быть пустой
' для вертикального диапазона, первая ячейка число
arr = Evaluate("transpose(HLOOKUP(9E+307," & [testRNG].Address(, , ,  1 ) & "," & [testRNG].Count & "-(ROW(" & Range("a1:a" & [testRNG].Count).Address & ")-1),1))")
' для вертикального диапазона, первая ячейка текст
arr = Evaluate("transpose(HLOOKUP(""яяяяя""," & [testRNG].Address(, , ,  1 ) & "," & [testRNG].Count & "-(ROW(" & Range("a1:a" & [testRNG].Count).Address & ")-1),1))")
' для горизонтального диапазона, первая ячейка число
arr = Evaluate("transpose(VLOOKUP(9E+307," & [testRNG].Address(, , ,  1 ) & "," & [testRNG].Count & "-(ROW(" & Range("a1:a" & [testRNG].Count).Address & ")-1),1))")
' для горизонтального диапазона, первая ячейка текст
arr = Evaluate("transpose(VLOOKUP(""яяяяя""," & [testRNG].Address(, , ,  1 ) & "," & [testRNG].Count & "-(ROW(" & Range("a1:a" & [testRNG].Count).Address & ")-1),1))")
Можно проверки на горизонтальный/вертикальный и на текст/число в самой процедуре задать и заложить вариативность в формулу просто не стал перегружать информацией
...
Рейтинг: 0 / 0
23.11.2009, 20:55
    #36327006
Dan-K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как транспонировать диапазон?
DeggasadDan-K,

Если книги сохранены на диске, то все работает, если не сохранена ТЕСТ2, то понятно что не работает :)

Все оказалось сложнее. При открытой форме UserForm2 У меня эта операция срабатывает один раз, после чего программно файл SK.xlsb закрывается без сохранения, а когда приходит время опять его открыть для того чтобы опять тот же макрос выполнить - он сволотчь не открывается - пока форму не перезагрузишь и соответственно ничего не срабатывает... Глюк какой-то
...
Рейтинг: 0 / 0
23.11.2009, 22:59
    #36327127
Deggasad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как транспонировать диапазон?
Не знаю что там у вас выполняет макрос, но чтобы транспонированный диапазон из закрытой книги получить ее не нужно открывать.
Код: plaintext
1.
2.
3.
4.
имяКниги = "Книга2.xls"
With [C4:O4]
.FormulaArray = "=TRANSPOSE('" & ThisWorkbook.Path & "\[" & имяКниги & "]Лист1'!A2:A14)"
.Value = .Value
End With
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Как транспонировать диапазон? / 18 сообщений из 18, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]