| 
    
     |  | ▼かみちゃんへ : おはようございます。
 帰省していたため、返信がおそくなり申し訳ありません。
 ご教示いただいた方法で実際にやってみたら、思い通りの表ができました。
 マクロというものは使ったことがなかったので、覚えると、とても便利ですね。
 正直言って、ご教示いただいたマクロの内容は、さっぱりわかりませんが、
 そのままコピー&貼り付けをして、シート名だけ直したら、できちゃいました。
 本当にありがとうございました。助かります。感謝、感謝!!
 また、何か機会がありましたら、よろしくお願いいたします。
 以上 みつ
 
 >こんにちは。かみちゃん です。
 >
 >>2.処理開始前のシートイメージは、次のとおりです。
 >> 氏名   生年月日、年齢、所属、・・・・・・・
 >> 田中一郎 1970/1/1 37  管理部 ・・・・・・
 >> データとしては150名分ほどです。
 >>3.処理後のシートは、別シートを望みます。
 >>4.同一部署に同一年齢の人が複数いる場合は、一人1行でもいいのですが、
 >> できれば、
 >> 「佐藤一郎」
 >> 「鈴木一郎」
 >> のように縦に並べて表示したいです。
 >> 罫線は佐藤と鈴木の間には入れたくないです。
 >
 >Sheet1
 >   A     B    C   D   E
 >1 氏名   生年月日、年齢 所属
 >2 田中一郎 1970/1/1  37 管理部
 >3 佐藤一郎 1975/2/3  32 製造部
 >4 鈴木一郎 1975/3/4  32 製造部
 >5
 >というシートであった場合で、Sheet2に出力する場合であれば、
 >以下のようなコードでできます。
 >
 >なお、同一部署で同一年齢の人は、セル内改行をすることで、同一
 >セルで表示するようにしています。
 >一人1セルにするには、面倒だったので。
 >
 >あと、他にもっと速くてスマートな方法があるかもしれません。
 >
 >Sub Sample()
 > Dim WS1 As Worksheet
 > Dim WS2 As Worksheet
 > Dim LastCell As Range
 > Dim c As Range
 > Dim lngRow As Long
 > Dim intCol As Integer
 >
 > Set WS1 = Worksheets("Sheet1")
 > Set WS2 = Worksheets("Sheet2")
 > Set LastCell = WS1.Cells(Rows.Count, 1).End(xlUp)
 >
 > For Each c In WS1.Range("A2", LastCell)
 >  lngRow = 0
 >  On Error Resume Next
 >  lngRow = WorksheetFunction.Match(c.Offset(, 2).Value, WS2.Columns("A"), 0)
 >  On Error GoTo 0
 >  If lngRow = 0 Then
 >   lngRow = WS2.Cells(Rows.Count, "A").End(xlUp).Offset(1).Row
 >   WS2.Cells(lngRow, "A").Value = c.Offset(, 2).Value
 >  End If
 >  intCol = 0
 >  On Error Resume Next
 >  intCol = WorksheetFunction.Match(c.Offset(, 3).Value, WS2.Rows("1"), 0)
 >  On Error GoTo 0
 >  If intCol = 0 Then
 >   intCol = WS2.Cells(1, Columns.Count).End(xlToLeft).Offset(, 1).Column
 >   WS2.Cells(1, intCol).Value = c.Offset(, 3).Value
 >  End If
 >  With WS2.Cells(lngRow, intCol)
 >   If .Value = "" Then
 >    .Value = c.Value
 >   Else
 >    .Value = .Value & vbCrLf & c.Value
 >   End If
 >  End With
 > Next
 >End Sub
 
 |  |