0

ドロップダウンでは、lookupDept ワークブックの 2 つの列から情報を引き出してマージする必要があります。たとえば、私は持っています:

deptCode deptName
BS       Business School
CD       Design and Technology
CG       Chemical Engineering
CM       Chemistry
CO       Computer Science

コンボ ボックスで使用される 2 つのスプレッドシート列から情報が引き出されるという問題を解決することができました。残念ながら、コンボボックスのリストは次のようになります。

BS
CD
CG
CM
Business School
Design and Technology
Chemical Engineering
Chemistry

次のようにしたいとき:

BS Business School
CD Design and Technology
CG Chemical Engineering
CM Chemistry

これには 2 つの列の情報をマージする必要があります (列にはdeptCodedeptNameという名前が付けられています) が、それを達成する方法がよくわかりません。これが私がこれまでに試したことです。コードは、両方の列をマージするのではなく、両方の列から情報をリストしています。

Private Sub UserForm_Initialize()

Dim c_deptCode As Range
Dim c_deptName As Range
Dim ws_dept As Worksheet
Set ws_dept = Worksheets("lookupDept")

For Each c_deptCode In ws_dept.Range("deptCode")
  With Me.cbo_deptCode
    .AddItem c_deptCode.Value
    .List(.ListCount - 1, 1) = c_deptCode.Offset(0, 1).Value
  End With
Next c_deptCode

For Each c_deptName In ws_dept.Range("deptName")
  With Me.cbo_deptCode
    .AddItem c_deptName.Value
  End With
Next c_deptName

End Sub
4

2 に答える 2

1

ColumnCountコンボボックスのプロパティをに設定し、データを2次元配列としてプロパティ2にロードしますList

を使用して、列幅を適切に設定することもできます。ColumnWidths

Private Sub UserForm_Initialize()
    Dim c_deptCode As Range
    Dim c_deptName As Range
    Dim ws_dept As Worksheet

    Dim aDat() As Variant
    Dim i As Long

    Set ws_dept = Worksheets("lookupDept")
    Set c_deptCode = ws_dept.Range("deptCode")
    Set c_deptName = ws_dept.Range("deptName")
    aDat = c_deptCode
    ReDim Preserve aDat(1 To UBound(aDat, 1), 1 To 2)
    For i = 1 To UBound(aDat, 1)
        aDat(i, 2) = c_deptName.Cells(i, 1)
    Next
    With cbo_deptCode
        .ColumnCount = 2
        .ColumnWidths = "20;50"
        .List = aDat
    End With
End Sub
于 2012-10-07T09:02:49.920 に答える
1

主な問題は、最初の範囲とは完全に別の 2 番目の範囲を追加していることにあるようです (それがあなたの質問であることはわかっているので、明らかなことを指摘して申し訳ありません:))。いずれにせよ、できることは以下のようなものです。基本的には、2 つの範囲の値を組み合わせて、その単一の値をドロップダウンに追加します。主な変更点は、2 つの新しい変数 (名前付き範囲の値を含む配列を表す) を追加し、Forループを 1 つに凝縮したことです。

Private Sub UserForm_Initialize()

Dim c_deptCode As Range
Dim c_deptName As Range
Dim deptCodes As Variant
Dim deptNames As Variant

Dim ws_dept As Worksheet
Set ws_dept = Worksheets("lookupDept")

' Assign each range to an array containing the values
deptCodes = Choose(1, ws_dept.Range("deptCode"))
deptNames = Choose(1, ws_dept.Range("deptName"))

' Note that this blindly uses deptCode as a sort of control.
' This could be handled a bit better, but should work for this case
For i = 1 To ws_dept.Range("deptCode").Rows.Count
  ' Create the combined name (code + space + name)
  CombinedName = deptCodes(i, 1) & " " & deptNames(i, 1)
  cbo_deptCode.AddItem CombinedName
Next i

End Sub
于 2012-10-07T08:57:09.213 に答える