Страницы: 1
RSS
Транспонирование массива
 
Доброго времени суток!  
Есть массив из одной строки и N столбцов, например  
mas=Лист1.Range("A1:D1")  
нужно сделать так, чтоб к нему можно было обращаться так: mas(i), функция    
mas=Application.Transpose(Лист1.Range("A1:D1")) желаемого результата не дала (получилось mas(i,1))
 
просто повторите операцию.. только быстро :)
Живи и дай жить..
 
ладно, сам напишу :)  
 
mas = Application.Transpose(Application.Transpose(Лист1.Range("A1:D1")))  
 
 
так?
Живи и дай жить..
 
Помогло, спасибо!  
 
А еще вопрос можно?  
1. Можно без цикла уменьшить/увеличить все значения массива на число?  
2. Можно без цикла получить массив состоящий из поэлементной разницы/суммы двух других массивов (естественно равных размеров)?
 
что значит массив?  
 
что значит без цикла?  
 
 
строго говоря нет, если только у вас нет количества процессоров равного размерности массива..  
 
да и то.. будет цикл раздачи заданий  :)
Живи и дай жить..
 
{quote}{login=слэн}{date=26.10.2010 03:49}{thema=}{post}что значит массив?  
что значит без цикла?  
:){/post}{/quote}  
 
без for  
a()= b()+ c()
 
Почему без цикла, а не вообще без VBA? :)  
Циклы - это страшно... полезно  
 
Sub AddOne()  
 Dim arr, a, i  
 
 ' Добавить единичку к A1:D1 и в одномерный массив  
 With WorksheetFunction  
   arr = .Transpose(.Transpose([Лист1!A1:D1+1]))
 End With  
 
 ' Проверка  
 For i = 1 To UBound(arr)  
   Debug.Print i, arr(i)  
 Next  
 
End Sub
 
transpose это тоже цикл  :)
 
не совсем понял эту запись, а точнее не понял совсем :))  
arr = .Transpose(.Transpose([Лист1!A1:D1+1]))
 
у меня    
mas_T = Application.Transpose(Application.Transpose(Лист1.Range("B8:D8")))  
и из каждого элемента нужно сначала вычесть, ну скажем, 5, и к результату прибавить 15  
А сама функция вызывается с Лист3 в него же записываются результаты вычислений  
 
"Без цикла" я имел ввиду без последовательного перебора через for ... next ...
 
{quote}{login=Федор}{date=26.10.2010 04:37}{thema=}{post}не совсем понял эту запись, а точнее не понял совсем :))  
arr = .Transpose(.Transpose([Лист1!A1:D1+1]))
 
у меня    
mas_T = Application.Transpose(Application.Transpose(Лист1.Range("B8:D8")))  
и из каждого элемента нужно сначала вычесть, ну скажем, 5, и к результату прибавить 15  
А сама функция вызывается с Лист3 в него же записываются результаты вычислений  
 
"Без цикла" я имел ввиду без последовательного перебора через for ... next ...{/post}{/quote}  
 
Sub test()  
      Dim strFormula As String  
      strFormula = Лист1.Range("B8:D8").Address(, , , -1) & "-5" & "+15"  
      Лист3.Range("B8:D8") = Evaluate(strFormula)  
End Sub
KL
 
[Формула] - это краткая запись Evaluate("Формула")
А Evaluate("Формула") по действию аналогична формуле массива.  
Поэтому в качестве "Формула" можно использовать привычные для формулистов формулы ячеек (вклячая формулы массивов), но без начального знака равенства.  
 
Пример считывания массива Лист1!B8:D8 с вычетом пяти, записи результата в массив arr, а затем - на Лист3!A1:A3  
 
Sub МинусПять()  
 With WorksheetFunction  
   'arr = .Transpose(.Transpose([Лист1!B8:D8-5]))
   arr = .Transpose(.Transpose(Evaluate("Лист1!B8:D8" & "-5")))  
 End With  
 Лист3.Range("A1").Resize(UBound(arr)).Value = arr  
End Sub
 
Спасибо большое!  
Попробую, поэксперементирую...
Страницы: 1
Читают тему
Наверх