Здравствуйте, есть пример, в нем нужно удалить все, что отмечено желтым 1) удалить все цифры в столбце A (с тире) 2) удалить все цифры в столбце A (со словами) 3) удалить все цифры в столбце A (с тире и со словами) удалить ячейки с такими данными
Sub dddd()
Dim ячейка As Range
For Each ячейка In Range("a1:a15")
If ячейка Like "*[а-я]*" Or ячейка Like "*-*" Or ячейка Like "*[a-z]*" Then ячейка = ""
Next ячейка
End Sub
Да тут всё проще: проверяем - число в ячейке или нет:
Код
Sub qqq()
Dim LastRow As Long, i As Long
LastRow = Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To LastRow
If Not IsNumeric(Cells(i, 1)) Then Cells(i, 1) = ""
Next
End Sub
еще вариант,кнопка test,для повтора скопировать данные с соседнего листа
Код
Sub test()
Dim z, i&: z = Range("A2:A" & Range("A" & Rows.Count).End(xlUp).Row).Value
With CreateObject("VBScript.RegExp"): .Pattern = "[-a-zа-яё]+": .IgnoreCase = True
For i = 1 To UBound(z)
If .test(z(i, 1)) Then Range("A" & i + 1 )= ""
Next
End With
End Sub
вот удаление строки, для удаление ячейки тогда нужно знать в какую сторону смещение
Код
Sub dddd()
Dim ячейка As Range
For Each ячейка In Range("a1:a15")
If ячейка Like "*[а-я]*" Or ячейка Like "*-*" Or ячейка Like "*[a-z]*" Then Rows(ячейка.Row).Delete
Next ячейка
End Sub
у меня простая версия Экселя, в ней нет кнопки "Прочитать мысли и сгенерировать файл пример"
Как вариант, удаляет все, что где есть знаки, отличающиеся от чисел, точки или запятой
Код
Sub tt()
Dim arr(), i As Long
arr = Range("A2:A" & Cells(Rows.Count, 1).End(xlUp).Row)
With CreateObject("VBScript.Regexp")
.Pattern = "[^\d\.,]"
For i = 1 To UBound(arr)
If .test(arr(i, 1)) Then arr(i, 1) = ""
Next
End With
Range("A2:A" & Cells(Rows.Count, 1).End(xlUp).Row) = arr
End Sub
Я не знал, что нужно для макроса: полагал, что про формулы разговор. Если Н/Д появляется после работы макроса, то ищите, где (из-за чего) эта самая ошибка возникает и не допускайте её.
Юрий М написал: Если Н/Д появляется после работы макроса
пока не понял какая причина дописал так, он по всему листу удаляет ActiveSheet.UsedRange.Replace "#N/A", "" а мне надо только J столбец
Код
Sub RazvertUgolov()
Dim b(), i&, j&
With Range("J2:J5000" & Cells(2, 1).End(xlDown))
a = .Value
For i = UBound(a, 1) To 1 Step -1
If Not IsEmpty(a(i, 1)) Then S = Split(a(i, 1), "-"): Exit For
Next
ReDim b(1 To S(UBound(S)), 1 To 1)
j = 1
For i = 1 To UBound(a, 1)
If IsEmpty(a(i, 1)) Then Exit For
S = Split(a(i, 1), "-")
If UBound(S) > 0 Then
For k = S(0) To S(1)
b(j, 1) = k
j = j + 1
Next
Else
b(j, 1) = S(0)
j = j + 1
End If
Next
.Cells(1).Resize(j) = b
End With
ActiveSheet.UsedRange.Replace "#N/A", ""
End Sub
Правильно удаляет: Вы же сами указываете диапазон для обработки - активный лист. Укажите конкретно: например, range("J2:J100"). А вообще, это неправильно - устранять следствие, а не причину.
Так попробуйте найти: пройдите процедуру пошагово (F8) или поставьте точку останова на той строке кода, на которой происходит эта ошибка и проанализируйте состояние переменных.