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行にする
4列で3行が1つのデータを1行にしてExcelで扱いやすくする
今回は前回からの続きでちょっと扱いづらい表を転記するということについて考えていきます。
今回は4列で3行が1つのデータという風になっています。
よく縦持ちとかマトリックスとか、呼び方様々なんですけれども、データベースの表形式ではない表ですね。
見るための表として作成されたものです。時間があって担当があって、これは介護病棟か、介護施設などの担当者の表です。
時間が変わると担当が変わるので、9時にAならばこちらの11時にB、15時にCという風に1行1データにしたいわけです。
考え方ですが、下の行から見ていきましょう。一番下の行がもし、上と同じだったらば、その行の時間と担当は、一つ上に持ってっていいんだよということにします。
そして空のデータをですね。空なんですけれども上にに持っていきます。
そして2つ持って行ったら一番下の行は消してしまう。
コードに表すと以下の図のようになります。
コードのポイント解説
もし、患者名が同じで、部屋番
号も同じだったら、
If Cells(行, 2) = Cells(行 - 1, 2) And Cells(行, 1) = Cells(行 - 1, 1) Then
その時は、1件のデータとみなされるので、データを移動します。
For 列 = 3 To 6
Cells(行 - 1, 列 + 2) = Cells(行, 列)
Next 列
データの列移動は3列から6列までの4列に対して行います。
For 列 = 3 To 6
データは右から左に入ります。元のデータCells(行, 列)は、行は一つ上、列は2つ左方向のセル、Cells(行 - 1, 列 + 2) に入ります。
Cells(行 - 1, 列 + 2) = Cells(行, 列)
コード全体は以下のようになります。
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行のデータに整形することができました。