简体   繁体   中英

Clearing Cell Values of a table if matching criteria

I am looking to sort through a specific range of cells and look to see if the LEN(gth) of that cell is equal to 20. If it is, I would like to clear the contents of said cell and move to the next until they are all evaluated.

I have this report that is pulled from a website and exported to excel and the annoyance is a 0.0% that shows up as pound signs (# x's 20). I've tried other macros that search for strings, it completely ignores 0%, the one constant is that each cell that this appears in is exactly 20 characters in length.

What should happen is that I am:

1  Searching C3:U20 
2  for cell.len = 20 
3  if activecell = matches criteria 
4  then clear.contents
5  Goto 1 until all activecells with a len of 20 are cleared

Thank you for any assistance you can provide.

G

* EDIT * Since I couldn't make that work, I used a "work around". It's inefficient as all blarp but since it's only used on a small table it doesn't really matter. I just have to do this in "three" seperate scripts. I found that if I converted the ranges from Percentage formatting to General, I could just look for the overflow number as a string. Then once they are "cleared" I just reconvert those columns to a percentage formatting:

Sub sub_ConvertToGeneral()
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''''  Convert the Percentage Columns to General Format
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

    Columns("F:F").Select
    'Application.FormulaBarHeight = 2
    Range("F:F,H:H,L:M,O:O,S:S,U:U").Select
    Range("U1").Activate
    Selection.NumberFormat = "General"
    'Selection.NumberFormat = "0.00%"
    Range("A1:B1").Select
End Sub

Sub sub_Overflow()
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''''  Find Overflow and delete every instance of it
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

    Dim FindString As String
    Dim rng As Range
    FindString = "2.6965E+308"
50
    If Trim(FindString) <> "" Then
        With Sheets("Main Import").Range("C1:U20")
            Set rng = .Find(What:=FindString, _
                            After:=.Cells(.Cells.Count), _
                            LookIn:=xlValues, _
                            LookAt:=xlWhole, _
                            SearchOrder:=xlByRows, _
                            SearchDirection:=xlNext, _
                            MatchCase:=False)
            If Not rng Is Nothing Then
                Application.Goto rng, True
                ActiveCell.ClearContents
                Do
                Set rng = .FindNext(rng)
                GoTo 50
                Loop While Not rng Is Nothing
                Else
            End If
        End With
    End If
    Range("A1").Select
End Sub

Sub sub_ConvertToPercentage()
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''''  Convert the General Columns to Percentage
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

    Columns("F:F").Select
    'Application.FormulaBarHeight = 2
    Range("F:F,H:H,L:L,O:O,S:S,U:U").Select
    Range("U1").Activate
    'Selection.NumberFormat = "General"
    Selection.NumberFormat = "0.00%"
    Range("A1:B1").Select
End Sub

If the cells to be cleared actually contain exactly 20 characters (So LEN(A1) would display 20), then Select the cells you want to examine and try:

Sub dural()
    For Each r In Intersect(Selection, ActiveSheet.UsedRange)
    If Len(r.Text) = 20 Then
        r.Clear
    End If
    Next r
End Sub

EDIT#1:

This version will clear cells with a value greater than 1.0E+307:

Sub dural()
    For Each r In Intersect(Selection, ActiveSheet.UsedRange)
        If IsNumeric(r.Value) Then
            If r.Value > 1E+307 Then
                r.Clear
            End If
        End If
    Next r
End Sub

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM