一列搜索/替换影响整个工作表

时间:2019-01-19 22:06:50

标签: excel search replace wildcard

在L列中(仅),我想用“ True”替换任何数据实例,而不管任何L列单元格中的原始内容如何。我尝试的代码是:

With ActiveSheet
  intLastRow = .Cells(.Rows.Count, "A").End(xlUp).Row

Let strSelectRange = "L2" & ":" & "L" & intLastRow
  Range(strSelectRange).Select

Cells.Replace What:="*", Replacement:="True", LookAt:=xlPart _
  , SearchOrder:=xlByColumns, MatchCase:=False, SearchFormat:=False, _
  ReplaceFormat:=False

End With

首先,我使用.Rows.Count,“ A”,因为在该列中每一行都有数据,因此我知道L列中有多少行。在L列中,许多单元格将为空白。

运行此命令时,整个工作表中所有包含所有内容的单元都将更改为True,而不仅仅是L列中的数据。

我尝试过的另一种方法是:

Range("L2:L1200").Select
Selection.Replace What:="*", Replacement:="True", LookAt:=xlPart, _
    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
    ReplaceFormat:=False
Range("A1").Select

我对此不满意的是,我选择L1200作为行数,以确保搜索的范围比实际可以包含数据的最后一行的距离还要远。我担心这种方法有时会引起某种问题。

我真正想知道的是在第一个代码示例中我做错了。

感谢您可以提供的任何帮助!

2 个答案:

答案 0 :(得分:1)

Range(strSelectRange).Select

选择一个范围(虽然最好是avoid Select),但是您的代码对该选择不执行任何操作,因为Cells是整个工作表。

也许您想要代替:

  Range(strSelectRange).Replace What:="*", Replacement:="True", LookAt:=xlPart

答案 1 :(得分:1)

在列中搜索并替换

  • 始终使用Option Explicit,以更快地了解发生的情况 错误并被迫声明变量。
  • 您应始终将行声明为Long。
  • 当您使用With语句时,您会在所有内容上使用点,甚至 在.Range和.Cells等上。在这种情况下,代码可能会起作用 (ActiveSheet),但这是不正确的。
  • 避免使用ActiveSheet,请使用工作表名称。
  • 避免使用Select。关于这个有很多帖子(文章)。
  • 每当您使用没有任何内容的Cells时,它指的是所有 工作表中的单元格。
  • Replace函数(Find函数)的第一件事是范围 您将要替换的位置(查找,搜索)。它可以是一列 可以是Cell或较小的范围。

代码

Sub SROneColumn()

    Const cVntLRColumn As Variant = "A"  ' Last Row Column Letter/Number
    Const cVntCriteria As Variant = "L"  ' Criteria Column Letter/Number
    Const cLngFirstRow As Long = 2       ' First Row Number
    Const cStrReplace As String = "True" ' Replace String

    Dim lngLastRow As Long        ' Last Row Number
    Dim strSelectRange As String  ' Select Range Address

    With ActiveSheet
        lngLastRow = .Cells(.Rows.Count, cVntLRColumn).End(xlUp).Row
        strSelectRange = .Range(.Cells(cLngFirstRow, cVntCriteria), _
                .Cells(lngLastRow, cVntCriteria)).Address
        .Range(strSelectRange).Replace What:="*", Replacement:=cStrReplace, _
                LookAt:=xlPart, SearchOrder:=xlByColumns, MatchCase:=False
    End With

End Sub

使用工作表而不使用对象变量的一种有趣方式:

Sub SRSheet()

    Const cStrSheet As Variant = "Sheet1"   ' Worksheet Name/Index

    With ThisWorkbook.Worksheets(cStrSheet)


    End With

End Sub