Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 在影响整个工作表的一列中搜索/替换_Excel_Search_Replace_Wildcard - Fatal编程技术网

Excel 在影响整个工作表的一列中搜索/替换

Excel 在影响整个工作表的一列中搜索/替换,excel,search,replace,wildcard,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:="*", Replace

在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
Range("L2:L1200").Select
Selection.Replace What:="*", Replacement:="True", LookAt:=xlPart, _
    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
    ReplaceFormat:=False
Range("A1").Select
首先,我使用了.Rows.Count,“A”,因为在该列中,每一行都有数据,所以我知道在L列中要向下移动多少行。在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
Range("L2:L1200").Select
Selection.Replace What:="*", Replacement:="True", LookAt:=xlPart, _
    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
    ReplaceFormat:=False
Range("A1").Select
我不喜欢的是,我选择了L1200作为行数,只是为了确保搜索的距离比实际的最后一行(可以包含数据)更远。我担心这种方法可能会在某个时候引起某种问题

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

谢谢你的帮助

Range(strSelectRange).Select
选择一个范围(虽然最好选择),但您的代码不会对该选择执行任何操作,因为
单元格
是整个工作表

也许你想要:

  Range(strSelectRange).Replace What:="*", Replacement:="True", LookAt:=xlPart
在列中搜索并替换
  • 始终使用选项Explicit,以更快地了解发生的错误 错误和将被强制声明变量
  • 您应该始终将行声明为长
  • 当你用With语句时,你在每件事上都用点,甚至 在.Range和.Cells等上。在这种情况下,代码可能会起作用 (ActiveSheet)无论如何,但它是不正确的
  • 避免使用ActiveSheet,请使用工作表名称
  • 避免使用Select。有很多关于这个的帖子(文章)
  • 当你使用没有任何东西的单元格时,它指的是所有的 工作表中的单元格
  • 替换函数(查找函数)中的第一件事是范围 要替换的位置(查找、搜索)。它可以是一个列,也可以是 可以是单元格,也可以是较小的范围
代码 使用工作表而不使用对象变量的一种有趣方式:

Sub SRSheet()

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

    With ThisWorkbook.Worksheets(cStrSheet)


    End With

End Sub

始终限定您的范围,而不是只写
单元格
。这将导致意外的结果和错误。此外,在ExcelThank中需要选择方法的情况也非常罕见。这确实有效,但我认为最好使用VBASIC28的方法,因为每个人都建议我避免使用Select。我特别喜欢这个解决方案,因为它是对所问问题的一个非常直接的回答。我很感激!我花了一段时间才弄明白这到底是怎么回事。这是一种比我习惯的更“复杂”的编码方式,因为我对它相当陌生。它确实工作得很好,我修改了文件中类似的其他代码,以反映这种方法,并避免选择。我也采纳了你的建议,参考了具体的工作表而不是活动表。谢谢你的帮助!非常感谢。