如何在新列中循环遍历Excel列和打印字符串

时间:2015-12-29 13:50:56

标签: vba excel-vba excel

我的标题可能不太清楚,所以我试着用一个例子来解释它。

让我们说我有一张excel表,其中一列用于城市名称,另一列用于州名,第三列用于国家名称。我想循环遍历列,并在第4列打印在其他3列中找到的内容。因此,让我们说第一列是"休斯顿",第二列是"德克萨斯",第三列是" USA",我将如何打印到第四栏" HTXUSA"?我几乎没有在Excel中使用VB的经验,所以我希望有人能够提供帮助。

我搜索了类似的主题,但无法找到任何有用的内容。一些线程有点帮助,但我仍然没有想到这一点。

1 个答案:

答案 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

它的工作原理截图:

enter image description here