Страницы: 1
RSS
Как задать массив значений в макросе?
 
Здравствуйте уважаемые форумчане!  
Мне периодически приходится обрабатывать некоторые диапазоны данных и по некоторым причинам это удобно делать с помощью макроса, который содержится в модуле прикрепленного файла. Проблемма в том, что если этот диапазон вырастает до нескольких тысяч ечеек, то макрос правращается в огромный набор значений. Вобщем проще будет объяснить задаваемый вопрос с помощью прикрепленного файла. Подскажите, как подредактировать мой макрос?  
Благодарю.
Я соображаю, но не всегда. :-)
 
Ой! Простите вот сам файл.
Я соображаю, но не всегда. :-)
 
Sub Нажми_и_найдешь()  
Dim i&, Lr&  
Lr = [a65536].End(xlUp).row
For i = 1 To Lr  
   If Cells(i, 1).Value = Cells(1, 5).Value Then _  
   Cells(i, 2) = "Вот оно!" Else Cells(i, 2) = ""  
Next  
End Sub
Я сам - дурнее всякого примера! ...
 
{quote}{login=KukLP}{date=02.06.2011 08:07}{thema=}{post}Sub Нажми_и_найдешь()  
Dim i&, Lr&  
Lr = [a65536].End(xlUp).row
For i = 1 To Lr  
   If Cells(i, 1).Value = Cells(1, 5).Value Then _  
   Cells(i, 2) = "Вот оно!" Else Cells(i, 2) = ""  
Next  
End Sub{/post}{/quote}  
Огромное спасибо! А подскажите пожалуйста, что означает End(xlUp).
Я соображаю, но не всегда. :-)
 
с Find будет значительно быстрее.
 
С фильтром будет еще быстрей:-) и с columndifferences быстрей.  
[a65536].End(xlUp).row - последняя заполненная ячейка в А.
Я сам - дурнее всякого примера! ...
 
При очень большом количестве значений будет побыстрее  
Sub press_the_button()  
Dim A()  
lastRow = Cells(1, 1).End(xlDown).row  
myValue = Cells(1, "E").Value  
A = Range(Cells(1, 1).Address, Cells(lastRow, 1).Address)  
For i = 1 To UBound(A)  
   If A(i, 1) = myValue Then Cells(i, "B").Value = "Вот оно"  
Next  
End Sub
 
{quote}{login=KukLP}{date=02.06.2011 08:28}{thema=}{post}С фильтром будет еще быстрей:-) и с columndifferences быстрей.  
[a65536].End(xlUp).row - последняя заполненная ячейка в А.{/post}{/quote}
Еще раз огромное спасибо! А если это будут столбцы тогда [z1].End(xlUp).column правильно я понимаю?
Я соображаю, но не всегда. :-)
 
[z1].End(xlUp).column вернёт 26 (он же столб Z)
 
Еще раз всем огромное спасибо! Узнал много нового. :-)
Я соображаю, но не всегда. :-)
 
Макро рекодер классно помогает, включите запись макроса и поперемещайтесь Ctrl+Влево(вправо, вверх или вниз), посмотрите как выглядит код при этом.
 
Всем привет!  
Можно ли в макросе прописать массив вручную? Допустим в Excel массив можно прописать так = {№:1:2:3;Получил:Иванов:Петров:Итого;Сумма:100:500:600} и получится массив 4*4 Можно ли в макросах так прописывать массив  
Заранее всем благодарен, за ответы!!)
 
Не понял, как это "в Excel массив можно прописать так"  
 
Ну а в VBA можно вручную массив наполнить, но зачем это всё?
 
Одномерный массив можно создать с помощью функции Array.  
Двумерный массив можно создать с помощью функций Array и Transpose:  
 
Sub testArray()  
Dim v()  
v = Array(1, 2, "ws", 5)  
[A1:D1].Value = v
v = Array(v, Array(10, "sd", 20, 30))  
v = Application.Transpose(v)  
[A3:B6].Value = v
End Sub  
 
Или заполнить поэлементно.
 
я хочу использовать написанный массив в расширенном фильтре, что бы не создавать для этого ячейки, думаю написать чтото типа myarray равно ( ) а потом написать range myarray!? или для двумерного массива без Transpose не как?)  
 
{quote}{login=Hugo}{date=09.12.2011 01:58}{thema=}{post}Не понял, как это "в Excel массив можно прописать так" {/post}{/quote}  
Возможно я ошибся в расстановки двоеточий но вот мой пример который все объясняет!))  
=ВПР(2;{"№";"Получил";"Сумма":1;"Иванов";100:2;"Петров";250:3;"Итого";350};2;0)
 
Sub tt()  
   Dim a, b, s$, i&, ii&  
 
   s = "№:1:2:3, Получил:Иванов:Петров:Итого, Сумма:100:500:600"  
   a = Split(s, ",")  
   ReDim c(1 To 4, 1 To UBound(a) + 1)  
   For i = 0 To UBound(a)  
       b = Split(a(i), ":")  
       For ii = 0 To UBound(b)  
           c(ii + 1, i + 1) = b(ii)  
       Next ii, i  
       [a1].Resize(UBound(c, 1), UBound(c, 2)) = c
End Sub  
 
Вот все данные в c.  
Где что - смотрите пошагово в окне Locals.
 
значит ограничится одной строчкой не удастся надо прописывать все возможные дополнения??(
 
> я хочу использовать написанный массив в расширенном фильтре, что бы не создавать для этого ячейки  
 
Параметрами метода Range.AdvancedFilter являются диапазоны (кроме параметра Unique). Так что не получится.  
Создайте новый лист для диапазона параметров фильтра, а потом удалите его.
 
Жаль а счастье было так близко!!))  
В любом случаю благодарю всех за предоставленные ответы!)
Страницы: 1
Читают тему
Наверх