スポンサードリンク

リスト形式へのデータ整形

先日twitterでデータ並び替えで質問を投げかけられているのを見かけたので、物は試しとやってみた。

前提条件 

下記のように横1行に並んでいるデータを4つ毎に区切って下に順番に並び替えていく。

元ネタをつぶやかれた方は「For」を使ってと条件をつけていたかと思う。

f:id:ExcelLover:20190206232750j:plain

マクロでの並び替え

実際に作ってみたのがこちら

Sub 並替()
     Dim i As Long
     
     For i = 0 To 15
          Cells((i \ 4) + 3, i Mod 4 + 1).Value = Cells(1, i + 1).Value
     Next i
     
End Sub

¥(円マーク バックスラッシュ)は割り算の答え(商)を返す演算子

modは割り算の余りをを返す演算子

For文を1~16ではなく、0~15で回しているのがポイント。

関数での並び替え

マクロを使用せずに並び替えるならこのような方法。

=OFFSET($A$1,,(ROW()-3)*4+COLUMN()-1)

並び替え後の全てのセルに同じ数式が入力されている。
f:id:ExcelLover:20190206233238j:plain

まとめ

なんとなくはこうすれば上手くいくだろうなとはパッと思うのだが、実際にちゃんと動くにはトライ・アンド・エラーをしないと一発では作れない。

こういう頭の体操を繰り返すことで少しずつスキルが上がっていくんだろう。

※関数の方法は我ながらきれいにまとまったんじゃないかと思う。


データ整形のみで1冊を費やす狂気の本