Всем привет. Есть макрос. Он удаляет значения из определенной ячейки. Но проблема в том, что он не удаляет например такое значения как 100% или 0%. Мне это очень важно, т.к. в процессе работы в моей таблице встречаются %. Еще когда макрос удаляет, значения ячейки "перескакивают". Мне надо чтобы значения, которые мы оставляем находились на своем месте. Вот такая возникла проблемка. [vba]
Код
Sub Del_SubStr() Dim sSubStr As String 'искомое слово или фраза(может быть указанием на ячейку) Dim lCol As Long 'номер столбца с просматриваемыми значениями Dim lLastRow As Long, li As Long Dim lMet As Long Dim arr
sSubStr = InputBox("Укажите значение, которое необходимо найти в строке", "Запрос параметра", "") If sSubStr = "" Then lMet = 0 Else lMet = 1 lCol = Val(InputBox("Укажите номер столбца, в котором искать указанное значение", "Запрос параметра", 1)) If lCol = 0 Then Exit Sub
lLastRow = ActiveSheet.UsedRange.Row - 1 + ActiveSheet.UsedRange.Rows.Count arr = Cells(1, lCol).Resize(lLastRow).Value Application.ScreenUpdating = 0 Dim rr As Range For li = 1 To lLastRow If -(InStr(arr(li, 1), sSubStr) > 0) = lMet Then If rr Is Nothing Then Set rr = Cells(li, 1) Else Set rr = Union(rr, Cells(li, 1)) End If End If Next li If Not rr Is Nothing Then rr.EntireRow.Delete Application.ScreenUpdating = 1 End Sub
[/vba]
Всем привет. Есть макрос. Он удаляет значения из определенной ячейки. Но проблема в том, что он не удаляет например такое значения как 100% или 0%. Мне это очень важно, т.к. в процессе работы в моей таблице встречаются %. Еще когда макрос удаляет, значения ячейки "перескакивают". Мне надо чтобы значения, которые мы оставляем находились на своем месте. Вот такая возникла проблемка. [vba]
Код
Sub Del_SubStr() Dim sSubStr As String 'искомое слово или фраза(может быть указанием на ячейку) Dim lCol As Long 'номер столбца с просматриваемыми значениями Dim lLastRow As Long, li As Long Dim lMet As Long Dim arr
sSubStr = InputBox("Укажите значение, которое необходимо найти в строке", "Запрос параметра", "") If sSubStr = "" Then lMet = 0 Else lMet = 1 lCol = Val(InputBox("Укажите номер столбца, в котором искать указанное значение", "Запрос параметра", 1)) If lCol = 0 Then Exit Sub
lLastRow = ActiveSheet.UsedRange.Row - 1 + ActiveSheet.UsedRange.Rows.Count arr = Cells(1, lCol).Resize(lLastRow).Value Application.ScreenUpdating = 0 Dim rr As Range For li = 1 To lLastRow If -(InStr(arr(li, 1), sSubStr) > 0) = lMet Then If rr Is Nothing Then Set rr = Cells(li, 1) Else Set rr = Union(rr, Cells(li, 1)) End If End If Next li If Not rr Is Nothing Then rr.EntireRow.Delete Application.ScreenUpdating = 1 End Sub
он не удаляет например такое значения как 100% или 0%
Так строковое значение "30%" и число 0.3 в процентном формате — это разные значения. Если у Вас на листе первое, Вы задаёте второе или наоборот, естественно, находить не будет. И вообще макрос написан как-то странно... Зачем сравнивать значение типа Long с выражением, заведомо возвращающим значение типа Boolean? Зачем вычислять номер последней заполненной строки через UsedRange, а потом всё равно перебирать с первой строки? И что мешает искать значение методом Find? Что он вообще должен делать? Марк, сделайте пример с двумя листами — на одном то, что есть, а на другом — заданные параметры и то, что должно получиться в итоге, так будет проще.
он не удаляет например такое значения как 100% или 0%
Так строковое значение "30%" и число 0.3 в процентном формате — это разные значения. Если у Вас на листе первое, Вы задаёте второе или наоборот, естественно, находить не будет. И вообще макрос написан как-то странно... Зачем сравнивать значение типа Long с выражением, заведомо возвращающим значение типа Boolean? Зачем вычислять номер последней заполненной строки через UsedRange, а потом всё равно перебирать с первой строки? И что мешает искать значение методом Find? Что он вообще должен делать? Марк, сделайте пример с двумя листами — на одном то, что есть, а на другом — заданные параметры и то, что должно получиться в итоге, так будет проще.StoTisteg
Интуитивно понятный код - это когда интуитивно понятно, что это код.
Сообщение отредактировал StoTisteg - Суббота, 16.04.2016, 13:31
StoTisteg, макрос я нашел на просторах рунета. Я не понимаю, что там в кодах не так. Я провизор, работаю в фарм.компании занимаюсь мониторингом. Аптек много. И вот надо найти способ как избавиться от 0% и 100%. Ручками через фильтр муторно, хочется процесс автоматизировать. Вот и попросил помощи на форуме.
StoTisteg, макрос я нашел на просторах рунета. Я не понимаю, что там в кодах не так. Я провизор, работаю в фарм.компании занимаюсь мониторингом. Аптек много. И вот надо найти способ как избавиться от 0% и 100%. Ручками через фильтр муторно, хочется процесс автоматизировать. Вот и попросил помощи на форуме.Mark1976
Sub clearRows() For i = 3 To Cells(Rows.Count, "a").End(xlUp).Row If Round(Cells(i, "f"), 2) = 0 Or Round(Abs(Cells(i, "f")), 2) = 1 Then Cells(i, "f").ClearContents Next i End Sub
[/vba] макрос на кнопку повесила
Mark1976, вот так подойдет? [vba]
Код
Sub clearRows() For i = 3 To Cells(Rows.Count, "a").End(xlUp).Row If Round(Cells(i, "f"), 2) = 0 Or Round(Abs(Cells(i, "f")), 2) = 1 Then Cells(i, "f").ClearContents Next i End Sub