趣味のエクセルで当てよう!ロト・ナンバーズ

当選狙いで、ナンバーズ4をメインにロト、ビンゴ5などの各種データリストや、それらの分析用エクセルVBAなどについて書いてます。

複数列データに展開するマクロ


手作業で数百の単列データを分けて複数列データにしていて終了後、パソコントラブル保存出来ずに溜息出ました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