|
▼yuhmo さん:
おはようございます。
>
>Sheet1の1列目に20人分の名前データ、2列目以降に個人データがあります。
>Sheet2の1列目に20人分の名前データ、2列目以降に個人データがあります。
>Sheet1 Sheet2のデータの並び方は同じです。
それぞれのシートに一行目は項目名(見出し)とします。
よって、実データは2行目から入力されているとします。
>ユーザーフォーム上にSheet1とSheet2の名前データ一覧を表示させて、それぞれ
>1つずつ名前を選択すると、選択したデータが入れ替わる(Sheet1の選択したデータがSheet2に、Sheet2のデータがSheet1に、互いのデータがあった位置に入る)ようにしたいのですが、どのようにしたらよいかお教えください。
ユーザーフォーム(Userfom1)には、
コンボボックス---Combobox1
コマンドボタン---Commandbutton1
を配置します。
仕様は、
Userform1のコンボボックスから名前を選択し、
コマンドボタンをクリックすると
選択した名前のSheet1とSheet2のデータが交換される
というものです。
標準モジュールに
'============================================
Sub test()
UserForm1.Show vbModeless
End Sub
userform1のモジュールに
'=============================================================
Private Sub CommandButton1_Click()
Dim rrow As Long
Dim s1wk As Variant
Dim s1csl As Long
Dim s2wk As Variant
Dim s2scl As Long
rrow = ComboBox1.ListIndex + 2
With Worksheets("sheet1")
s1wk = Application.Transpose(Application.Transpose(.Range(.Cells(rrow, 1), .Cells(rrow, .Columns.Count).End(xlToLeft))))
If TypeName(s1wk) <> "Variant()" Then
s1wk = Array(s1wk)
End If
s1scl = UBound(s1wk) - LBound(s1wk) + 1
End With
With Worksheets("sheet2")
s2wk = Application.Transpose(Application.Transpose(.Range(.Cells(rrow, 1), .Cells(rrow, .Columns.Count).End(xlToLeft))))
If TypeName(s2wk) <> "Variant()" Then
s2wk = Array(s2wk)
End If
s2scl = UBound(s2wk) - LBound(s2wk) + 1
End With
With Worksheets("sheet1")
.Range(.Cells(rrow, 1), .Cells(rrow, .Columns.Count).End(xlToLeft)).Value = ""
.Range(.Cells(rrow, 1), .Cells(rrow, s2scl)).Value = s2wk
End With
With Worksheets("sheet2")
.Range(.Cells(rrow, 1), .Cells(rrow, .Columns.Count).End(xlToLeft)).Value = ""
.Range(.Cells(rrow, 1), .Cells(rrow, s1scl)).Value = s1wk
End With
End Sub
'====================================================================
Private Sub UserForm_Initialize()
Dim myarray As Variant
With Worksheets(1)
If .Cells(.Rows.Count, 1).End(xlUp).Row > 1 Then
myarray = .Range("a2", .Cells(.Rows.Count, 1).End(xlUp)).Value
With ComboBox1
.Style = fmStyleDropDownList
.List = myarray
.ListIndex = 0
End With
End If
End With
End Sub
以上です。testを実行してみて下さい。
|
|