- ベストアンサー
エクセルマクロでリストのデータを印刷する方法
- エクセルマクロを使用して、指定のリストのデータを印刷する方法について教えてください。
- 表のデータをA4用紙に横書きで印刷する方法をマクロで実現したいです。
- マクロを使用して、組ごとに改行しながらデータを印刷する方法を教えてください。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
こういう表をマクロで出すのが得意な人はいらっしゃると思います。 私は、あくまでも、長いブランクの練習用として書かせて頂きました。 本来は、ピボットテーブルなどで出せるような気がします。 >1行に各人数はあらかじめ決めておき、(この例では3名) それはいいにしても、金山くんという文字が、なぜ、3行目から始まるのか分からないけれど、文章に内容からすると、左の表と、右側の書き出しとは、何も連動していないようですね。 '// Sub Test1() Dim r As Range Dim r2 As Range Dim c As Range Dim objDic As Object Dim a As Variant Dim b As Variant Dim d As Variant Dim i As Long, j As Long, k As Long Dim x As Long, y As Long, cnt As Long Const ST As String = "D1" '書き出し位置(スタート=ST) Const KT As Long = 3 '一行の横の書き出しセル数(略称は桁=KT) 'Dictionary オブジェクトを使う Set objDic = CreateObject("Scripting.Dictionary") Set r = Range("A1", Cells(Rows.Count, 1).End(xlUp)) If r.Count < 2 Then Exit Sub 'データがない場合 Application.ScreenUpdating = False For Each c In r If c.Value <> "" Then If Not objDic.Exists(c.Value) Then objDic.Add c.Value, c.Offset(, 1).Value Else objDic.Item(c.Value) = objDic.Item(c.Value) & "," & c.Offset(, 1).Value End If End If Next c a = objDic.Items b = objDic.Keys j = objDic.Count Set r2 = Range(ST) Do d = Split(a(k), ",") '書き出し Do For x = 0 To KT - 1 '横に書き出しセル r2.Offset(y, x).Value = d(cnt) cnt = cnt + 1 If UBound(d) = cnt - 1 Then Exit Do Next x y = y + 1 Loop If UBound(a) = k Then Exit Do k = k + 1 y = y + 2 cnt = 0 Loop Application.ScreenUpdating = True Set objDic = Nothing Set r = Nothing End Sub '//
お礼
ありがとうございました。