• ベストアンサー

エクセルで

お世話になります 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(セルの結合)が空白だったらに 変えるのにはどしたらいいでしょうか よろしくお願いいたします

質問者が選んだベストアンサー

  • ベストアンサー
  • diashun
  • ベストアンサー率38% (94/244)
回答No.2

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 で、いかがなもんでしょうか?

hajihaji
質問者

補足

走るのですがやはり20行目を読んでか 最後のペ-ジまで印刷します A-6セルの結合無しを参照してもよいのですが

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

下記例のテストで納得して考えてください。 (例データ)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 が正しいと思いますが質問者がご確認下さい。

noname#5584
noname#5584
回答No.1

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 の構文を知らなかった?)

hajihaji
質問者

補足

重要な事を書いてなっかたです A2-3の次はF2-3,K2-3と5列ずつ ステップしていきたいのです 尚、20列目には常に文字が入力されてますので A2-3の次はF2-3,K2-3と5列ずつを参照したいのです よろしくお願いいたします

関連するQ&A

  • EXCELマクロ

    下記は0~9が重複せずに3つ、順番も考慮してシートに出すものです。 いわゆる=PERMUT(10,3)、数学で言えば10P3を力技で求めるもの。 さて、3つ程度のループなら下記のようにifを書いても良いのですが これが多重になればなるほど、ifが増えるので面倒になります。 なにか賢いアルゴリズムあったらご教示ください。 (使用目的は頭の体操、例えばポーカーの役の1回目に出る確率とかです。  本計算とは関係ありませんが、理屈で考えたものを検証したい為です。) Sub test() r = 2 For a = 0 To 9 For b = 0 To 9 If b = a Then GoTo 10 For c = 0 To 9 If c = a Then GoTo 20 If c = b Then GoTo 20 Cells(r, 1) = a Cells(r, 2) = b Cells(r, 3) = c r = r + 1 20 Next 10 Next Next End Sub

  • エクセルマクロ

    お世話になります。 下記の記述でどこがおかしいのでしょうか 上手く印刷できません。 Sub Macro13() ' ' 'Dim i As Long For i = 1 To 4 Range("Ai:Ei").Select Selection.Copy Sheets("カード").Select Range("G1:K1").Select Selection.Paste Range("A1:F21").Select Application.CutCopyMode = False ActiveSheet.PageSetup.PrintArea = "$A$1:$F$21" ActiveWindow.SelectedSheets.PrintOut From:=1, To:=1, Copies:=1, Collate _ :=True Next i End Sub

  • Excel VBAで自動印刷プログラムの作り方を教えて下さい。

    あるファイルにある全てのグラフを印刷するマクロを作りたいのですが、 どのようにすれば良いのでしょうか? Sub Macro2() ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True End Sub に何を付け足せば良いのでしょうか? 何卒よろしくお願い致します。

  • エクセル VBA シート毎に同じ動作をしたい・・・

    エクセルVBAでシート毎に同じ動作をしたいのです。 例えば A・B・C・D・E とシートがあるのですが、A以外のものを全部印刷したいのです。 今までは Worksheets("B").Select Range("A1:AG44").Select Selection.PrintOut From:=1, To:=1, Copies:=1, Collate:=True Worksheets("C").Select Range("A1:AG44").Select Selection.PrintOut From:=1, To:=1, Copies:=1, Collate:=True と これを繰り返していたのです。 これをやると文章も長くなりますし、シート名が変わったときには、VBAもすべて書き直しと言う状況になってしまいます。 何か打開策はありますでしょうか? よろしくお願いいたします。

  • エクセルVBA実行後にファイルを自動で閉じるVBA

    Sub 印刷() ' ' Macro1 Macro ' マクロ記録日 : 201X/X/X ユーザー名 : AAAA ' ' If MsgBox("実行する場合はOK、間違ってこのボタンをクリックした場合はキャンセルをクリックしてください。(日付確認後、印刷のこと。)", vbOKCancel) = vbCancel Then End End If 'A印刷 ChDir "L:\フォルダB\X\新規" Workbooks.Open Filename:="L:\フォルダB\X\新規\記録表\工程分析.xls" Sheets("毎日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("月曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("火曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("水曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("木曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("金曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("土曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Sheets("日曜日印刷").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True ActiveWorkbook.Save ActiveWindow.Close あるエクセルファイルのボタンに上記のVBAが記入されています。 そのボタンを押すと「工程分析.xls」ファイルを呼び出し各シートを自動印刷して保存して閉じるVBAです。 質問ですがボタンの配置されたあるエクセルファイルの上記VBAの処理を全て完了した後に上書き保存を自動で実行し、自動であるエクセルファイルを閉じるVBAはどの様に追加すれば良いでしょうか?

  • Excel エクセル マクロ VBA

    エクセルマクロで指定したシート(2シート目)から末尾のシートまで印刷したい場合、下記のようなコードで良いでしょうか? Sub Sample1() Dim i As Long For i = 2 To Sheets.Count ActiveWorkbook.Sheets(i).Select (Replace:= False) Next i Activesheet.PrintOut Preview:=True End Sub

  • エクセル マクロで教えてください

    下記のマクロがうまく働きません SUB印刷01は単独ではいくのですが、繰返しをするとプレビューの行で止まります。SHEETオブジェクトがおかしいというのですが私には分かりません宜しくお願いします Sub 印刷01() With ActiveSheet.PageSetup .PrintQuality = 600 .CenterHorizontally = True .CenterVertically = False .Orientation = xlLandscape .Draft = False .PaperSize = xlPaperA4 .FirstPageNumber = xlAutomatic .Order = xlDownThenOver .BlackAndWhite = False .Zoom = 47 .PrintErrors = xlPrintErrorsDisplayed End With ActiveWindow.SelectedSheets.PrintPreview ActiveWindow.SelectedSheets.PrintOut From:=1, To:=1, Copies:=1, Collate:=True End Sub Sub 印刷繰返し() Dim WS As Object For Each WS In Sheets WS.Activate Call 印刷01 Next End Sub

  • Excel VBA 印刷設定

    印刷ページ設定で ActiveWindow.SelectedSheets.PrintOut From:=1, To:=3, Copies:=2, Collate :=True の式で、何ページまで印刷するかを、A1セルに入力して決定したいのですが、数式の書き方がわかりません。 A1に2と入力すれば、To:=2と認識するやり方を教えてください。 宜しくお願いします。

  • Excelで両面印刷

    Excel2007を使っています。 プリンタは,両面印刷の設定をしている状態です。 マクロで印刷をかけると,あるシートは両面印刷してくれますが, 違うシートはしてくれません。 シート名が違うだけで,後は全く同じマクロなのに不思議です。 理由をご存じの方,教えてください。 Sub 縮小印刷1() Sheets("縮小印刷1").Select A = InputBox("どこから印刷しますか?") B = InputBox("どこまで印刷しますか?) For I = A To B Step 2 Range("D2").Value = I ActiveSheet.PageSetup.PrintArea = "$A$1:$B$16" ActiveWindow.SelectedSheets.PrintOut Copies:=1 Next I End Sub

  • エクセル VBA

    印刷ページを指定して印刷したいのですが 以下の文章だと何処が間違いなのでしょうか。 Windows("あああ.xls").Activate Sheets("かかか").Select Dim c As Integer c = Range("A1").Value Sheets("さささ").Select ActiveWindow.SelectedSheets.PrintOut From:=1, To:=c, Copies:=1, Collate _ 仕事で詰まってしまいました。 自分のPC(エクセル2000)だと動くのですが、 他のPCへメールで飛ばしたら 最後の文章でエラーが出るそうなんですが。