| 
    
     |  | ▼chii さん: >初めまして。
 >(1)sheet1のA列をキーとし、キーの一致するデータを1行にまとめて
 >(2)sheet2の結果のようにしたいのですが、どのようにすれば
 >いいのでしょうか?ご教授ください。
 >よろしくお願いいたします。
 >
 >
 ちんといいます。横から失礼します。
 セルが空欄なら、処理終了の手法を取って、いけば汎用性があると思うので、
 空欄なら、Exit ForでFor文をぬけるように作ってみました。
 
 Dim i As Long
 Dim Old_a1 As String  '*** OLDキー
 Dim A1_St1 As Long   '*** データ読み込み開始位置
 Dim A1_Et1 As Long   '*** データ読み込み終了位置
 Dim j As Integer, j1 As Integer, s1 As Integer, s2 As Integer
 
 Old_a1 = ""
 s1 = 0  '<--- Sheet2へのセットを開始する行
 s2 = 0  '<--- Sheet2へのセットを開始する列
 
 For i = 1 To 65536
 If Sheet1.Cells(i, 1) = "" Then '<-- 空欄ならデータ無しと判断する
 Exit For
 End If
 If Old_a1 <> Sheet1.Cells(i, 1) Then
 If Old_a1 = "" Then '<-- 最初のみ
 A1_St1 = i     '<-- 同一データの開始位置をセット
 A1_Et1 = i     '<-- 同一データの終了位置をセット
 Old_a1 = Sheet1.Cells(i, 1) '<--- キーの保存
 Else
 A1_Et1 = i - 1   '<-- 同一データの終了位置をセット
 Old_a1 = Sheet1.Cells(i, 1) '<--- キーの保存
 
 GoSub Sheet2_SET  '<--- シート2へデータセット
 A1_St1 = i     '<-- 同一データの開始位置をセット
 A1_Et1 = i     '<-- 同一データの終了位置をセット
 End If
 End If
 
 Next i
 
 '**** 最後のデータをセットする。
 If Old_a1 <> "" Then
 GoSub Sheet2_SET  '<--- シート2へデータセット
 End If
 Exit Sub
 
 Sheet2_SET:
 '**** シート1のデータをシート2へデータセット
 s1 = s1 + 1 '<--- Sheet2のデータセットする行
 s2 = 0   '<--- Sheet2のデータセットする列
 For j1 = 1 To 256  'A列〜IV列まで
 If Sheet1.Cells(A1_St1, j1).Value = "" Then '*** 空欄ならデータなし
 Exit For
 End If
 For j = A1_St1 To A1_Et1
 s2 = s2 + 1
 Sheet2.Cells(s1, s2).Value = Sheet1.Cells(j, j1).Value
 If s2 = 1 Then  '*** A列のデータは1回セットでおしまい。
 Exit For
 End If
 Next j
 Next j1
 Return
 
 こんな感じでしょうか?参考までに・・・
 
 
 |  |