Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Перебор всех строк в столбце и поиск в них элемента массива - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Перебор всех строк в столбце и поиск в них элемента массива (Макросы Sub)
Перебор всех строк в столбце и поиск в них элемента массива
adventurerodnako Дата: Четверг, 03.10.2013, 09:48 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Прошу не ругаться и помидорами не кидаться..... Я новичок...

Имеются записи (столбец E)

Source
69Ekat-EKT104Z_653-M516-OSN8800 Asbestovsky-shelf0-14-52TQX-3(RX1)-1
69Ekat-EKT104Z_653-M516-OSN8800 Asbestovsky-shelf0-14-52TQX-4(RX2)-1
HMS8097-SRG-HMS8097_663-1.3/10M565-OSN8800-1-shelf0-1-13LQM-3(RX1)-1
EKT9044-Tuglm-EKT9044_652-8.3M533-OSN-6800-3-shelf0-1-13LQM-3(RX1)-1
EKT9044-Tuglm-EKT9044_652-8.3M533-OSN-6800-3-shelf0-11-13LQM-3(RX1)-1

В столбец D необходимо записать значение из массива (TQX, LQM и так далее) если строка содержит элемент массива.

Не могу понять, как написать цикл, чтобы он перебирал все строки в столбце E и искал в них один из элементов массива.
При нахождении элемента в ячейку D заносил найденый элемент массива. Ну и при отсутствии такового записывал в ячейку D пометку, что нет совпадений.

D: E:
TQX 69Ekat-EKT104Z_653-M516-OSN8800 Asbestovsky-shelf0-14-52TQX-3(RX1)-1
TQX 69Ekat-EKT104Z_653-M516-OSN8800 Asbestovsky-shelf0-14-52TQX-4(RX2)-1
LQM HMS8097-SRG-HMS8097_663-1.3/10M565-OSN8800-1-shelf0-1-13LQM-3(RX1)-1
LQM EKT9044-Tuglm-EKT9044_652-8.3M533-OSN-6800-3-shelf0-1-13LQM-3(RX1)-1
LQM EKT9044-Tuglm-EKT9044_652-8.3M533-OSN-6800-3-shelf0-11-13LQM-3(RX1)-1

Фаил приклеил.
-------------------------------------------------------------------------------------------------------------

[vba]
Код
Sub Arr()

Sheets("DATA").Select
Range("E1").Select
Selection.CurrentRegion.Select
KolStpData = Selection.Rows.Count 'количество строк.

Dim myArray As Variant
Dim txt As String
Dim i As Long

myArray = Array("TQX", "NS3", "LQM", "ND2", "LDG", "LBES", "FDGS", "TMRS", "TRC", "LWC", "LBE", "NS2", "TOM", "TDX", "LWX", "LDM")
Range("D2").Select

For i = 1 To KolStpData - 1

Dim sStr As String
sStr = myArray(0)
pStr = Range("E" & i + 1)
If InStr(1, pStr, sStr, vbTextCompare) > 0 Then
ActiveCell.FormulaR1C1 = myArray(0)
Else
ActiveCell.FormulaR1C1 = "----------!"
End If
ActiveCell.Offset(1, 0).Select
Next

End Sub
[/vba]
[moder]Оформляйте коды тегами.
Это такие кнопочки с картинками немного выше того поля, где Вы пишете сообщение.
К сообщению приложен файл: WDM_TRAILS-DB-t.rar (27.6 Kb)


Сообщение отредактировал adventurerodnako - Четверг, 03.10.2013, 09:50
 
Ответить
СообщениеПрошу не ругаться и помидорами не кидаться..... Я новичок...

Имеются записи (столбец E)

Source
69Ekat-EKT104Z_653-M516-OSN8800 Asbestovsky-shelf0-14-52TQX-3(RX1)-1
69Ekat-EKT104Z_653-M516-OSN8800 Asbestovsky-shelf0-14-52TQX-4(RX2)-1
HMS8097-SRG-HMS8097_663-1.3/10M565-OSN8800-1-shelf0-1-13LQM-3(RX1)-1
EKT9044-Tuglm-EKT9044_652-8.3M533-OSN-6800-3-shelf0-1-13LQM-3(RX1)-1
EKT9044-Tuglm-EKT9044_652-8.3M533-OSN-6800-3-shelf0-11-13LQM-3(RX1)-1

В столбец D необходимо записать значение из массива (TQX, LQM и так далее) если строка содержит элемент массива.

Не могу понять, как написать цикл, чтобы он перебирал все строки в столбце E и искал в них один из элементов массива.
При нахождении элемента в ячейку D заносил найденый элемент массива. Ну и при отсутствии такового записывал в ячейку D пометку, что нет совпадений.

D: E:
TQX 69Ekat-EKT104Z_653-M516-OSN8800 Asbestovsky-shelf0-14-52TQX-3(RX1)-1
TQX 69Ekat-EKT104Z_653-M516-OSN8800 Asbestovsky-shelf0-14-52TQX-4(RX2)-1
LQM HMS8097-SRG-HMS8097_663-1.3/10M565-OSN8800-1-shelf0-1-13LQM-3(RX1)-1
LQM EKT9044-Tuglm-EKT9044_652-8.3M533-OSN-6800-3-shelf0-1-13LQM-3(RX1)-1
LQM EKT9044-Tuglm-EKT9044_652-8.3M533-OSN-6800-3-shelf0-11-13LQM-3(RX1)-1

Фаил приклеил.
-------------------------------------------------------------------------------------------------------------

[vba]
Код
Sub Arr()

Sheets("DATA").Select
Range("E1").Select
Selection.CurrentRegion.Select
KolStpData = Selection.Rows.Count 'количество строк.

Dim myArray As Variant
Dim txt As String
Dim i As Long

myArray = Array("TQX", "NS3", "LQM", "ND2", "LDG", "LBES", "FDGS", "TMRS", "TRC", "LWC", "LBE", "NS2", "TOM", "TDX", "LWX", "LDM")
Range("D2").Select

For i = 1 To KolStpData - 1

Dim sStr As String
sStr = myArray(0)
pStr = Range("E" & i + 1)
If InStr(1, pStr, sStr, vbTextCompare) > 0 Then
ActiveCell.FormulaR1C1 = myArray(0)
Else
ActiveCell.FormulaR1C1 = "----------!"
End If
ActiveCell.Offset(1, 0).Select
Next

End Sub
[/vba]
[moder]Оформляйте коды тегами.
Это такие кнопочки с картинками немного выше того поля, где Вы пишете сообщение.

Автор - adventurerodnako
Дата добавления - 03.10.2013 в 09:48
nilem Дата: Четверг, 03.10.2013, 10:08 | Сообщение № 2
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
Можно попробовать так:
[vba]
Код
Sub Arr()
Dim x, i&, j&, myArray As Variant
x = Range("E1", Cells(Rows.Count, 5).End(xlUp)).Value
myArray = Array("TQX", "NS3", "LQM", "ND2", "LDG", "LBES", "FDGS", _
                 "TMRS", "TRC", "LWC", "LBE", "NS2", "TOM", "TDX", "LWX", "LDM")
For i = 2 To UBound(x)
     For j = 0 To UBound(myArray)
         If InStr(x(i, 1), myArray(j)) > 0 Then x(i, 1) = myArray(j): Exit For
     Next j
     If j > UBound(myArray) Then x(i, 1) = "отсутсвует!"
Next i
Range("D1").Resize(i - 1).Value = x
End Sub
[/vba]
[offtop]
Цитата (adventurerodnako, 03.10.2013 в 09:48, в сообщении № 1)
Прошу не ругаться и помидорами не кидаться.....

Помидоры уже кончились... А вот тыквы - самый сезон :)[/offtop]


Яндекс.Деньги 4100159601573
 
Ответить
СообщениеМожно попробовать так:
[vba]
Код
Sub Arr()
Dim x, i&, j&, myArray As Variant
x = Range("E1", Cells(Rows.Count, 5).End(xlUp)).Value
myArray = Array("TQX", "NS3", "LQM", "ND2", "LDG", "LBES", "FDGS", _
                 "TMRS", "TRC", "LWC", "LBE", "NS2", "TOM", "TDX", "LWX", "LDM")
For i = 2 To UBound(x)
     For j = 0 To UBound(myArray)
         If InStr(x(i, 1), myArray(j)) > 0 Then x(i, 1) = myArray(j): Exit For
     Next j
     If j > UBound(myArray) Then x(i, 1) = "отсутсвует!"
Next i
Range("D1").Resize(i - 1).Value = x
End Sub
[/vba]
[offtop]
Цитата (adventurerodnako, 03.10.2013 в 09:48, в сообщении № 1)
Прошу не ругаться и помидорами не кидаться.....

Помидоры уже кончились... А вот тыквы - самый сезон :)[/offtop]

Автор - nilem
Дата добавления - 03.10.2013 в 10:08
SkyPro Дата: Четверг, 03.10.2013, 10:14 | Сообщение № 3
Группа: Друзья
Ранг: Старожил
Сообщений: 1206
Репутация: 255 ±
Замечаний: 0% ±

2010
[offtop]Ребята, подскажите, пожалуйста, где доступным языком написано о массивах в вба? Хоть убей не могу разобраться =\
PS: Желательно с практическими примерами..


skypro1111@gmail.com

Сообщение отредактировал SkyPro - Четверг, 03.10.2013, 10:17
 
Ответить
Сообщение[offtop]Ребята, подскажите, пожалуйста, где доступным языком написано о массивах в вба? Хоть убей не могу разобраться =\
PS: Желательно с практическими примерами..

Автор - SkyPro
Дата добавления - 03.10.2013 в 10:14
adventurerodnako Дата: Четверг, 03.10.2013, 11:45 | Сообщение № 4
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Спасибо nilem очень помог.
 
Ответить
СообщениеСпасибо nilem очень помог.

Автор - adventurerodnako
Дата добавления - 03.10.2013 в 11:45
adventurerodnako Дата: Четверг, 03.10.2013, 13:47 | Сообщение № 5
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
myArray = Array("TQX", "NS3", "LQM", "ND2", "LDG", "LBES", "FDGS", _
                "TMRS", "TRC", "LWC", "LBE", "NS2", "TOM", "TDX", "LWX", "LDM")


Раз уж пошла таая пьянка, как передать значения корректно?

Как заполнить Array значениями из ячеек?
Если пытаюсь занести так

[vba]
Код
myArray = Range("A1:A10")
[/vba]
или
[vba]
Код
myArray = Range("A1", Cells(Rows.Count, 1).End(xlUp)).Value
[/vba]

выдаёт ошибку -- Run-time error '9':
Subscript out of range.


Как с этим бороться? Я так понимаю надо перевести в текст элементы массива.... %) Но вот в каком месте?
К сообщению приложен файл: WDM_TRAILS-DB-t.xlsm (31.1 Kb)
 
Ответить
Сообщение
myArray = Array("TQX", "NS3", "LQM", "ND2", "LDG", "LBES", "FDGS", _
                "TMRS", "TRC", "LWC", "LBE", "NS2", "TOM", "TDX", "LWX", "LDM")


Раз уж пошла таая пьянка, как передать значения корректно?

Как заполнить Array значениями из ячеек?
Если пытаюсь занести так

[vba]
Код
myArray = Range("A1:A10")
[/vba]
или
[vba]
Код
myArray = Range("A1", Cells(Rows.Count, 1).End(xlUp)).Value
[/vba]

выдаёт ошибку -- Run-time error '9':
Subscript out of range.


Как с этим бороться? Я так понимаю надо перевести в текст элементы массива.... %) Но вот в каком месте?

Автор - adventurerodnako
Дата добавления - 03.10.2013 в 13:47
SkyPro Дата: Четверг, 03.10.2013, 13:54 | Сообщение № 6
Группа: Друзья
Ранг: Старожил
Сообщений: 1206
Репутация: 255 ±
Замечаний: 0% ±

2010


skypro1111@gmail.com

Сообщение отредактировал SkyPro - Четверг, 03.10.2013, 13:55
 
Ответить
СообщениеКакраз открыта вкладка :)
http://www.excelworld.ru/board/vba/tricks/range_to_array/9-1-0-19

Автор - SkyPro
Дата добавления - 03.10.2013 в 13:54
RAN Дата: Четверг, 03.10.2013, 14:08 | Сообщение № 7
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Ошибка не там, а здесь
[vba]
Код
       If InStr(x(i, 1), myArray(j)) > 0 Then x(i, 1) = myArray(j): Exit For
[/vba]
Поскольку массив из диапазона двумерный, нужно писать так
[vba]
Код
        If InStr(x(i, 1), myArray(j,1)) > 0 Then x(i, 1) = myArray(j,1): Exit For
[/vba]


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеОшибка не там, а здесь
[vba]
Код
       If InStr(x(i, 1), myArray(j)) > 0 Then x(i, 1) = myArray(j): Exit For
[/vba]
Поскольку массив из диапазона двумерный, нужно писать так
[vba]
Код
        If InStr(x(i, 1), myArray(j,1)) > 0 Then x(i, 1) = myArray(j,1): Exit For
[/vba]

Автор - RAN
Дата добавления - 03.10.2013 в 14:08
adventurerodnako Дата: Четверг, 03.10.2013, 14:33 | Сообщение № 8
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Поскольку массив из диапазона двумерный, нужно писать так


Массив то одномерный. Это был перенос строки....

Но веди в первом случае работает, когда элементы массива заданы явно...
А вот передать из ячеек не получается :( :( :(


Сообщение отредактировал adventurerodnako - Четверг, 03.10.2013, 14:47
 
Ответить
Сообщение
Поскольку массив из диапазона двумерный, нужно писать так


Массив то одномерный. Это был перенос строки....

Но веди в первом случае работает, когда элементы массива заданы явно...
А вот передать из ячеек не получается :( :( :(

Автор - adventurerodnako
Дата добавления - 03.10.2013 в 14:33
adventurerodnako Дата: Четверг, 03.10.2013, 14:36 | Сообщение № 9
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Какраз открыта вкладка


Читал, много думал - но так и не понял где собака порылась...


Сообщение отредактировал adventurerodnako - Четверг, 03.10.2013, 14:37
 
Ответить
Сообщение
Какраз открыта вкладка


Читал, много думал - но так и не понял где собака порылась...

Автор - adventurerodnako
Дата добавления - 03.10.2013 в 14:36
RAN Дата: Четверг, 03.10.2013, 14:46 | Сообщение № 10
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
В первом случае массив одномерный.


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеВ первом случае массив одномерный.

Автор - RAN
Дата добавления - 03.10.2013 в 14:46
nilem Дата: Четверг, 03.10.2013, 15:04 | Сообщение № 11
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
Цитата (adventurerodnako, 03.10.2013 в 14:36, в сообщении № 9)
Читал, много думал

вот это нужно было прочитать
[vba]
Код
With WorksheetFunction 'одномерный массив из строки   
  x = .Transpose(.Transpose(Range("A1", Cells(1, Columns.Count).End(xlToLeft)).Value))   
End With   
[/vba]


Яндекс.Деньги 4100159601573
 
Ответить
Сообщение
Цитата (adventurerodnako, 03.10.2013 в 14:36, в сообщении № 9)
Читал, много думал

вот это нужно было прочитать
[vba]
Код
With WorksheetFunction 'одномерный массив из строки   
  x = .Transpose(.Transpose(Range("A1", Cells(1, Columns.Count).End(xlToLeft)).Value))   
End With   
[/vba]

Автор - nilem
Дата добавления - 03.10.2013 в 15:04
RAN Дата: Четверг, 03.10.2013, 15:40 | Сообщение № 12
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Или это
[vba]
Код
With WorksheetFunction 'одномерный массив из столбца
x = .Transpose(Range("A1", Cells(Rows.Count, 1).End(xlUp)).Value)
End With
[/vba]


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеИли это
[vba]
Код
With WorksheetFunction 'одномерный массив из столбца
x = .Transpose(Range("A1", Cells(Rows.Count, 1).End(xlUp)).Value)
End With
[/vba]

Автор - RAN
Дата добавления - 03.10.2013 в 15:40
adventurerodnako Дата: Четверг, 03.10.2013, 17:02 | Сообщение № 13
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Или это


Вот так - РАБОТАЕТ.

[vba]
Код
Sub Arr()

Dim x, i&, j&, myArray As Variant
x = Range("E1", Cells(Rows.Count, 5).End(xlUp)).Value

myArray = Array("TQX", "NS3", "LQM", "ND2", "LDG", "LBES", "FDGS", _
                 "TMRS", "TRC", "LWC", "LBE", "NS2", "TOM", "TDX", "LWX", "LDM", "LSX")
For i = 2 To UBound(x)
     For j = 0 To UBound(myArray)
         If InStr(x(i, 1), myArray(j)) > 0 Then x(i, 1) = myArray(j): Exit For
     Next j
     If j > UBound(myArray) Then x(i, 1) = "отсутствует!"
Next i
Range("D1").Resize(i - 1).Value = x
   
    
End Sub
[/vba]

А вот так нет:

[vba]
Код
Sub Arr()

Dim x, i&, j&, myArray As Variant
x = Range("E1", Cells(Rows.Count, 5).End(xlUp)).Value

With WorksheetFunction  
myArray = .Transpose(Range("A1", Cells(Rows.Count, 1).End(xlUp)).Value)
End With

For i = 2 To UBound(x)
     For j = 0 To UBound(myArray)
         If InStr(x(i, 1), myArray(j)) > 0 Then x(i, 1) = myArray(j): Exit For
     Next j
     If j > UBound(myArray) Then x(i, 1) = "отсутствует!"
Next i
Range("D1").Resize(i - 1).Value = x
   
    
End Sub
[/vba]

выдаёт ошибку -- Run-time error '9':
Subscript out of range.
К сообщению приложен файл: 0258368.xlsm (28.7 Kb)
 
Ответить
Сообщение
Или это


Вот так - РАБОТАЕТ.

[vba]
Код
Sub Arr()

Dim x, i&, j&, myArray As Variant
x = Range("E1", Cells(Rows.Count, 5).End(xlUp)).Value

myArray = Array("TQX", "NS3", "LQM", "ND2", "LDG", "LBES", "FDGS", _
                 "TMRS", "TRC", "LWC", "LBE", "NS2", "TOM", "TDX", "LWX", "LDM", "LSX")
For i = 2 To UBound(x)
     For j = 0 To UBound(myArray)
         If InStr(x(i, 1), myArray(j)) > 0 Then x(i, 1) = myArray(j): Exit For
     Next j
     If j > UBound(myArray) Then x(i, 1) = "отсутствует!"
Next i
Range("D1").Resize(i - 1).Value = x
   
    
End Sub
[/vba]

А вот так нет:

[vba]
Код
Sub Arr()

Dim x, i&, j&, myArray As Variant
x = Range("E1", Cells(Rows.Count, 5).End(xlUp)).Value

With WorksheetFunction  
myArray = .Transpose(Range("A1", Cells(Rows.Count, 1).End(xlUp)).Value)
End With

For i = 2 To UBound(x)
     For j = 0 To UBound(myArray)
         If InStr(x(i, 1), myArray(j)) > 0 Then x(i, 1) = myArray(j): Exit For
     Next j
     If j > UBound(myArray) Then x(i, 1) = "отсутствует!"
Next i
Range("D1").Resize(i - 1).Value = x
   
    
End Sub
[/vba]

выдаёт ошибку -- Run-time error '9':
Subscript out of range.

Автор - adventurerodnako
Дата добавления - 03.10.2013 в 17:02
nilem Дата: Четверг, 03.10.2013, 17:33 | Сообщение № 14
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
во втором варианте д.б. так:
[vba]
Код
For j = 1 To UBound(myArray)
[/vba]
или, чтобы не заморачиваться, для обоих вариантов подойдет так:
[vba]
Код
For j = LBound(myArray) To UBound(myArray)
[/vba]


Яндекс.Деньги 4100159601573

Сообщение отредактировал nilem - Четверг, 03.10.2013, 17:34
 
Ответить
Сообщениево втором варианте д.б. так:
[vba]
Код
For j = 1 To UBound(myArray)
[/vba]
или, чтобы не заморачиваться, для обоих вариантов подойдет так:
[vba]
Код
For j = LBound(myArray) To UBound(myArray)
[/vba]

Автор - nilem
Дата добавления - 03.10.2013 в 17:33
SkyPro Дата: Четверг, 03.10.2013, 17:38 | Сообщение № 15
Группа: Друзья
Ранг: Старожил
Сообщений: 1206
Репутация: 255 ±
Замечаний: 0% ±

2010
Поменял j =0 на 1 и работает
[vba]
Код
Sub Arr()
Dim x, i&, j&, myArray As Variant

x = Range("E1", Cells(Rows.Count, 5).End(xlUp)).Value

With WorksheetFunction
myArray = .Transpose(Range("A1", Cells(Rows.Count, 1).End(xlUp)).Value)
End With
For i = 2 To UBound(x)
      For j = 1 To UBound(myArray)
          If InStr(x(i, 1), myArray(j)) > 0 Then x(i, 1) = myArray(j): Exit For
      Next j
      If j > UBound(myArray) Then x(i, 1) = "отсутствует!"
Next i
Range("D1").Resize(i - 1).Value = x
        
End Sub
[/vba]


skypro1111@gmail.com

Сообщение отредактировал SkyPro - Четверг, 03.10.2013, 17:40
 
Ответить
СообщениеПоменял j =0 на 1 и работает
[vba]
Код
Sub Arr()
Dim x, i&, j&, myArray As Variant

x = Range("E1", Cells(Rows.Count, 5).End(xlUp)).Value

With WorksheetFunction
myArray = .Transpose(Range("A1", Cells(Rows.Count, 1).End(xlUp)).Value)
End With
For i = 2 To UBound(x)
      For j = 1 To UBound(myArray)
          If InStr(x(i, 1), myArray(j)) > 0 Then x(i, 1) = myArray(j): Exit For
      Next j
      If j > UBound(myArray) Then x(i, 1) = "отсутствует!"
Next i
Range("D1").Resize(i - 1).Value = x
        
End Sub
[/vba]

Автор - SkyPro
Дата добавления - 03.10.2013 в 17:38
adventurerodnako Дата: Четверг, 03.10.2013, 17:44 | Сообщение № 16
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
чтобы не заморачиваться, для обоих вариантов подойдет так:


Работает!!! hands hands hands

[vba]
Код
Sub Arr()

Dim x, i&, j&, myArray As Variant
x = Range("E1", Cells(Rows.Count, 5).End(xlUp)).Value

With WorksheetFunction
myArray = .Transpose(Range("A1", Cells(Rows.Count, 1).End(xlUp)).Value)
End With

For i = 2 To UBound(x)
     For j = LBound(myArray) To UBound(myArray)
     'For j = 0 To UBound(myArray)
         If InStr(x(i, 1), myArray(j)) > 0 Then x(i, 1) = myArray(j): Exit For
     Next j
     If j > UBound(myArray) Then x(i, 1) = "отсутствует!"
Next i
Range("D1").Resize(i - 1).Value = x
   
    
End Sub
[/vba] hands hands
 
Ответить
Сообщение
чтобы не заморачиваться, для обоих вариантов подойдет так:


Работает!!! hands hands hands

[vba]
Код
Sub Arr()

Dim x, i&, j&, myArray As Variant
x = Range("E1", Cells(Rows.Count, 5).End(xlUp)).Value

With WorksheetFunction
myArray = .Transpose(Range("A1", Cells(Rows.Count, 1).End(xlUp)).Value)
End With

For i = 2 To UBound(x)
     For j = LBound(myArray) To UBound(myArray)
     'For j = 0 To UBound(myArray)
         If InStr(x(i, 1), myArray(j)) > 0 Then x(i, 1) = myArray(j): Exit For
     Next j
     If j > UBound(myArray) Then x(i, 1) = "отсутствует!"
Next i
Range("D1").Resize(i - 1).Value = x
   
    
End Sub
[/vba] hands hands

Автор - adventurerodnako
Дата добавления - 03.10.2013 в 17:44
RAN Дата: Четверг, 03.10.2013, 19:16 | Сообщение № 17
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Массив, получаемый из диапазона листа всегда двумерный, в соответствии с адресом ячейки (строка, столбец).
Переводить ли его в одномерный?
Дело вкуса и задачи.


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеМассив, получаемый из диапазона листа всегда двумерный, в соответствии с адресом ячейки (строка, столбец).
Переводить ли его в одномерный?
Дело вкуса и задачи.

Автор - RAN
Дата добавления - 03.10.2013 в 19:16
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Перебор всех строк в столбце и поиск в них элемента массива (Макросы Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!