• ベストアンサー

エクセルのテーブルを縦に直したい

添付画像のようにテーブル形式になっているデータを、関数かVBAを使い縦に並ぶように変換できないでしょうか。 やりたいデータは元データの行が何百行かあります。 よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • HohoPapa
  • ベストアンサー率65% (455/693)
回答No.1

ちょっと手抜きですが、こんなカンジでいかがでしょうか。 Sub teteyoko()  Dim LineCounter As Integer  Dim PutLineCount As Integer  Dim wkColCount As Integer  With ThisWorkbook   LineCounter = 2   PutLineCount = 1      Do    If .Sheets("会場横").Cells(LineCounter, 1).Value = "" Then Exit Do       For wkColCount = 1 To 4     .Sheets("会場縦").Cells(PutLineCount, 1).Value = _      .Sheets("会場横").Cells(LineCounter, 1).Value     .Sheets("会場縦").Cells(PutLineCount, 2).Value = _      .Sheets("会場横").Cells(LineCounter, 2).Value     .Sheets("会場縦").Cells(PutLineCount, 3).Value = _      .Sheets("会場横").Cells(1, wkColCount + 2).Value     .Sheets("会場縦").Cells(PutLineCount, 4).Value = _      .Sheets("会場横").Cells(LineCounter, wkColCount + 2).Value     PutLineCount = PutLineCount + 1    Next wkColCount       LineCounter = LineCounter + 1         Loop  End With   End Sub

sigesigeo1919
質問者

お礼

完璧にできました!! 本当にありがとうございます。 回答が早かったのでベストアンサーにさせていただきます。 よく勉強します。

その他の回答 (1)

  • bunjii
  • ベストアンサー率43% (3589/8249)
回答No.2

>やりたいデータは元データの行が何百行かあります。 提示の元データの範囲で同一シートへ返還後のデータを作成してみました。 H列に日付、I列に会場、J列に時間帯、K列にマークを抽出しました。 H3セルへ次の数式を設定します。 =IF(COUNTA($C$3:$F$12)>=ROWS(H$3:H3),OFFSET(A$3,INT((ROW()-3)/4),0),"") H3セルを右のI3セルへコピーします。 J3セルへ次の数式を設定します。 =IF(COUNTA($C$3:$F$12)>=ROWS(H$3:H3),INDEX($C$2:$F$2,1,MOD(ROW()-3,4)+1),"") K3セルへは次の数式を設定します。 =IF(COUNTA($C$3:$F$12)>=ROWS(H$3:H3),INDEX($C$3:$F$12,MATCH(H3,$A$3:$A$12,0),MATCH(J3,C$2:F$2,0)),"") H3:K3セルを同時に下へ必要数コピーすれば添付画像のような結果になります。

sigesigeo1919
質問者

お礼

関数でもできるのですね!!! 本当にありがとうございます。 よく勉強します。

関連するQ&A