ComboBox1というコンボボックスとTextBox1(複数行プロパティが有効)というユーザーボックスを作成しました。ユーザーフォーム(UserForm1)を読み込むと、InitializeイベントはUserForm_Initialize()の実行を開始します。それはコンボボックスにすべてのホストを設定します。ホストを選択するとComboBox1_Change()イベントが発生し、テキストボックスにHOST2 Guest5 Guest6 Guest7 Guest8
のようなものが出力されます。しかし、当然のことながら、出力を任意の場所に変更することができます。
Option Explicit
Dim allHosts As Range
Private pHostRow As Integer
Dim hostColumn As Integer
Private Sub UserForm_Initialize()
Dim Host As Range
Dim firstHost As Range
Dim lastHost As Range
Dim lastHostRow As Integer
hostColumn = 1
Set firstHost = Cells(1, hostColumn)
lastHostRow = firstHost.End(xlDown).Row
Set lastHost = Cells(lastHostRow, hostColumn)
Set allHosts = Range(firstHost, lastHost)
For Each Host In allHosts
ComboBox1.AddItem Host.Text
Next Host
End Sub
。
(コンボボックスを移入しながら、すなわち)あなたは、すべてのホストを反復処理ですので、あなたはこれを変更することができますどのように見ることができます
Private Sub ComboBox1_Change()
Dim selectedHost As String
selectedHost = ComboBox1.Text
pHostRow = allHosts.Find(selectedHost).Row
Dim guest As Range
Dim allGuests As Range
Dim firstGuest As Range
Dim lastGuest As Range
Dim lastGuestCol As Integer
Dim Host As Range
Set Host = Cells(pHostRow, hostColumn)
lastGuestCol = Host.End(xlToRight).Column
Set firstGuest = Host.Offset(0, 1)
Set lastGuest = Cells(pHostRow, lastGuestCol)
Set allGuests = Range(firstGuest, lastGuest)
TextBox1.Text = selectedHost
For Each guest In allGuests
TextBox1.Text = TextBox1.Text & selectedHost & guest.Text & vbCrLf
'if you weren't outputting this to a textbox you wouldn't use the vbCrLf,
'instead you would iterate to the next line in your output range.
Next guest
End Sub
と各ホストコールのComboBox1_Change()イベント(もちろん、名前を変更し、定期的なサブを作りました)すべてのゲストを別のワークシートを反復処理している範囲に出力します。
希望すると助かります!
この例では、すべてのゲストを1つのホストの下に戻しますか?ゲスト4は含まれますか? – Brad
はい、申し訳ありませんが、私は完全に詳しく説明しませんでした。ポイントは2つの列、ゲストのすべての値のための "ゲスト"と対応する "ホスト"を持つことです。すべてのゲストを含む別の列があるとします。 –