Excel 在影响整个工作表的一列中搜索/替换
在L列(仅限)中,我想用“True”替换任何数据实例,而不管L列单元格中最初是什么。我尝试的代码是: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
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。我特别喜欢这个解决方案,因为它是对所问问题的一个非常直接的回答。我很感激!我花了一段时间才弄明白这到底是怎么回事。这是一种比我习惯的更“复杂”的编码方式,因为我对它相当陌生。它确实工作得很好,我修改了文件中类似的其他代码,以反映这种方法,并避免选择。我也采纳了你的建议,参考了具体的工作表而不是活动表。谢谢你的帮助!非常感谢。