Я обрабатываю большой массив данных, приводя его к форме для дальнейшей работы. Мне надо убрать ячейки, содержащие инфу, которая не нужна. То есть найти ячейку с ненужным словом, опустошить ее (сделать пустой), и далее все ячейки (которые ниже опустошенной) сдвинуть вверх на одну ячейку. Эта задача прекрасно решена в предыдущем топике.
При обработке массива данных у меня возникли вопросы -
1. Возможен ли за один проход макроса найти и опустошить ячейки с РАЗНЫМИ словам ? Мне не нужны слова "автомобиль" и "метла".
[vba]
Код
Sub vvv() Dim r As Range For Each r In Selection If r.Value = "Автомобиль" Then r.Delete Shift:=xlUp ElseIf Len(r) = 1 Then r.Value = "'0" & r.Value 'на эту строку не обращайте внимания, пусть будет. End If Next End Sub
[/vba]
Можно ли както вставить в код еще одно (два-три) "ненужных" слова для поиска и опустошения (ту же "метлу") ?
2. Можно ли искать слово (словА) по нескольким начальным знакам этиХ слов ? Например - у меня есть слова "автомобиль" (повтор в массиве более 50 раз), слово "автомойка" (повтор более 20 раз), и слово "авторота" (повтор более 10 раз). Можно ли включить в код префикс для них "авто" (или "авт", или "ав") для поиска и опустошения этих ячеек ?
[vba]
Код
Sub vvv() Dim r As Range For Each r In Selection If r.Value = "Автомобиль" Then r.Delete Shift:=xlUp ElseIf Len(r) = 1 Then r.Value = "'0" & r.Value End If Next End Sub
[/vba]
И сюда же - также имею ненужные слова, типа 6112, 6115, 6124, ...6198. Ячеек с подобными слова почти 100 штук. Повторяются они только один раз. Можно ли както вставить в код префикс "61" для опустошения ячеек с этими словами (6112, 6115, 6124, ...6198) ?
3. Пр копировании инфы из WWW в Ехель - в Ехель попал знак, который копипастом я не могу запостить сюда, а также не могу вставить в редактор VBA, и даже в Блокнот. Смотри пикчу во вложении - там этот знак. Возможно это знак ASC, который вводится через Alt+(три цифры с правой стороны клавиатуры). Как такой знак прописать на обнаружение и опустошение ? А знака этого у меня много.
[vba]
Код
Sub vvv() Dim r As Range For Each r In Selection If r.Value = "Автомобиль" Then r.Delete Shift:=xlUp ElseIf Len(r) = 1 Then r.Value = "'0" & r.Value End If Next End Sub
Я обрабатываю большой массив данных, приводя его к форме для дальнейшей работы. Мне надо убрать ячейки, содержащие инфу, которая не нужна. То есть найти ячейку с ненужным словом, опустошить ее (сделать пустой), и далее все ячейки (которые ниже опустошенной) сдвинуть вверх на одну ячейку. Эта задача прекрасно решена в предыдущем топике.
При обработке массива данных у меня возникли вопросы -
1. Возможен ли за один проход макроса найти и опустошить ячейки с РАЗНЫМИ словам ? Мне не нужны слова "автомобиль" и "метла".
[vba]
Код
Sub vvv() Dim r As Range For Each r In Selection If r.Value = "Автомобиль" Then r.Delete Shift:=xlUp ElseIf Len(r) = 1 Then r.Value = "'0" & r.Value 'на эту строку не обращайте внимания, пусть будет. End If Next End Sub
[/vba]
Можно ли както вставить в код еще одно (два-три) "ненужных" слова для поиска и опустошения (ту же "метлу") ?
2. Можно ли искать слово (словА) по нескольким начальным знакам этиХ слов ? Например - у меня есть слова "автомобиль" (повтор в массиве более 50 раз), слово "автомойка" (повтор более 20 раз), и слово "авторота" (повтор более 10 раз). Можно ли включить в код префикс для них "авто" (или "авт", или "ав") для поиска и опустошения этих ячеек ?
[vba]
Код
Sub vvv() Dim r As Range For Each r In Selection If r.Value = "Автомобиль" Then r.Delete Shift:=xlUp ElseIf Len(r) = 1 Then r.Value = "'0" & r.Value End If Next End Sub
[/vba]
И сюда же - также имею ненужные слова, типа 6112, 6115, 6124, ...6198. Ячеек с подобными слова почти 100 штук. Повторяются они только один раз. Можно ли както вставить в код префикс "61" для опустошения ячеек с этими словами (6112, 6115, 6124, ...6198) ?
3. Пр копировании инфы из WWW в Ехель - в Ехель попал знак, который копипастом я не могу запостить сюда, а также не могу вставить в редактор VBA, и даже в Блокнот. Смотри пикчу во вложении - там этот знак. Возможно это знак ASC, который вводится через Alt+(три цифры с правой стороны клавиатуры). Как такой знак прописать на обнаружение и опустошение ? А знака этого у меня много.
[vba]
Код
Sub vvv() Dim r As Range For Each r In Selection If r.Value = "Автомобиль" Then r.Delete Shift:=xlUp ElseIf Len(r) = 1 Then r.Value = "'0" & r.Value End If Next End Sub
Sub vvv() Dim v As Variant On Error Resume Next With Selection For Each v In Array("авто*", "Метла", "61??", ChrW(157)) .Replace v, "=xfd1", xlWhole, searchformat:=False Intersect([xfd1].Dependents, .Cells).Delete xlUp Next End With End Sub
для начала нужно выделить ячейку с этим символом, в VBE в окно Immediate(если его нету, нажать Ctrl+G для отобраения) ввести ?ascw(selection) и нажать Enter Полученное число вставить в функцию ChwW() вместо 157
[vba]
Код
Sub vvv() Dim v As Variant On Error Resume Next With Selection For Each v In Array("авто*", "Метла", "61??", ChrW(157)) .Replace v, "=xfd1", xlWhole, searchformat:=False Intersect([xfd1].Dependents, .Cells).Delete xlUp Next End With End Sub
для начала нужно выделить ячейку с этим символом, в VBE в окно Immediate(если его нету, нажать Ctrl+G для отобраения) ввести ?ascw(selection) и нажать Enter Полученное число вставить в функцию ChwW() вместо 157krosav4ig
Valeriy22, может быть легче указать условие что нужно оставить? Повторюсь, файл-пример в excel поможет лучше понять Вашу задачу, и предложить оптимальный вариант. Например, так останутся даты и числа: [vba]
Код
If (Not IsNumeric(r) And Not IsDate(r)) Or IsEmpty(r) Then r.Delete Shift:=xlUp
[/vba] Плюс ко всему, когда удаляете ячейки/строки/столбцы, итерацию всегда нужно начинать с конца, иначе можете получить не корректный результат. [vba]
Код
Dim r As Range, i As Long For i = Selection.Count To 1 Step -1 Set r = Selection(i) If (Not IsNumeric(r) And Not IsDate(r)) Or IsEmpty(r) Then r.Delete Shift:=xlUp Next i
[/vba]
Valeriy22, может быть легче указать условие что нужно оставить? Повторюсь, файл-пример в excel поможет лучше понять Вашу задачу, и предложить оптимальный вариант. Например, так останутся даты и числа: [vba]
Код
If (Not IsNumeric(r) And Not IsDate(r)) Or IsEmpty(r) Then r.Delete Shift:=xlUp
[/vba] Плюс ко всему, когда удаляете ячейки/строки/столбцы, итерацию всегда нужно начинать с конца, иначе можете получить не корректный результат. [vba]
Код
Dim r As Range, i As Long For i = Selection.Count To 1 Step -1 Set r = Selection(i) If (Not IsNumeric(r) And Not IsDate(r)) Or IsEmpty(r) Then r.Delete Shift:=xlUp Next i