こんばんは。
シート2のA1 に、「1組」と入れて、オートフィルコピーで下に必要なだけ出します。
(1組の「1」の半角・全角の間違いには気をつけてください)
B1 に以下の式を入れます。範囲は適当に変えてください。ただ、COLUMNは、必ず、初期値は、A1になります。
=IF(COLUMN(A1)>COUNTIF(Sheet1!$B$1:$H$1,$A1),"",INDEX(Sheet1!$B$1:$H$2,2,SMALL(INDEX(($A1=Sheet1!$B$1:$H$1)*COLUMN($B$1:$H$1),,),COLUMN(A1)+COUNTIF(Sheet1!$B$1:$H$1,"<>"&$A1))-1))
これをオートフィルコピーで横に、また下に必要なだけ広げます。
上記の式をマクロになるべく近い感じに、マクロらしさを失わないようにして移植してみました。うまく移植できているか自身がありませんので、エラートラップを置いています。
標準モジュールに張りつけます。
'--------------------------------------------------------
Sub Test1()
Const START As String = "B1"
Dim v1 As Variant
Dim v2 As Variant
Dim ar As Variant
Dim i As Long
Dim j As Long
Dim k As Long
Dim n() As String
Dim m() As String
Dim ret As Variant
On Error GoTo ErrHandler
With Worksheets("Sheet1")
v1 = Application.Index(.Range(START, Range("IV1").End(xlToLeft)).Value, 1, 0)
v2 = Application.Index(.Range(START, Range("IV1").End(xlToLeft)).Offset(1).Value, 1, 0)
j = UBound(v1)
ReDim n(j)
ReDim m(j)
For i = 1 To j
ret = Application.Match(v1(i), n, 0)
If IsError(ret) Then
n(k) = v1(i)
m(k) = v2(i)
k = k + 1
Else
m(ret - 1) = m(ret - 1) & "," & v2(i)
End If
Next i
End With
ret = Application.Match("", n, 0)
ReDim Preserve n(ret - 2)
ret = Application.Match("", m, 0)
ReDim Preserve m(ret - 2)
With Worksheets("Sheet2") 'Sheet2へ移す
.Cells(1, 1).Resize(UBound(n) + 1).Value = Application.Transpose(n)
For i = LBound(m) To UBound(m)
If m(i) <> "" Then
ar = Split(m(i), ",")
.Cells(i + 1, 2).Resize(, UBound(ar) + 1).Value = ar
End If
Next i
End With
Exit Sub
ErrHandler:
MsgBox Err.Number & " ; " & Err.Description
End Sub
'--------------------------------------------------------
お礼
回答ありがとうございます。 齢70弱の老爺には、横文字(敵国語)の羅列を見るだけで頭痛です。 せっかくお答えいただいたのに申し訳ありません。 VBAやマクロは、ノーサンキュウー(敵国語だ!)と書くべきでした