Страницы: 1 2 След.
RSS
Как вывести данные из Массива
 
Здравствуйте,

Файл с примером не могу на данный момент вложить, но возможно можно подсказать и без него ?
Есть просто один столбец со значенимями с ячейки A1 по A8:
1
2
3
4
5
6
7
8
Если я приавильно все понимаю, то я по элементно следующим кодом заношу вышеприведенные значения в массив:
Код
For i = 1 To 8
       Var_Array(i) = ActiveCell.Value
       ActiveCell.Offset(1, 0).Select
Next

После того, как все данные занесены в Var_Array, их надо как бы свести в одну "штуку", вот этим простоым кодом сводятся данные в одну ячейку:
Код
For i = 1 To 8
Massiv = Massiv & Var_Array(i) & Chr(13)
Next

Но проблема в том, что мне нужно вывести это не в ячейку, а так же, каждое значение в каждую ячейку. А как это сделать не могуууу сообразить.
Может быть кто нибудь сможет подсказать.
 
Android1, Здравствуйте, пара примеров.
Код
Range("A1").Resize(UBound(Var_Array)) = Var_Array

Код
For i = 1 To 8
  Cells(i,1) = Var_Array(i)
Next i
Изменено: Александр П. - 12.01.2018 08:04:26
 
В добавок. Вовсе не обязательно вносить данные в массив, перебирая ячейки
Код
Var_Array = ActiveCell.Resize(8, 1)
Согласие есть продукт при полном непротивлении сторон
 
Цитата
Range("A1").Resize(UBound(Var_Array)) = Var_Array
К сожалению выводит просто нулевые значения.

Код
For i = 1 To 8
  Cells(i,1) = Var_Array(i)
Next i


Да, это работает, Спасибо, но проблема в том, что работает с построчным выводом, то есть если таких диапазонов много, и диапазоны большие, то по времени будет уже сущесвенно долго выполнятся, то есть классно бы было, если бы этот диапазон, как то софрмировался именно в массиве.
 
Код
For i = 1 To 8
  Cells(i,1) = Var_Array(i)
Next i

Хотя нет, быстро.
 
Цитата
Android1 написал:
К сожалению выводит просто нулевые значения.
Странно. См. файл. Желтая ячейка должна быть выбрана
Код
Sub wwww()
    Var_Array = ActiveCell.Resize(9, 1)
    Range("D4").Resize(UBound(Var_Array)) = Var_Array
End Sub
Согласие есть продукт при полном непротивлении сторон
 
Цитата
Android1 написал: Хотя нет, быстро
Попробуйте на массиве не из 8-ми ячеек, а из 80 000
Согласие есть продукт при полном непротивлении сторон
 
Цитата
Sanja написал:
Попробуйте на массиве не из 8-ми ячеек, а из 80 000
Более мнее быстро, по крайней мере по сравнению с первоначальным побеганием по 80 тыщ. ячейкам.
 
Вы про что? Про поячеечную выгрузку? Конечно, все относительно.
А чем мой и первый вариант от Александр П., не устроил? Я даже файл вместо Вас соорудил
Согласие есть продукт при полном непротивлении сторон
 
Устраивает конечно, почему не устраивает, я просто не могу понять, как это работает.
То есть, если просто вставить строку:

Range("D4").Resize(UBound(Var_Array)) = Var_Array

То не работает, если вставить в мой простенкий код:
Код
Var_Array = ActiveCell.Resize(9, 1)    
Range("D4").Resize(UBound(Var_Array)) = Var_Array

То тоже не работает. Я просто не совсем понимаю принцип работы этих строк, и видмо, надо что то еще добавить, чтобы эти строки заработали именно в том коде, который я указывал в самом начале.
Изменено: Android1 - 12.01.2018 09:09:55
 
Так надо сначала чем-то наполнить Ваш массив Var_Array. Что бы что-то из него выгружать на лист
Согласие есть продукт при полном непротивлении сторон
 
Так разве эти строки не наполняют массив?
Код
For i = 1 To 8
 Var_Array(i) = ActiveCell.Value
 ActiveCell.Offset(1, 0).Select
 Next

Или в данном случае Var_Array(i) - еще не массив ?
Изменено: Android1 - 12.01.2018 09:13:43
 
При таком наполнении массива он получается ОДНОМЕРНЫМ и при выгрузке в СТОЛБЕЦ его нужно транспонировать. Только зачем такие заморочки? При большом кол-ве данных транспонирование не корректно может работать
Код
Dim Var_Array(1 To 9)
For i = 1 To 9
    Var_Array(i) = ActiveCell.Value
    ActiveCell.Offset(1, 0).Select
Next
Range("D4").Resize(UBound(Var_Array)) = Application.Transpose(Var_Array)
Согласие есть продукт при полном непротивлении сторон
 
Заработало. Спасибо!
Я просто не разу с массивами не работал, пытаюсь понять, как ими вообще пользоваться.
 
надо
Код
Var_Array = ActiveCell.Resize(9, 1).Value
либо
Код
Set Range("D4").Resize(UBound(Var_Array)) = Var_Array
Изменено: Михаил С. - 12.01.2018 09:25:45
 
Подождите, а вот если я построчно внес в массив Var_array значения из ячеек, а если это будут не значения из ячееек, а какой то расчет, ну то есть это будет значение ячейки * 10, то ведь такие данные нельзя занести в массив вот этими двумя способами:
Код
Var_Array = ActiveCell.Resize(9, 1).Value

или
Код
Set Range("D4").Resize(UBound(Var_Array)) = Var_Array
 
Заносить в массив значения ячеек, производить расчеты с элементами массива, выгружать массив на лист.
Код
Var_Array = ActiveCell.Resize(9, 1)
For I = 1 To UBound(Var_Array)
    Var_Array(I, 1) = Var_Array(I, 1) * 10
Next
Range("D4").Resize(UBound(Var_Array)) = Var_Array
Вы бы все таки свой файл-пример приложили. Как есть - Как надо
Изменено: Sanja - 12.01.2018 10:29:51
Согласие есть продукт при полном непротивлении сторон
 
Android1,
Цитата
Sanja написал:
Var_Array = ActiveCell.Resize(8, 1)
ещё как вариант классического наполнения массива: Var_Array=Range("A1:A8").Value
Изменено: Jack Famous - 12.01.2018 10:51:59
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
К сожалению массив приходится обьявлять не только фиксирвоано, а еще и вот так:
Код
Dim Other_Array() As Variant
j = 1
ReDim Other_Array(j)

Var_Array = Range("A1:A11").Value
For i = 1 To UBound(Var_Array)
Var_Array(i, 1) = Var_Array(i, 1)
If Var_Array(i, 1) > 5 Then 
Other_Array(j) = Var_Array(i, 1) 
j = j + 1
End If
Next
ReDim Other_Array(j)

И опять встает вопрос, как вывести данные из массива Other_Array.
Изменено: Android1 - 13.01.2018 21:37:40
 
Что-то Вы батенька совсем какую-то ерунду пишите. Изучите мат.часть
Изменено: Sanja - 12.01.2018 14:12:58
Согласие есть продукт при полном непротивлении сторон
 
Это я читал, а в чем конкретно ерунда сможете подсказать ?
В любом случсае макрос запускается, значения в Other_array заносятся, хотелось бы просто хотя бы намек услышать, где ерунда.
Изменено: Android1 - 12.01.2018 14:24:06
 
Дак Вы напишите, ЧТО Вы хотите?
Например, вот эта строка
Код
ReDim Other_Array(j)
после цикла, переопределит массив Other_Array, одновременно очистив его от того, чем Вы раньше его наполнили, и, конечно, не будет смысла выгружать ПУСТОЙ массив.
Или здесь
Код
Var_Array(i, 1) = Var_Array(i, 1)
Значение массива и так равно самому себе. В чем смысл этой строки?
Согласие есть продукт при полном непротивлении сторон
 
1)Хочу собрать в массив Other_Array данные из массива, по условию, к примеру все значения в массиве Var_Array больше 5.
2)Var_Array(i, 1) = Var_Array(i, 1), это глупость согласен, но на результата не влияет
3)ReDim Other_Array(j), не могу понять где его переопределять, поставил фиксированный размер массива
 
Android1, изучайте
Код
Option Explicit 'включите Tools - Options - Require Variable Declaration!
                'это избавит от многих проблем

Sub An()
Dim Var_Array(), Other_Array(), i As Long, j As Long
  Var_Array = Range("A1:A11").Value
  ReDim Other_Array(1 To UBound(Var_Array))
  For i = 1 To UBound(Var_Array)
    If Var_Array(i, 1) > 5 Then
      j = j + 1
      Other_Array(j) = Var_Array(i, 1)
    End If
  Next
  If j > 0 Then Range("C1").Resize(, j).Value = Other_Array
End Sub
Изменено: Казанский - 12.01.2018 14:37:17
 
Код
For I = 1 To UBound(Var_Array)
    If Var_Array(I, 1) > 5 Then
        ReDim Preserve Other_Array(J)
        Other_Array(J) = Var_Array(I, 1)
        J = J + 1
    End If
Next
Range("B1").Resize(, UBound(Other_Array) + 1) = Other_Array  'выгрузка в СТРОКУ
Range("B2").Resize(UBound(Other_Array) + 1) = Application.Transpose(Other_Array)  'выгрузка в СТОЛБЕЦ
Согласие есть продукт при полном непротивлении сторон
 
Код
Other_Array(j) = Var_Array(i, 1)
Код
Subscript out of Range
 
См. сообщение #20 (про мат.часть). Прежде чем массив Redim Preserve, его нужно сначала Dim
Код
Sub Android1()
Dim Var_Array(), Other_Array()
Dim I&, J&
Var_Array() = Range("A1:A20").Value
For I = 1 To UBound(Var_Array)
    If Var_Array(I, 1) > 5 Then
        ReDim Preserve Other_Array(J)
        Other_Array(J) = Var_Array(I, 1)
        J = J + 1
    End If
Next
Range("B1").Resize(, UBound(Other_Array) + 1) = Other_Array  'выгрузка в СТРОКУ
Range("C2").Resize(UBound(Other_Array) + 1) = Application.Transpose(Other_Array)  'выгрузка в СТОЛБЕЦ
End Sub


Согласие есть продукт при полном непротивлении сторон
 
Вот уж спасибо, так Спасибо!
 
:) . Да не за что! 'Орешек знаний тверд, но все же, мы не привыкли отступать...'
Согласие есть продукт при полном непротивлении сторон
 
Если не сложно Вы бы не могли пояснить, как все таки этот Resize действует ?
Resize(1, UBound(Other_Array)+1)

Если к примеру "+1" убрать, то он на одно значение обрезавет массив. Но почему? UBound(Other_Array) - это же размер получившегося массива Other_Array по вертикали, почему к примеру надо еще +1 добавлять ?
Страницы: 1 2 След.
Наверх