我的标题可能不太清楚,所以我试着用一个例子来解释它。
让我们说我有一张excel表,其中一列用于城市名称,另一列用于州名,第三列用于国家名称。我想循环遍历列,并在第4列打印在其他3列中找到的内容。因此,让我们说第一列是"休斯顿",第二列是"德克萨斯",第三列是" USA",我将如何打印到第四栏" HTXUSA"?我几乎没有在Excel中使用VB的经验,所以我希望有人能够提供帮助。
我搜索了类似的主题,但无法找到任何有用的内容。一些线程有点帮助,但我仍然没有想到这一点。
答案 0 :(得分:0)
为了帮助您入门,这是一个VBA解决方案。它使用公共Dictionary
对象。这些实际上来自VBScript,但可以通过几种方式在VBA中使用,包括CreateObject
。字典只初始化一次,第一次调用相应的Abbreviate
函数。此函数占用一个范围,并且对于该范围中的每个单元格,是否存在相应的字典键。如果是这样 - 相应的值会连接到不断增长的字符串上,如果不是 - 值本身就是。我正在制作键大写,以便使所有内容不区分大小写:
Public Abbreviations As Variant
Public Initialized As Boolean
Sub Initialize()
Dim A As Variant, i As Long, n As Long
'modify the following:
A = Array("Houston", "H", "Dallas", "D", "Cleveland", "C", _
"Toronto", "T", "Texas", "TX", "Ohio", "OH", _
"Ontario", "ON", "Canada", "CAN")
n = UBound(A) - 1
Set Abbreviations = CreateObject("Scripting.Dictionary")
For i = 0 To n Step 2
Abbreviations.Add UCase(A(i)), A(i + 1)
Next i
Initialized = True
End Sub
Function Abbreviate(R As Range) As String
Dim i As Long, s As String
Dim cell As Range
If Not Initialized Then Initialize
For Each cell In R.Cells
If Abbreviations.exists(UCase(cell)) Then
s = s & Abbreviations(UCase(cell))
Else
s = s & UCase(cell)
End If
Next cell
Abbreviate = s
End Function
它的工作原理截图: