Option Compare Text 'не взирать на регистр Sub LoopRange2() Dim MyCelltest As Range 'объявляем переменную For Each MyCelltest In Selection 'Для каждой ячейки в диапазоне If MyCelltest.Value Like "*акула" Then 'если контент ячейки содержит MyCelltest.Interior.ColorIndex = 4 'Покрасить в определенный цвет 'если контент ячейки содержит ElseIf MyCelltest.Value Like "*барракуда*" Then 'если контент ячейки содержит MyCelltest.Interior.ColorIndex = 4 End If Next End Sub
[/vba]
В макросе ориентировочно 900 значений, т.е. ElseIf MyCelltest.Value Like "*второе значение*" Then, ElseIf MyCelltest.Value Like "*третье значение*" Then и т.п. Время от времени он выдает Excel VBA Run-time error '13' Type mismatch. ( Эта проблема возникает когда начинаю действовать этим макросом на файл с 1 500 000 строк) На тестовом в 1000 - все работает отлично. Хотел бы уточнить, возможно проблема в том, что я ищу не по массиву а по каждой ячейке? Как изменить макрос так, чтобы он а) Искал по массиву б) Не красил ячейку а подставлял в ячейку слева определенное слово. Заранее спасибо
У меня есть следующий макрос [vba]
Код
Option Compare Text 'не взирать на регистр Sub LoopRange2() Dim MyCelltest As Range 'объявляем переменную For Each MyCelltest In Selection 'Для каждой ячейки в диапазоне If MyCelltest.Value Like "*акула" Then 'если контент ячейки содержит MyCelltest.Interior.ColorIndex = 4 'Покрасить в определенный цвет 'если контент ячейки содержит ElseIf MyCelltest.Value Like "*барракуда*" Then 'если контент ячейки содержит MyCelltest.Interior.ColorIndex = 4 End If Next End Sub
[/vba]
В макросе ориентировочно 900 значений, т.е. ElseIf MyCelltest.Value Like "*второе значение*" Then, ElseIf MyCelltest.Value Like "*третье значение*" Then и т.п. Время от времени он выдает Excel VBA Run-time error '13' Type mismatch. ( Эта проблема возникает когда начинаю действовать этим макросом на файл с 1 500 000 строк) На тестовом в 1000 - все работает отлично. Хотел бы уточнить, возможно проблема в том, что я ищу не по массиву а по каждой ячейке? Как изменить макрос так, чтобы он а) Искал по массиву б) Не красил ячейку а подставлял в ячейку слева определенное слово. Заранее спасибоfry4536s
Sub LoopRange2() Dim x, i As Long, s As String x = Range("C1", Cells(Rows.Count, 3).End(xlUp)).Value s = "~" & Join(Array("акула", "барракуда", "волк", "Дельфин"), "~") & "~" For i = 1 To UBound(x) If InStr(s, "~" & x(i, 1) & "~") Then Cells(i, 2) = "хищник" Next i End Sub
[/vba]
может так?: [vba]
Код
Option Compare Text
Sub LoopRange2() Dim x, i As Long, s As String x = Range("C1", Cells(Rows.Count, 3).End(xlUp)).Value s = "~" & Join(Array("акула", "барракуда", "волк", "Дельфин"), "~") & "~" For i = 1 To UBound(x) If InStr(s, "~" & x(i, 1) & "~") Then Cells(i, 2) = "хищник" Next i End Sub
Последний вопрос, вы не подскажете ли вы, как применять данный макрос не для точного совпадения а для случаев, когда искомое слово входит в ячейку. Например Волк съел овцу, барракуда живет в воде etc.
Отлично, работает!
Последний вопрос, вы не подскажете ли вы, как применять данный макрос не для точного совпадения а для случаев, когда искомое слово входит в ячейку. Например Волк съел овцу, барракуда живет в воде etc.fry4536s
Сообщение отредактировал fry4536s - Пятница, 30.08.2013, 16:45
вот не самый быстрый вариант, но все же попробуйте [vba]
Код
Option Compare Text Sub LoopRange3() Dim x, i As Long, j As Long, arr x = Range("C1", Cells(Rows.Count, 3).End(xlUp)).Value arr = Array("акула", "барракуда", "волк", "Дельфин") For i = 1 To UBound(x) For j = 0 To UBound(arr) If InStr(x(i, 1), arr(j)) Then Cells(i, 2) = "хищник": Exit For Next Next i End Sub
[/vba] ПС Барракуда точно в воде живет? [offtop]Edited: посмотрел в Яндексе - ну да, это ж рыба (до 2-х метров!)[/offtop]
вот не самый быстрый вариант, но все же попробуйте [vba]
Код
Option Compare Text Sub LoopRange3() Dim x, i As Long, j As Long, arr x = Range("C1", Cells(Rows.Count, 3).End(xlUp)).Value arr = Array("акула", "барракуда", "волк", "Дельфин") For i = 1 To UBound(x) For j = 0 To UBound(arr) If InStr(x(i, 1), arr(j)) Then Cells(i, 2) = "хищник": Exit For Next Next i End Sub
[/vba] ПС Барракуда точно в воде живет? [offtop]Edited: посмотрел в Яндексе - ну да, это ж рыба (до 2-х метров!)[/offtop]nilem
Яндекс.Деньги 4100159601573
Сообщение отредактировал nilem - Пятница, 30.08.2013, 17:19
Ну и что? Если его анализировать как текст без загрузки на лист - тогда принимается. Но что как зачем там красить? Если грузить на лист - не загрузите.
Ну и что? Если его анализировать как текст без загрузки на лист - тогда принимается. Но что как зачем там красить? Если грузить на лист - не загрузите.Hugo