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

Вход

Регистрация

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

 

= Мир MS Excel/Изменение параметров макроса для анализа большого массива - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Изменение параметров макроса для анализа большого массива
fry4536s Дата: Пятница, 30.08.2013, 13:49 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
У меня есть следующий макрос
[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 - все работает отлично.
Хотел бы уточнить, возможно проблема в том, что я ищу не по массиву а по каждой ячейке? Как изменить макрос так, чтобы он
а) Искал по массиву
б) Не красил ячейку а подставлял в ячейку слева определенное слово.
Заранее спасибо
К сообщению приложен файл: upd.xlsx (14.6 Kb)


Сообщение отредактировал fry4536s - Пятница, 30.08.2013, 13:57
 
Ответить
СообщениеУ меня есть следующий макрос
[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
Дата добавления - 30.08.2013 в 13:49
SergeyKorotun Дата: Пятница, 30.08.2013, 13:57 | Сообщение № 2
Группа: Проверенные
Ранг: Обитатель
Сообщений: 301
Репутация: 15 ±
Замечаний: 0% ±

Excel 2007
Цитата (fry4536s, Пятница, 30.08.2013, 13:49 # 1)
действовать этим макросом на файл с 1 500 000 строк

Столько строк в лист не влезет.
 
Ответить
Сообщение
Цитата (fry4536s, Пятница, 30.08.2013, 13:49 # 1)
действовать этим макросом на файл с 1 500 000 строк

Столько строк в лист не влезет.

Автор - SergeyKorotun
Дата добавления - 30.08.2013 в 13:57
fry4536s Дата: Пятница, 30.08.2013, 14:16 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
"Столько строк в лист не влезет." - CSV же
 
Ответить
Сообщение"Столько строк в лист не влезет." - CSV же

Автор - fry4536s
Дата добавления - 30.08.2013 в 14:16
nilem Дата: Пятница, 30.08.2013, 14:24 | Сообщение № 4
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
может так?:
[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
[/vba]


Яндекс.Деньги 4100159601573
 
Ответить
Сообщениеможет так?:
[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
[/vba]

Автор - nilem
Дата добавления - 30.08.2013 в 14:24
fry4536s Дата: Пятница, 30.08.2013, 15:47 | Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Может так?

Выдает mismatch на For i = 1 To UBound(x)
В чем может бы проблема?


Сообщение отредактировал fry4536s - Пятница, 30.08.2013, 15:47
 
Ответить
Сообщение
Может так?

Выдает mismatch на For i = 1 To UBound(x)
В чем может бы проблема?

Автор - fry4536s
Дата добавления - 30.08.2013 в 15:47
nilem Дата: Пятница, 30.08.2013, 16:08 | Сообщение № 6
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
попробуйте еще раз. Вот ваш файлик
К сообщению приложен файл: _upd-1.xlsm (20.4 Kb)


Яндекс.Деньги 4100159601573
 
Ответить
Сообщениепопробуйте еще раз. Вот ваш файлик

Автор - nilem
Дата добавления - 30.08.2013 в 16:08
fry4536s Дата: Пятница, 30.08.2013, 16:40 | Сообщение № 7
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Отлично, работает!

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


Сообщение отредактировал fry4536s - Пятница, 30.08.2013, 16:45
 
Ответить
СообщениеОтлично, работает!

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

Автор - fry4536s
Дата добавления - 30.08.2013 в 16:40
nilem Дата: Пятница, 30.08.2013, 17:15 | Сообщение № 8
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
вот не самый быстрый вариант, но все же попробуйте
[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]


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

Сообщение отредактировал nilem - Пятница, 30.08.2013, 17:19
 
Ответить
Сообщениевот не самый быстрый вариант, но все же попробуйте
[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
Дата добавления - 30.08.2013 в 17:15
Hugo Дата: Пятница, 30.08.2013, 17:56 | Сообщение № 9
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3703
Репутация: 792 ±
Замечаний: 0% ±

365
Цитата (fry4536s, Пятница, 30.08.2013, 14:16 # 3)
CSV же

Ну и что? Если его анализировать как текст без загрузки на лист - тогда принимается. Но что как зачем там красить?
Если грузить на лист - не загрузите.


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
Сообщение
Цитата (fry4536s, Пятница, 30.08.2013, 14:16 # 3)
CSV же

Ну и что? Если его анализировать как текст без загрузки на лист - тогда принимается. Но что как зачем там красить?
Если грузить на лист - не загрузите.

Автор - Hugo
Дата добавления - 30.08.2013 в 17:56
fry4536s Дата: Четверг, 05.09.2013, 21:50 | Сообщение № 10
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010

Edited: посмотрел в Яндексе - ну да, это ж рыба (до 2-х метров!

Хоть в чем то и я пригодился :D
 
Ответить
Сообщение

Edited: посмотрел в Яндексе - ну да, это ж рыба (до 2-х метров!

Хоть в чем то и я пригодился :D

Автор - fry4536s
Дата добавления - 05.09.2013 в 21:50
  • Страница 1 из 1
  • 1
Поиск:

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