Excel, VBA/Macro: как я могу удалить строки и удалить точки и тире?

Мне недавно вручили файл Excel формату - 100's строк. Изображение ниже показывает Вам состояние его. Это могло быть действительно долгим осуществлением, если я работаю через него вручную, таким образом, я задался вопросом, мог ли макрос помочь.

Мое задание к:

  1. Удалите строки, где Dot&Dot&Dash используются вместе. Затем;

  2. Пройдите список снова и удалите остающиеся символы Dots&Dash, не удаляя строки.

Я надеюсь, что это должно затем оставить мой новый форматированный список выровненным налево.

Так или иначе, если бы какой-либо из Вас может указать на меня на корректные вещи поместить в подходящий Макрос затем, он действительно ценился бы (и сохранил бы меня часы работы, поскольку я чувствую, что это не единственный лист, который они отформатировали таким образом).

This file has over 600 lines

0
задан 20.08.2011, 13:40

3 ответа

То, когда Вы удаляете строки в цикле, лучше цикл назад. Тем путем внутренний счетчик цикла не запутывается. Всегда, всегда, всегда делайте резервное копирование своих данных перед выполнением кода из Интернета, который удаляет материал.

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
3
ответ дан 24.11.2019, 03:39

Вместо макроса Вы могли:

  1. используйте функцию вида
  2. уничтожьте Ваш..-строки
  3. использование Находит/Заменяет на ".-" (ни с чем как заменяющая опция), и затем
  4. обратитесь свои данные.

Это является немного более трудоемким, чем макрос, но это - альтернатива так или иначе. решение dkusleika похоже на него, должен работать.

1
ответ дан 24.11.2019, 03:39

Это - то, как я управлял бы этим:

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
0
ответ дан 24.11.2019, 03:39

Теги

Похожие вопросы