- ベストアンサー
マクロが思うように動きません
エクセル2007です。 初心者です。 マクロが思うように動きません。 指定のセルが空白の場合、msgboxを表示して、処理を抜ける 空白でない場合は、処理をつつける。 と言う事をしたいです。 with~の後が問題だと思うのですが・・ Sub 受注履歴書き込み() Dim ws01 As Worksheet, ws02 As Worksheet Dim r As Long, c As Integer, tmp As Long Set ws01 = Worksheets("受注書") Set ws02 = Worksheets("受注履歴") ws01.Activate With ws01 If .Range("C2").Value = "" _ And .Range("M2").Value = "" _ And .Range("M11").Value = "" _ And Worksheets("粗利報告書").Range("D3").Value = "" Then MsgBox "受注Noが空白です。処理を中止します。" Exit Sub ws02.Cells(r, 1).Value = .Range("C2").Value ' 受注No ws02.Cells(r, 9).Value = .Range("A40").Value ' 備考 ws02.Activate End If End With End Sub 採点願えますでしょうか? 宜しくお願い致します。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
どう上手く行かないのでしょう? 「メッセージが上手く出ない(if文の中に入らない)」と言った感じでしょうか? であれば、if文を一まとめにしないで、小分けに If .Range("C2").Value = "" If .Range("M2").Value = "" ・・・ End If End If と書いてやってデバッグとればわかると思います。 ついでに・・エラーでなかった場合の処理は >ws02.Cells(r, 1).Value = .Range("C2").Value ' 受注No >ws02.Cells(r, 9).Value = .Range("A40").Value ' 備考 >ws02.Activate これですか? であれば、 If .Range("C2").Value = "" _ And .Range("M2").Value = "" _ And .Range("M11").Value = "" _ And Worksheets("粗利報告書").Range("D3").Value = "" Then MsgBox "受注Noが空白です。処理を中止します。" Exit Sub else ws02.Cells(r, 1).Value = .Range("C2").Value ' 受注No ws02.Cells(r, 9).Value = .Range("A40").Value ' 備考 ws02.Activate End If こうなりませんか?
その他の回答 (2)
- A88No8
- ベストアンサー率52% (836/1606)
こんにちは 念のためですが、プログラムは「4つのデータがすべて空白(ヌル)の場合だけ」エラーにしていますが、問題ないですか? 4つのデータがすべて受注Noなのかな?と素朴な疑問をもちました。
補足
4つのデータのうち、空白が1つでもあれば、 処理を止めたいです。 ANDではないですか・・・(汗)
- mshr1962
- ベストアンサー率39% (7417/18945)
If .Range("C2").Value = "" _ And .Range("M2").Value = "" _ And .Range("M11").Value = "" _ And Worksheets("粗利報告書").Range("D3").Value = "" Then MsgBox "受注Noが空白です。処理を中止します。" Exit Sub Else '←これが抜けてるからでは? ws02.Cells(r, 1).Value = .Range("C2").Value ' 受注No ws02.Cells(r, 9).Value = .Range("A40").Value ' 備考 ws02.Activate End If
お礼
あぁ、すみません。勉強不足で。 セルに値が入力されていたからでした。 自己解決できました。 有難うございました!!
補足
if 小分けでやってみました。 With ws01 If .Range("C2").Value = "" Then If .Range("M2").Value = "" Then If .Range("M11").Value = "" Then If Worksheets("粗利報告書").Range("D3").Value = "" Then End If End If End If End If MsgBox "受注Noが空白です。処理を中止します。" にしたところ、 If .Range("M2").Value = "" Then から、すぐに End If に飛んでいることがわかりました。 何故かしら・・・ 参照セルは、結合セルですが、飛ばされていないセルも 結合されています。