VBA查找并替换跳过某些单元格

时间:2014-05-12 09:56:16

标签: excel-vba replace vba excel

我有一些代码在给定的列中找到空白并用" BLANK"替换它们,这在过去运行良好,适用于我正在查看的所有工作表。

在'米中'表格整个列是空白的,但查找和替换填充空白的所有条6,没有明显的图案,如下所示。我希望这可能是我周一早上的另一个用户故障'错误,但会欣赏任何洞察力。

我知道这在循环中会更好,一旦我解决了它遗漏了一些空白的问题,我会写一下。

干杯

Public Function FILL_blanks() '''' this searches for blanks 
'in the columns in the raw data we are interested in and replaces 
'them with BLANK there is a value assigned to BLANK in the flag matrix.

Dim LastRow_g As Long '''' HYDRANT, NODE ---->CHANGES LENGTH FOR EACH ASSET
Dim LastRow_j As Long ''''
Dim LastRow_bp As Long ''''
Dim WS_Count As Integer
Dim i As Integer

WS_Count = ActiveWorkbook.Worksheets.Count

For i = 1 To WS_Count
    If ActiveWorkbook.Worksheets(i).Name = "hydrant" Then
        Worksheets(i).Select 
        Range("g4").Select ' this will change j/g/bp only 
        LastRow_g = Range("g" & Rows.Count).End(xlUp).Row 'define the last row as all of the rows in DMA flag column
        Range("r4:r" & LastRow_g).Select

        'find and replace below
        Selection.Replace What:="", Replacement:="BLANK", LookAt:=xlPart, _
            SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
            ReplaceFormat:=False

    ElseIf ActiveWorkbook.Worksheets(i).Name = "meter" Then

        Worksheets(i).Select
        Range("j4").Select 
        LastRow_j = Range("j" & Rows.Count).End(xlUp).Row 'define the last row 
        Range("y4:y" & LastRow_j).Select 

        'find and replace below
        Selection.Replace What:="", Replacement:="BLANK", LookAt:=xlPart, _
            SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
            ReplaceFormat:=False

2 个答案:

答案 0 :(得分:0)

我会在Sub使用Function而不是Option Explicit Sub FillBlanks2() '''' this searches for blanks Dim LastRow As Long '''' HYDRANT, NODE ---->CHANGES LENGTH FOR EACH ASSET Dim Sheet As Worksheet Dim TargetRange As Range 'loop through worksheets in this workbook For Each Sheet In ThisWorkbook.Worksheets If Sheet.Name = "hydrant" Then '<~ concerned with col G on hydrant sheet With Sheet LastRow = .Range("G" & .Rows.Count).End(xlUp).Row Set TargetRange = .Range(.Cells(4, 7), .Cells(LastRow, 7)) End With 'apply replacement to the target range TargetRange.Replace What:="", Replacement:="BLANK", LookAt:=xlWhole, SearchOrder:=xlByRows ElseIf Sheet.Name = "meter" Then '<~ concerned with col J on hydrant sheet With Sheet LastRow = .Range("J" & .Rows.Count).End(xlUp).Row Set TargetRange = .Range(.Cells(4, 10), .Cells(LastRow, 10)) End With 'apply replacement to the target range TargetRange.Replace What:="", Replacement:="BLANK", LookAt:=xlWhole, SearchOrder:=xlByRows End If Next Sheet End Sub ,因为它似乎不是回报。此代码替换上面指定的列中的空白单元格:

{{1}}

答案 1 :(得分:0)

我调整了Dan Wagner的代码来解释显示为空白但实际上有空格的单元格。如果单元格可能只包含空格或一个空格,则可以使用“”和“”。

但是,我确信有一个更优雅的解决方案可以解决所有空白问题。 SpecialCells(xlCellTypeBlanks)是一种可能性,但它似乎仅限于一定数量的行。

    Sub FILL_blanks() '''' this searches for blanks

Dim LastRow As Long '''' HYDRANT, NODE ---->CHANGES LENGTH FOR EACH ASSET
Dim Sheet As Worksheet
Dim TargetRange As Range

    Sheets("Sheet1").Select
            LastRow = Range("a" & Rows.Count).End(xlUp).Row
            Set TargetRange = Range("b4:b" & LastRow)

            'apply replacement to the target range
            '"" accounts for true blank cells (no spaces)
            ' "*" is a wildcard and accounts for one or more spaces

        TargetRange.Replace What:="", replacement:="BLANK", LookAt:=xlWhole, SearchOrder:=xlByRows
        TargetRange.Replace What:=" ", replacement:="BLANK", LookAt:=xlWhole, SearchOrder:=xlByRows

End Sub

再次感谢您的协助