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() 이벤트 (일반 하위 물론 개명했다) 모든 워크 시트를 다른 워크 시트에서 반복하는 범위로 출력 할 수 있습니다.
희망이 있습니다.
예를 들어 한 호스트에서 모든 게스트를 반환하겠습니까? Guest4가 포함 되나요? – Brad
예, 미안하지만 나는 자세히 설명하지 않았습니다. 요점은 게스트의 모든 값에 대해 두 개의 열, "게스트"및 해당 "호스트"를 갖는 것입니다. 모든 손님을 포함하는 별도의 열이 있다고 가정합니다. –