powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Поиск значения и запись в массив
18 сообщений из 18, страница 1 из 1
Поиск значения и запись в массив
    #34097371
andMegaM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня следующий вопрос. Есть код:

Код: plaintext
1.
2.
3.
4.
5.
Dim r As Range

For Each r In Range("B:B")
If r.Value = "да" Then qwer = r.Address(RowAbsolute:=False)
w = Mid(qwer,  3 )
Next r

В колонке B ищется слово "да" и если оно находится, то qwer присваивается адрес ячейки, а w присваивается номер строки. Как записать в массив все w (если "да" встречается не один раз)?
...
Рейтинг: 0 / 0
Поиск значения и запись в массив
    #34097429
Фотография k-nike
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Примерно как-то так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Dim r As Range
Dim w() as Long
Dim i as Long

i =  0 
For Each r In Range("B:B")
If r.Value = "да" Then
    Redim Preserve w(i)
    w(i) = r.Row
    i = i +  1 
End If
Next r
...
Рейтинг: 0 / 0
Поиск значения и запись в массив
    #34097471
andMegaM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если у меня встречается 2 раза "да", то записывается в w последний номер
...
Рейтинг: 0 / 0
Поиск значения и запись в массив
    #34097505
Фотография k-nike
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andMegaMЕсли у меня встречается 2 раза "да", то записывается в w последний номер
Это утверждение? Вы мой код пробовали?
Вообще-то w() - это массив и в нем содержатся все строки, где встречается "да"
...
Рейтинг: 0 / 0
Поиск значения и запись в массив
    #34097509
andMegaM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВСЕ работает, только надо i не от нуля, а от единицы считать
...
Рейтинг: 0 / 0
Поиск значения и запись в массив
    #34097517
Фотография k-nike
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andMegaMВСЕ работает, только надо i не от нуля, а от единицы считать
Обоснуйте.
...
Рейтинг: 0 / 0
Поиск значения и запись в массив
    #34097532
vbapro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andMegaMЕсли у меня встречается 2 раза "да", то записывается в w последний номер не понятно
...
Рейтинг: 0 / 0
Поиск значения и запись в массив
    #34097546
andMegaM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НЕ могу понять почему, но если от нуля, то первая строка где есть "да" не учитывается и из 4-ёх "да" записываются последние 3
...
Рейтинг: 0 / 0
Поиск значения и запись в массив
    #34097571
Фотография k-nike
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andMegaMНЕ могу понять почему, но если от нуля, то первая строка где есть "да" не учитывается и из 4-ёх "да" записываются последние 3
А так пробовали?
Код: plaintext
msgbox w( 0 )

Массивы в VB по умолчнию создаются с индексом от нуля. Посмотрите в дебаггере содержимое массива.
...
Рейтинг: 0 / 0
Поиск значения и запись в массив
    #34097600
andMegaM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блин!!! А вот про слона то я и забыл.Спасибо за подсказку. А как мне записать в колонку "A" подряд все W(i)? Я пробовал вроде того:

Код: plaintext
1.
2.
For q =  1  To ActiveCell.SpecialCells(xlLastCell).Row
Cells(q,  1 ).Value = w(i)
Next q
Но че-то не пашет
...
Рейтинг: 0 / 0
Поиск значения и запись в массив
    #34097633
andMegaM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот так работает, но все равно не корректно
Код: plaintext
1.
2.
For i =  1  To ActiveCell.SpecialCells(xlLastCell).Row
Cells(i,  1 ).Value = w(i -  1 )
Next i
...
Рейтинг: 0 / 0
Поиск значения и запись в массив
    #34097650
Фотография k-nike
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Dim j As Long
Dim i as Long
Dim rng As Range ' Ячейка начала вывода столбца
    
Set rng = ActiveSheet.Range("A1")
j =  0 
    
For i = LBound(w) To UBound(w)
    rng.Offset(j,  0 ).Value = w(i)
    j = j +  1 
Next i

...
Рейтинг: 0 / 0
Поиск значения и запись в массив
    #34097699
andMegaM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Огромное спасибо!!! Все работает. Вопрос считаю закрытым.
...
Рейтинг: 0 / 0
Поиск значения и запись в массив
    #34097770
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
k-nike
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Dim j As Long
Dim i as Long
Dim rng As Range ' Ячейка начала вывода столбца
    
Set rng = ActiveSheet.Range("A1")
j =  0 
    
For i = LBound(w) To UBound(w)
    rng.Offset(j,  0 ).Value = w(i)
    j = j +  1 
Next i



Можно обойтись без цикла:

Sub etst()
With ActiveSheet.[A1]
.Resize(UBound(w) + 1).Value = Application.Transpose(w)
End With
End Sub
...
Рейтинг: 0 / 0
Поиск значения и запись в массив
    #34097818
vkodor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KL (XL)[quot k-nike][src vba]Можно обойтись без цикла:

Sub etst()
With ActiveSheet.[A1]
.Resize(UBound(w) + 1).Value = Application.Transpose(w)
End With
End Sub
класно
давно искал способ запихать массив в диапозон без перебора
интересно быстей ли будет работать?
...
Рейтинг: 0 / 0
Поиск значения и запись в массив
    #34097876
vkodor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Sub jh()
    Dim f( 1  To  3 ) As Long
    Dim x As Long
    Dim a
    f( 1 ) =  1 
    f( 2 ) =  2 
    f( 3 ) =  3 
    a = Timer
    For x =  1  To  10000 
        Range("A1:A3") = Application.Transpose(f)
    Next
    MsgBox Timer - a
End Sub
3,5 сек

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Sub jh2()
    Dim f( 1  To  3 ) As Long
    Dim x As Long, i As Long
    Dim a
    f( 1 ) =  1 
    f( 2 ) =  2 
    f( 3 ) =  3 
    a = Timer
    For x =  1  To  10000 
        For i =  1  To UBound(f)
            Cells(i,  1 ) = f(i)
        Next
    Next
    MsgBox Timer - a
End Sub
7,5 сек
...
Рейтинг: 0 / 0
Поиск значения и запись в массив
    #34098147
Фотография k-nike
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
Application.Transpose()

Что-то не нашел такого метода в хелпе. Это недокументированный метод?
И как тогда вставить этим способом не столбец, а строку?

...
Рейтинг: 0 / 0
Поиск значения и запись в массив
    #34098199
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
k-nike
Код: plaintext
Application.Transpose()

Что-то не нашел такого метода в хелпе. Это недокументированный метод?Это не метод, а функция раб. листа. Задокументирована она как

Код: plaintext
Application.WorksheetFunction.Transpose

синтаксис Application.Transpose действительно недокументированный, существует для совместимости с версиями до XL97 и ведет себя слегка по иному, т.е. может возвращать значение ошибки не вызывая остановки кода. За это последнее и за краткость его и использую.

k-nikeИ как тогда вставить этим способом не столбец, а строку?
Код: plaintext
1.
2.
3.
4.
Sub Test()
    With ActiveSheet.[A1]
        .Resize(,UBound(w) +  1 ).Value = w
    End With
End Sub
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Поиск значения и запись в массив
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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