1件のデータが3行4列を1行にする 「マクロ講座入門EX」09回

1件のデータが3行4列を1行にする

動画編 「マクロ講座入門EX」09回
1件のデータが3行4列を1行にする

動画でExcel 1件のデータが3行4列を1行にする

1件のデータが3行4列を1行にする

動画版「マクロ講座入門EX」09回の解説です。
VBAでデータが縦にずらずらと並んでいるような表は、見やすくてもExcelでデータ処理することはできません。 それをデータベースで使えるようにマクロで成型処理します。

  • 【動画で解説している内容】
  • 1.縦持ちデータ(マトリクス)の扱いにくい表をデータベースに適した形式に変換する方法。
  • 2.Excelマクロを使ってデータ変換プロセスを自動化する方法。
  • 3.セルの移動やコピー、不要な行の削除などの手順をマクロで実行する方法。
  • 4.時間帯によって担当が変わる介護施設のスケジュールデータを整理する方法。
  • 5.1行1データの形式にデータを変換する目的と手法。
  • 6.マクロを使ってデータの成形を効率化する方法。
  • 7.ステップ実行を使ってマクロの動作を確認する方法。

(サンプルファイルは、こちらです。 1件のデータが3行4列を1行にする、サンプル09回

マクロ動画 1件のデータが3行4列を1行にする

https://youtu.be/2kgQqj9SCIY

4列で3行が1つのデータを1行にしてExcelで扱いやすくする

今回は前回からの続きでちょっと扱いづらい表を転記するということについて考えていきます。
今回は4列で3行が1つのデータという風になっています。
よく縦持ちとかマトリックスとか、呼び方様々なんですけれども、データベースの表形式ではない表ですね。
見るための表として作成されたものです。時間があって担当があって、これは介護病棟か、介護施設などの担当者の表です。

扱いにくいデータの成型1

時間が変わると担当が変わるので、9時にAならばこちらの11時にB、15時にCという風に1行1データにしたいわけです。

扱いにくいデータの成型2

考え方ですが、下の行から見ていきましょう。一番下の行がもし、上と同じだったらば、その行の時間と担当は、一つ上に持ってっていいんだよということにします。

扱いにくいデータの成型3

そして空のデータをですね。空なんですけれども上にに持っていきます。 そして2つ持って行ったら一番下の行は消してしまう。

扱いにくいデータの成型4

コードに表すと以下の図のようになります。

扱いにくいデータの成型5

コードのポイント解説

もし、患者名が同じで、部屋番
号も同じだったら、
If Cells(行, 2) = Cells(行 - 1, 2) And Cells(行, 1) = Cells(行 - 1, 1) Then
その時は、1件のデータとみなされるので、データを移動します。
For 列 = 3 To 6
Cells(行 - 1, 列 + 2) = Cells(行, 列)
Next 列

扱いにくいデータの成型6

データの列移動は3列から6列までの4列に対して行います。
For 列 = 3 To 6
データは右から左に入ります。元のデータCells(行, 列)は、行は一つ上、列は2つ左方向のセル、Cells(行 - 1, 列 + 2) に入ります。
Cells(行 - 1, 列 + 2) = Cells(行, 列)

扱いにくいデータの成型7

コード全体は以下のようになります。

Sub データベース型の表へ変換()
    Dim lastRow As Long, 行 As Long, 列 As Long
    lastRow = Cells(Rows.Count, 1).End(xlUp).Row
    For 行 = lastRow To 2 Step -1
        If Cells(行, 2) = Cells(行 - 1, 2) And Cells(行, 1) = Cells(行 - 1, 1) Then
        
            For 列 = 3 To 6
                Cells(行 - 1, 列 + 2) = Cells(行, 列)
            Next 列
            Rows(行).Delete
        End If
    Next 行
End Sub

コードを実行すると、1件が3行4列のデータを1件1行のデータに整形することができました。

扱いにくいデータの成型8