Мне недавно вручили файл Excel формату - 100's строк. Изображение ниже показывает Вам состояние его. Это могло быть действительно долгим осуществлением, если я работаю через него вручную, таким образом, я задался вопросом, мог ли макрос помочь.
Мое задание к:
Удалите строки, где Dot&Dot&Dash используются вместе. Затем;
Пройдите список снова и удалите остающиеся символы Dots&Dash, не удаляя строки.
Я надеюсь, что это должно затем оставить мой новый форматированный список выровненным налево.
Так или иначе, если бы какой-либо из Вас может указать на меня на корректные вещи поместить в подходящий Макрос затем, он действительно ценился бы (и сохранил бы меня часы работы, поскольку я чувствую, что это не единственный лист, который они отформатировали таким образом).
То, когда Вы удаляете строки в цикле, лучше цикл назад. Тем путем внутренний счетчик цикла не запутывается. Всегда, всегда, всегда делайте резервное копирование своих данных перед выполнением кода из Интернета, который удаляет материал.
Sub DeleteRows()
Dim i As Long
Dim rng As Range
Set rng = Intersect(ActiveSheet.UsedRange, ActiveSheet.Columns(1))
For i = rng.Count To 1 Step -1
If rng.Cells(i).Value Like "..-*" Then
rng.Cells(i).EntireRow.Delete
ElseIf rng.Cells(i).Value Like ".-*" Then
rng.Cells(i).Value = Replace(rng.Cells(i).Value, ".-", "", 1, 1)
End If
Next i
End Sub
Вместо макроса Вы могли:
Это является немного более трудоемким, чем макрос, но это - альтернатива так или иначе. решение dkusleika похоже на него, должен работать.
Это - то, как я управлял бы этим:
For Each Cell In ActiveSheet.Range("A:A")
If Left(Cell.Value, 3) = "..-" Then
Cell.EntireRow.Delete
ElseIf Left(Cell.Value, 2) = ".-" Then
Cell.Value = Right(Cell.Value, (Len(Cell.Value) - 2))
End If
Next
Единственная проблема состоит в том, что этому не удается видеть строку после удаления, таким образом, может быть лучше сделать что-то как следующее:
For Each Cell In ActiveSheet.Range("A:A")
If Left(Cell.Value, 3) = "..-" Then
Cell.EntireRow.Delete
ElseIf Cell.Value = "" Then
Exit For
End If
Next
For Each Cell In ActiveSheet.Range("A:A")
If Left(Cell.Value, 2) = ".-" Then
Cell.Value = Right(Cell.Value, (Len(Cell.Value) - 2))
ElseIf Left(Cell.Value, 1) = "-" Then
Cell.Value = Right(Cell.Value, (Len(Cell.Value) - 1))
ElseIf Cell.Value = "" Then
Exit For
End If
Next
Вы заканчиваете тем, что выполнили итерации по пакету ячеек дважды, но он на самом деле ловит все...
Если необходимо выровнять конкретный столбец, то попробуйте
With ActiveSheet.Columns("A")
.HorizontalAlignment = xlLeft
End With