Как вставить пустую строку на основе значения ячейки

Я пытаюсь найти значения ячеек в столбце C и вставить пустую строку прямо над ячейкой, если она не содержит точки (".").

Я попробовал следующий макрос:

Sub testing()
    Dim col As Variant
    Dim lr As Long
    Dim i As Long
    Dim startRow As Long

    col = "C"
    startRow = 2
    lr = Cells(Rows.Count, col).End(xlUp).Row

    With ActiveSheet
        For i = lr To startRow Step -1
            If IsNumeric(Range("E2", "E" & lr).Value) = True Then
                .Cells(i + 1, col).EntireRow.Insert shift:=xlUp
            End If
        Next i
    End With
End Sub

Вход

Как вставить пустую строку на основе значения ячейки

Желаемый результат

Как вставить пустую строку на основе значения ячейки

Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
1
0
48
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

В вашем коде две ошибки:

  1. Вы проверяете IsNumeric весь столбец E до строки, над которой вы сейчас работаете. Но несколько ячеек не имеют числового значения.
  2. Вы вставляете строки под ячейками, содержащими точку. Вы хотите вставить строки над ячейками, которые не содержат точек.

Должен быть

Sub testing()
    Dim col As String
    Dim i As Long
    Dim startRow As Long
    Dim lastRow As Long
    
    col = "C"
    startRow = 2
    lastRow = Cells(Rows.Count, col).End(xlUp).Row
    
    With ActiveSheet
        For i = lastRow To startRow Step -1
            If IsNumeric(Range("E" & i).Value) = False Then
                .Cells(i, col).EntireRow.Insert shift:=xlDown
            End If
        Next i
    End With
End Sub

Вы даже можете отказаться от столбца E, так как VBA содержит функцию с именем InStr, которая ищет символы или строки внутри другой строки, например:

If InStr(Range("C" & i).Value, ".") = 0 Then
    ' ...
End If

Спасибо, это работает, но вставка строки ниже значения ячейки, которая не имеет "." , можно ли вставить его над значением ячейки, в котором нет точки, как описано в выходном изображении

Rahul Vaidya 22.03.2022 17:50

я тоже пробовал shift:=xlup но не повезло

Rahul Vaidya 22.03.2022 17:51

Именно i+1 в вашем коде заставляет вставлять строку под ячейкой. Уберите +1.

Iziminza 22.03.2022 17:52
Ответ принят как подходящий

Немного другой подход, когда вставка происходит в конце:

Sub Tester()

    Dim c As Range, rng As Range, ws As Worksheet, v
    
    Set ws = ActiveSheet
    
    For Each c In ws.Range("C2:C" & ws.Cells(Rows.Count, "C").End(xlUp).Row).Cells
        v = c.Value
        If InStr(v, ".") = 0 And Len(v) > 0 Then    'has a value, with no "." ?
            If rng Is Nothing Then                  'any previous cells found?
                Set rng = c                         'start the range with `c`
            Else
                Set rng = Application.Union(c, rng) 'add `c` to `rng`
            End If
        End If
    Next c
    'if found any cells then do the insert
    If Not rng Is Nothing Then rng.EntireRow.Insert shift:=xlDown
End Sub

я пробовал это, но не уверен, почему это не работает, я еще раз проверю и обновлю

Rahul Vaidya 22.03.2022 17:44

он работает как задумано

Rahul Vaidya 22.03.2022 17:55

Другие вопросы по теме