excel 在VBA中使用“表名”和“列名”替换表的列中的值

ktca8awb  于 2022-11-18  发布在  其他
关注(0)|答案(1)|浏览(252)

我在隔壁桌
| 标题1|标题2|标题3|
| - -|- -|- -|
| v型|X射线|v型|
| X射线|v型|X射线|
| | X射线|X射线|
| v型|v型|v型|
| X射线|v型|X射线|
我想将每一列的“x”替换为另一个值,例如,将第1列替换为“true”,将第2列替换为“false”,将第3列替换为“else”。最后,结果如下:
| 标题1|标题2|标题3|
| - -|- -|- -|
| v型|假的|v型|
| 真的|v型|其他|
| | 假的|其他|
| v型|v型|v型|
| 真的|v型|其他|
但实际情况是,我必须指定工作表名称和表名称(所有表都有相同的列名)。

Sub Macro1()
'
'
' 

Dim sheet_name As String
Dim table_name As String

sheet_name = InputBox("Sheet Name?", "enter the data")
table_name = InputBox("Table Name?", "enter the data")

With Worksheet(sheet_name).ListObjects(table_name)

.Range("[header1]").Select
Selection.Replace What:="x", Replacement:="true", LookAt:=xlPart _
    , SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
    ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2

.Range("[header2]").Select
Selection.Replace What:="x", Replacement:="false", LookAt:=xlPart _
    , SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
    ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2

.Range("[header3]").Select
Selection.Replace What:="x", Replacement:="else", LookAt:=xlPart _
    , SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
    ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2
End With
End Sub

如果有人有更好的想法或方法来纠正这段代码,那将是非常有帮助的。

e4yzc0pl

e4yzc0pl1#

您可以使用此代码。
我喜欢对这些设置进行某种配置--这样更容易进行更改,例如,如果你想更改替换值。
关于真/假的替换:您需要在替换时在值前面加上',否则Excel会将其转换为TRUEFALSE(值,而不是字符串)

Public Sub replaceXValues()
Dim sheet_name As String
Dim table_name As String

sheet_name = InputBox("Sheet Name?", "enter the data")
table_name = InputBox("Table Name?", "enter the data")

Dim lo As ListObject
Set lo = ThisWorkbook.Worksheets(sheet_name).ListObjects(table_name)

Set lo = ActiveSheet.ListObjects(1)

Dim strFind As String
strFind = "x"

Dim arrReplace(1 To 3) As String
arrReplace(1) = "true"
arrReplace(2) = "false"
arrReplace(3) = "else"

Dim lc As ListColumn, i As Long
For i = 1 To UBound(arrReplace)
    Set lc = lo.ListColumns(i)
    lc.DataBodyRange.replace strFind, "'" & arrReplace(i), LookAt:=xlWhole
Next

End Sub

显然,如果sheet-name或table-name不存在,则需要一个错误处理程序。

相关问题