プロが教えるわが家の防犯対策術!

大量にデータがあって、関数かマクロで解決できないかと悩んでいます。
下記の内容について、解決方法をどなかか教えていただけないでしょうか?

A列をタイトルとして繰り返し、B列以降を行列入れ替えしたいです。
Sheet1に元データがあり、Sheet2に並び替えたデータを出したいと思っています。

<元データ>
     A列    B列    C列    D列    E列 
(1行) 会社名   開始日  終了日   担当者   連絡日
(2行) A社    9/2    12/5    山田    7/13
(3行) B社    9/1    11/5          8/30
(4行) C社    10/1          佐藤    6/30    
(以下続く)

<並び替えたデータ>
     A列    B列    C列 
(1行) A社    開始日   9/2
(2行) A社    終了日   12/5
(3行) A社    担当者   山田
(4行) A社    連絡日   7/13
(5行) B社    開始日   9/1   
(6行) B社    終了日   11/5
(7行) B社    担当者   
(8行) B社    連絡日   8/30
(9行) C社    開始日   10/1
(10行) C社    終了日
(11行) C社    担当者   佐藤
(12行) C社    連絡日   6/30


※実際のデータはE列で終わりではなく20~30列くらいまで続きます。
※このタイプのデータが複数あり、項目数や内容は固定ではありません。
※A列の会社名は空欄はありません。B列以降の項目は空欄の場合があります。

A 回答 (1件)

こんにちは!



VBAでの一例です。
元データはSheet1にあり、Sheet2に表示させるとします。

単純にループさせているだけです。
標準モジュールにしてください。

Sub Sample1()
Dim i As Long, j As Long, cnt As Long
Dim lastCol As Long, wS As Worksheet
Set wS = Worksheets("Sheet2")
With Worksheets("Sheet1")
For i = 2 To .Cells(Rows.Count, "A").End(xlUp).Row
For j = 2 To .Cells(1, Columns.Count).End(xlToLeft).Column
cnt = cnt + 1
wS.Cells(cnt, "A") = .Cells(i, "A")
wS.Cells(cnt, "B") = .Cells(1, j)
wS.Cells(cnt, "C") = .Cells(i, j)
Next j
Next i
End With
wS.Range("C:C").NumberFormatLocal = "m/d" '←★
End Sub

※ 注意点として・・・
質問文では「数値セル」は「日付」(シリアル値)しかない!という前提でSheet2のC列表示形式を「日付」としています。
(「★」の行)
別途「数値」として表示しなくてはならないセルがある場合は
少し変更があります。

まずはこの程度で・・・m(_ _)m
    • good
    • 0
この回答へのお礼

tom04さま、ありがとうございます!
日付以外の数値データはないので、きれいにデータが並び替えられました~!

お礼日時:2016/09/16 08:48

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!