【发布时间】:2021-05-25 12:01:07
【问题描述】:
抱歉……我的 VBA 技能几乎不存在……
我要做的是在 Excel 中创建一个宏,其中列 (1) 中的数据被列标题(SAND、LS 和 CS)替换。这是一个示例表:
| DEPTH | SAND | LS | CS |
|---|---|---|---|
| 600 | 1 | -999 | -999 |
| 700 | -999 | -999 | 1 |
| 800 | 1 | -999 | -999 |
| 900 | -999 | 1 | -999 |
这是我运行宏时的结果:
| DEPTH | SAND | LS | CS |
|---|---|---|---|
| 600 | SAND | -999 | -999 |
| 700 | -999 | -999 | CS |
| 800 | SAND | -999 | -999 |
| 900 | -999 | LS | -999 |
但是,我需要让 Excel 读取第一行中的 Header 来替换 1。不是列字母(例如读取 SAND 而不是 Columns("B:B") 在下面的代码中。我有许多相同格式的不同文件,但列数和列标题不同,因此问题。
这是我创建的宏的示例。
Sub LithReplace()
'
' LithReplace Macro
'
'
Range("B1").Select
Selection.Copy
Columns("B:B").Select
Selection.Replace What:="1", Replacement:="SAND ", LookAt:= _
xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2
Range("C1").Select
Application.CutCopyMode = False
Selection.Copy
Columns("C:C").Select
Selection.Replace What:="1", Replacement:="LS ", LookAt:= _
xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2
Range("D1").Select
Application.CutCopyMode = False
Selection.Copy
Columns("D:D").Select
Selection.Replace What:="1", Replacement:="CS ", LookAt:= _
xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2
End Sub
提前致谢。
【问题讨论】:
-
阅读How to avoid using Select in Excel VBA可能会让您受益。
-
请查看我在下面写的答案。该链接只是一个说明,让您了解如何编写更好的代码。请不要在 cmets 中发布代码。它变得无用,因为您无法正确格式化它。
-
谢谢!这非常有效。我将添加更多代码来完成工作流程。