こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

VBAによる条件分岐がうまくいきません

請求書フォームに印刷のコマンドボタンを貼り付け、以下の内容を印刷というマクロ名で登録しましたが、うまくいきません。

請求書を作成した時点で、印刷用シート「請求書1ページ」と「請求書2ページ」に同じ内容が表示されるようにしています。請求書画面で印刷ボタンを押したときに、1ページ用の画面か、2ページ用の画面を表示したいわけです。

最初に2ページ印刷用の「請求書2ページ」を見て、2ページ目の最初の行("A55")が空欄であれば、「請求書1ページ」の印刷画面を出し、2ページ目の最初の行("A55")が空欄でなければ、「請求書2ページ」の画面を出す命令文を以下の通りにしたのですが、「インデックスが有効な範囲にありません」と出ます。
("B3")は会社名が入っているセルです。if文でも構わないのですが、どこか記述が間違っているみたいです。

Sub 印刷()
Select Case True
Case Worksheets("請求書2ページ").Range("A55") = ""
 Worksheets("請求書1ページ").Range("B3").Select

Case Worksheets("請求書2ページ").Range("A55") <> ""
 Worksheets("請求書2ページ").Range("B3").Select
End Select
End Sub

投稿日時 - 2018-03-01 23:49:59

QNo.9434166

困ってます

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

#1です。
いきなりセルを選択するのではなく、一度対象のシートをアクティベートしてからセルを選択したらどうでしょう?

Worksheets("請求書2ページ").Activate
Range("B3").Select

という感じです。

投稿日時 - 2018-03-02 14:11:11

お礼

ご指摘通り下記マクロを実行したところ、うまく動作しました。 ありがとうございます。m(_ _)m

Sub 印刷()

Worksheets("請求書2ページ").Activate
Range("A55").Select

If Range("A55").Value = "" Then
Worksheets("請求書1ページ").Activate
Range("B3").Select

Else
Worksheets("請求書2ページ").Range("B3").Select
End If

End Sub

投稿日時 - 2018-03-02 20:25:55

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(2)

手元にエクセルがないので実際に確認できないのですが、まずこれで走るかどうか試してみてください。
Sub 印刷()
Select Case Worksheets("請求書2ページ").Range("A55").Value
Case ""
 Worksheets("請求書1ページ").Range("B3").Select
Case Else
 Worksheets("請求書2ページ").Range("B3").Select
End Select
End Sub

これで走ればいいのですが・・・

とはいえ、これはIFで書く場面ですよ。
Sub 印刷()
If Worksheets("請求書2ページ").Range("A55").Value = "" Then
 Worksheets("請求書1ページ").Range("B3").Select
Else
 Worksheets("請求書2ページ").Range("B3").Select
End If
End Sub

こっちはきっと走るはずです。

投稿日時 - 2018-03-02 03:55:07

補足

ご回答いただきありがとうございます。現在Excel2016を使用しています。
下記マクロを実行すると、以下のエラーが出ました。

実行時エラー '1004'
Range クラスのSelectメソッドが失敗しました。

デバッグを実行すると、Worksheets("請求書1ページ").Range("B3").Selectの文章が黄色で選択されて止まっています。

Sub 印刷()
If Worksheets("請求書2ページ").Range("A55").Value = "" Then
 Worksheets("請求書1ページ").Range("B3").Select
Else
 Worksheets("請求書2ページ").Range("B3").Select
End If
End Sub

このブックに問題がないか、新規でブックを作成して試したのですが、結果は同じでした。

別のパソコンもExcel2016ですが、マクロが実行できるように、マクロ文にある同じシート名を作成して「請求書2ページ」の("A55")に適当な文字を入れて実行したのですが、同じエラーで止まりました。

ちなみに、下記マクロ分でも全く同じエラーが出て止まります。Excel2010で試しても同じでした。

Sub 印刷()
Select Case Worksheets("請求書2ページ").Range("A55").Value
Case ""
 Worksheets("請求書1ページ").Range("B3").Select
Case Else
 Worksheets("請求書2ページ").Range("B3").Select
End Select
End Sub

Excel2010で実行しても、同じエラーが出ます。

「請求書作成」シートには色々な会社名が出てますので、フィルターで一社にしてから、可視セルを作業用フォルダーにコピーして、作業用フォルダーの内容を「請求書印刷1ページ」と「請求書印刷2ページ」に表示させるようにしています。

そこで「請求書作成」シートの("L1")セルに=subtotal(3,A:A)-1を入れて行数を取得して下記のマクロ分を作って、うまく動作することを確認しました。請求書1印刷及び請求書2印刷は単純にシート名、セル番号を開くマクロ文を入れています。("請求書1ページ")シートには24行まで入ります。25行目からは("請求書2ページ")が必要となります。

Sub 印刷オプション()
Select Case True
Case Range("L1") <= 24
Call 請求書1印刷

Case Range("L1") > 24
Call 請求書2印刷
End Select
End Sub

しかし、ご提示頂いたマクロ文でなぜうまくいかないのか、不思議です。

投稿日時 - 2018-03-02 11:05:27

お礼

ご回答いただきありがとうございます。現在Excel2016を使用しています。
下記マクロを実行すると、以下のエラーが出ました。

実行時エラー '1004'
Range クラスのSelectメソッドが失敗しました。

デバッグを実行すると、Worksheets("請求書1ページ").Range("B3").Selectの文章が黄色で選択されて止まっています。

Sub 印刷()
If Worksheets("請求書2ページ").Range("A55").Value = "" Then
 Worksheets("請求書1ページ").Range("B3").Select
Else
 Worksheets("請求書2ページ").Range("B3").Select
End If
End Sub

このブックに問題がないか、新規でブックを作成して試したのですが、結果は同じでした。

別のパソコンもExcel2016ですが、マクロが実行できるように、マクロ文にある同じシート名を作成して「請求書2ページ」の("A55")に適当な文字を入れて実行したのですが、同じエラーで止まりました。

ちなみに、下記マクロ分でも全く同じエラーが出て止まります。Excel2010で試しても同じでした。

Sub 印刷()
Select Case Worksheets("請求書2ページ").Range("A55").Value
Case ""
 Worksheets("請求書1ページ").Range("B3").Select
Case Else
 Worksheets("請求書2ページ").Range("B3").Select
End Select
End Sub

Excel2010で実行しても、同じエラーが出ます。

「請求書作成」シートには色々な会社名が出てますので、フィルターで一社にしてから、可視セルを作業用フォルダーにコピーして、作業用フォルダーの内容を「請求書印刷1ページ」と「請求書印刷2ページ」に表示させるようにしています。

そこで「請求書作成」シートの("L1")セルに=subtotal(3,A:A)-1を入れて行数を取得して下記のマクロ分を作って、うまく動作することを確認しました。請求書1印刷及び請求書2印刷は単純にシート名、セル番号を開くマクロ文を入れています。("請求書1ページ")シートには24行まで入ります。25行目からは("請求書2ページ")が必要となります。

Sub 印刷オプション()
Select Case True
Case Range("L1") <= 24
Call 請求書1印刷

Case Range("L1") > 24
Call 請求書2印刷
End Select
End Sub

しかし、ご提示頂いたマクロ文でなぜうまくいかないのか、不思議です。

投稿日時 - 2018-03-02 20:29:48

あなたにオススメの質問