複数列データに展開するマクロ
手作業で数百の単列データを分けて複数列データにしていて終了後、パソコントラブル保存出来ずに溜息出ましたw
そこで下のD列データを2列脇に任意のデータ行数で複数列に表示するマクロを考えて見ました。
D列の数千行のデータをF列から30データづつ右列に展開する
(データに空行があってもそのまま展開されます)
Sub 列へ展開()
Dim yiti As Long, retu As Long, gyou As Long , x As Long
Dim Lastgyou As Long,Lastretu As Long, prspan As Long
retu = ActiveCell.Column
gyou = ActiveCell.Row
If Cells(gyou, retu) = "" Then End
prspan = InputBox("行単位は何行にしますか?")
Lastgyou = Cells(Rows.Count, retu).End(xlUp).Row ’データの最終行
Lastretu = Int((Lastgyou + 1 - gyou) / prspan + 2) ’展開列数の計算
yiti = 0
For x = 2 To Lastretu
Range(Cells(yiti + gyou, retu), Cells(yiti + gyou + prspan - 1, retu)).Copy Cells(gyou, retu + x) ’任意の元データを該当列にコピーする
yiti = yiti + prspan
Next x
End Sub
実際のマクロ動作テストをあまりしていないので問題が出る可能性はあります。
最初にデータを表示するセル範囲のデータを削除する式もあったのが良いですね。
その場合は変数 retu, gyou で作ります。
シートに一覧表示をさせる場合はデータ数を調整させる必要があるので、このマクロです
れば少し楽になると思います。
2列以上データの場合は下のマクロ
Sub 複数列へ展開()
Dim yiti As Long, retu As Long, retu_frg As Long, gyou As Long
Dim Lastgyou As Long, x As Long, prspan As Long
retu = ActiveCell.Column
gyou = ActiveCell.Row
If Cells(gyou, retu) = "" Then End
retu_frg = InputBox("列単位は何列にしますか?") + 1
prspan = InputBox("行単位は何行にしますか?")
Lastgyou = Cells(Rows.Count, retu).End(xlUp).Row
Lastretu = Int((Lastgyou + 1 - gyou) / prspan + 2)
yiti = 0
For x = 2 To Lastretu
Range(Cells(yiti + gyou, retu), Cells(yiti + gyou + prspan - 1, retu + retu_frg)).Copy Cells(gyou, retu + retu_frg * x)
yiti = yiti + prspan
Next x
End Sub