- ベストアンサー
エクセルで
お世話になります Sub 請求書印刷() p = 0 For r = 2 To 134 Step 22 For c = 1 To 236 Step 5 If Cells(r, c) = "" Then GoTo pr p = p + 1 Next c Next r pr: Sheets("請求書").PrintOut From:=1, To:=236, Copies:=1, Collate:=True, Preview:=False End Sub 上記のマクロで、Aの2-3(セルの結合)が空白だったらに 変えるのにはどしたらいいでしょうか よろしくお願いいたします
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
Sub 請求書印刷() p = 0 For r = 2 To 134 Step 22 If r = 2 then If cells(r,1).Merge = True Then If cells(r,1) = "" Then '処理の内容 End If Else 'Falseの時の処理 End If End If For c = 1 To 236 Step 5 If Cells(r, c) = "" Then GoTo pr p = p + 1 Next c Next r pr: Sheets("請求書").PrintOut From:=1, To:=236, Copies:=1, Collate:=True, Preview:=False End Sub で、いかがなもんでしょうか?
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17069)
下記例のテストで納得して考えてください。 (例データ)A1:C3 11 12 13 21 22 23 31 32 33 まずA2:B2をセル結合する。 そして下記を標準モジュ-ルに貼りつけて実行する。 Sub test01() Dim cl As Range For Each cl In Range("a1:c3") If cl.MergeCells = True And cl = "" Then MsgBox "mergecell skip" Else MsgBox cl & " r=" & cl.Row & ",c=" & cl.Column End If Next End Sub 次にセル結合を解除し、A1:C3をセル結合する。 上記を実行する。これでmergecell skipのし方は 良いでしょう。 And cl = "" がないと、結合セルがすべてスキップされてしまうので、手直しするわけです。 MsgBox cl & " r=" & cl.Row & ",c=" & cl.Column の部分に本当の処理を書くと良い。 StepがなければForEach文の利用が簡潔なんですが。 既回答のIf cells(r,1).Merge = True Then の部分は 上記の If cl.MergeCells = True が正しいと思いますが質問者がご確認下さい。
With Application If Len(.Cells(2, 1).Value) = 0 Then .WorkSheets("請求書").PrintOut From:=1, To:=236, Copies:=1, Collate:=True, Preview:=False End If End With 結合セルの値は、左上隅の座標を参照すれば取得できます。(A2、A3のセルが結合されている場合、A2を参照すればよいので、Cells(2, 1)の値を参照すればよい) 老婆心ながら、「原作」の問題点を指摘しておくと、 ・Option Explicit ステートメントがない。 ・変数pは不要。 ・無駄にGoTo文が使用されている。(原作者が Exit For、Exit Sub の構文を知らなかった?)
補足
重要な事を書いてなっかたです A2-3の次はF2-3,K2-3と5列ずつ ステップしていきたいのです 尚、20列目には常に文字が入力されてますので A2-3の次はF2-3,K2-3と5列ずつを参照したいのです よろしくお願いいたします
補足
走るのですがやはり20行目を読んでか 最後のペ-ジまで印刷します A-6セルの結合無しを参照してもよいのですが