1

我目前正在使用 Office 2003 创建一个日历,其中包含与某些部门相关的部门代码。日程表上的每个“事件”都有自己的一组隐藏在每个日期旁边的部门代码,我正在尝试打印相应的字符串(每个“事件”可以有多个部门代码)。我需要帮助才能做到这一点。

概括

  • 部门代码在 D 列中,从第 10 行开始(i 是行变量)。

  • 包含这些代码的每个单元格都有用逗号分隔的字母(例如 [M, A, P]) - 我希望能够根据每个部门代码单元格打印多个部门名称)

  • 我对变量 p 的意图是使用 vlookup 查找每个部门代码的位置。

  • 我所有的部门代码和文本字符串都在 P3:Q11 中,P 列包括部门代码,Q 列包括相应的部门名称/文本字符串。

  • p 设置为每个循环增加 3 倍,因为我认为您需要跳过 3 个字符才能找到下一个可能的部门代码(逗号、空格、新字母)。

  • 我想在找到您要查找的相应代码的同一行中打印单独/多个文本字符串(取决于事件是否有多个部门代码),但在 K 列中(而不是 where部门代码位于 - D 列)


Sub DepartmentNames()

Dim i As Long

Dim p As Integer

Dim LastRow As Long

LastRow = Range("D" & Rows.Count).End(xlUp).Row

For i = 10 To LastRow

    For p = 1 To Len("D" & i) Step 3

        ' Placeholder

    Next

Next i

End Sub
4

1 回答 1

1

这是我提出的解决方案,使用拆分功能和集合。

Sub Reference()

' Disable screen updating
Application.ScreenUpdating = False

Dim wS As Worksheet
Set wS = ActiveSheet   ' you can change it to be a specific sheet

Dim i As Long
Dim LastRow As Long
LastRow = Range("D" & Rows.Count).End(xlUp).Row


Dim Dpts As Variant
Dim dFullText As Variant
Dim LookUp As New Collection

' Create a collection where the key is the shortcode and the value is the full name of the dpt
On Error Resume Next
For i = 3 To 11

    LookUp.Add wS.Cells(i, 17), wS.Cells(i, 16)

Next i
On Error GoTo 0


' Loop on each row
For i = 10 To LastRow

    Dpts = Split(wS.Cells(i, 4), ",") ' Split creates an array

    ' First case
    dFullText = LookUp.Item(Trim(Dpts(0)))   ' TRIM = remove trailing and leading spaces

    ' The rest of them
    For j = 1 To UBound(Dpts)

        dFullText = dFullText & ", " & LookUp.Item(Trim(Dpts(j)))

    Next j

    ' Put full text in column K
    wS.Cells(i, 11).Value = dFullText

Next i

' Enable screen updating again
Application.ScreenUpdating = True

End Sub

如果您需要澄清,请告诉我

于 2013-07-03T14:04:25.000 回答