【发布时间】:2014-09-13 16:15:18
【问题描述】:
我是 Excel VBA 的新手。我找到了一个脚本,可以帮助我将数据从一个工作表映射到另一个工作表,但映射完成后,值格式就发生了变化。
我有两张表,表 1 是原始数据表,主数据表是存储映射数据的位置。请看下表结构:
表 1:
说明:
家用
企业主
专业
首席财务官
秘书
主数据表:
代码说明
001 家用
002 企业主
003专业
004 首席财务官
005秘书
您可能会看到主数据表中第一列中的值是文本格式,即 001、002 等
下面的代码可以映射主数据表第一列中的数据,并使用它们替换表 1 中的描述。
Sub mapping()
Dim rng1 As Range, rng2 As Range, cel As Range
Dim StrMyChar As String, StrMyReplace As String
With ActiveWorkbook.Worksheets("Master Data")
Set rng1 = .[B1:B5]
End With
With ActiveWorkbook.Worksheets("Sheet1")
Set rng2 = .[A2:A6]
End With
'loop down list of texts needing replacing
For Each cel In rng1.Cells
StrMyChar = cel.Value
StrMyReplace = cel.Offset(0, -1).Value
'replace text
With rng2
.Replace What:=StrMyChar, Replacement:=StrMyReplace,_
SearchOrder:=xlByColumns, MatchCase:=False
End With
'Next word/text to replace
Next cel
End Sub
运行代码后,我发现所有的 001、002 等都变成了 1、2 等。
有没有办法让我保留 001 字符串格式?
谢谢。
【问题讨论】:
-
您很可能需要将每个单元格的 .NumberFormat 属性设置为“@”(@ 表示文本),否则 Excel 会尝试将其转换为数字,而 001 会转换为 1
-
嗯,你能帮我指出我应该把 .NumberFormat 放在代码的什么地方吗?我是一个完全编码的处女。谢谢。
-
其实我只是发现这行不通。事实上,如果您尝试使用 control-h 进行替换并手动进行,将其设置为文本格式的事件会替换数字。你只需要说数字格式可以是 00#(表示它仍然是数字,但显示前导零)或者你可以做一个 vlookup 并让它直接从另一张纸上显示值
-
嗯,我知道 vlookup 或索引/匹配,但上面的示例只是从一个非常琐碎的数据集中提取的一个,其中包含许多要映射的列。这项工作需要反复进行,因此我想要一个自动化的解决方案。
-
查看我的答案,替换格式“@”不适用于内置替换。但我们可以在定义的范围内编写自己的替换