Я пытаюсь найти значения ячеек в столбце 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
Вход
Желаемый результат
В вашем коде две ошибки:
IsNumeric
весь столбец E до строки, над которой вы сейчас работаете. Но несколько ячеек не имеют числового значения.Должен быть
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
я тоже пробовал shift:=xlup но не повезло
Именно i+1
в вашем коде заставляет вставлять строку под ячейкой. Уберите +1
.
Немного другой подход, когда вставка происходит в конце:
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
я пробовал это, но не уверен, почему это не работает, я еще раз проверю и обновлю
он работает как задумано
Спасибо, это работает, но вставка строки ниже значения ячейки, которая не имеет "." , можно ли вставить его над значением ячейки, в котором нет точки, как описано в выходном изображении