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

Excelのデータ上で1行にまとめてあるデータを24列ごとで2行目、3行目と関数などを使って段落分けする方法はありますか?

下のようなデータを
  A   B    C    D        Y    Z
1 
2 日  10/1  10/1  10/1 ・・・・・10/1  10/2 10/2 ・・・・・
3 時間  0時   1時   2時  ・・・・・23時   0時 1時
4 
5 A社  5    8   10  ・・・・・ 7    9    3 
6 B社  6    12   2  ・・・・・ 5    8    6
7 C社  4    1   3  ・・・・・ 6    7    9
              
               ↓
このように変換したいです
  A   B    C    D    E  ・・・・・ 
1 
2     日   0時   1時   2時  ・・・・・ 23時  
3 
4 A社  10/1  5     8  10 ・・・・・ 7    
5 A社  10/2  9     3 
6 A社  10/3  
 ・
  ・
  ・
  B社  10/1


分かりづらいかもしれないですが、可能であれば教えていただけると助かります。
Excelはoffice2016を使用しています。
宜しくお願いします。

質問者からの補足コメント

  • すみません、書き忘れてました!
    全ての会社、10月1日から14日までの2週間分のデータがあるという状態です!

    No.2の回答に寄せられた補足コメントです。 補足日時:2019/10/06 11:10

A 回答 (4件)

こんばんは!



手っ取り早くVBAでの一例です。
元データはSheet1にあり、Sheet2に表示するとします。
Alt+F11キー → メニュー → 挿入 → 標準モジュール → VBE画面のカーソルが点滅しているところに
↓のコードをコピー&ペースト → Excel画面に戻り(VBE画面を閉じて)マクロを実行してみてください。
(Alt+F8キー → マクロ → マクロ実行です)

Sub Sample1() '//この行から//
 Dim i As Long, j As Long, cnt As Long
 Dim wS As Worksheet
  Set wS = Worksheets("Sheet2")
   wS.Cells.ClearContents
   With Worksheets("Sheet1")
    wS.Range("A2") = "社名"
    wS.Range("B2") = "日"
    wS.Range("C2").Resize(, 24).Value = .Range("B3").Resize(, 24).Value
     cnt = 3
      For i = 5 To .Cells(Rows.Count, "A").End(xlUp).Row
       For j = 2 To .Cells(2, Columns.Count).End(xlToLeft).Column Step 24
        cnt = cnt + 1
         wS.Cells(cnt, "A") = .Cells(i, "A")
         wS.Cells(cnt, "B") = .Cells(2, j)
         wS.Cells(cnt, "C").Resize(, 24).Value = .Cells(i, j).Resize(, 24).Value
       Next j
      Next i
      wS.Range("B:B").NumberFormatLocal = .Range("B2").NumberFormatLocal
   End With
    wS.Activate
    MsgBox "完了"
End Sub '//この行まで//

こんな感じではどうでしょうか?m(_ _)m
    • good
    • 1
この回答へのお礼

この通りにやったら簡単に出来ました!
本当にありがとうございます(´;ω;`)
おかげでこれからの作業がかなり楽になりました!!

お礼日時:2019/10/08 14:08

添付図参照



Sheet1 において、
1.G/標準"時"
 ̄ ̄に書式設定した範囲4行目の B列から LY列まで連続数値
 ̄ ̄0、1、2、…、23、0、1、2、…、23 を入力

2.m/d
 ̄ ̄に書式設定し、かつ、式
 ̄ ̄ =DATE($A1,$B1,1)+COUNTIF($B3:B3,B3)-1
 ̄ ̄を入力したセル B2 を右方に(LY列まで)ズズーッとオートフィル

Sheet2 において、
3.G/標準"時"
 ̄ ̄に書式設定し、かつ、式 =Sheet1!B3 を入力したセル C2 を右方に(Z列まで)
 ̄ ̄ズズーッとオートフィル
4.下記の左端に示すセルにそれぞれ右側に示す式を入力して、範囲 A4:B4 を
 ̄ ̄下方にズズーッとオートフィル
 ̄ ̄ A4: =IF(ROW(A1)>COUNTA(Sheet1!A$5:A$100)*14,"",OFFSET(Sheet1!A$5,(ROW(A1)-1)/14,))
 ̄ ̄ B4: =IF(A4="","",DATE(Sheet1!A$1,Sheet1!B$1,MOD(ROW(A1)-1,14)+1))
5.次式を入力したセル C4 を右方&下方にズズーッとオートフィル
 ̄ ̄ =OFFSET(Sheet1!$B$5,(ROW(A1)-1)/14,MOD((COLUMN(A1)-1)+(ROW(A1)-1)*24,14*24))
「Excelで1行にまとめてあるデータを指」の回答画像3
    • good
    • 1

確認させてください。


上段の「下のようなデータ」の右端は何か月後の末日までとか決まってますか?それとも「17歳の止められない純愛」のように延々と続くのですか?その場合、月末処理はどのようにしていますか?10月は31日まで、11月は30日まで、2月は28または29日までとバラバラなんですけどォ~。2月28、29日の右隣は3月1日とか?
そこらあたりはキッチリとネ!
この回答への補足あり
    • good
    • 0

ピボットテーブル

    • good
    • 0

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