『マクロを実行する前にセルが空白か確認する』(初心者ウーマン) マクロを実行するにあたりP13セルの数字をみてマクロを選んで実行させたいのですが、 それはCallで呼ぶことができるみたいなのですが、 P13セルが1の時にはMacro1を実行するようにするのですが 実行する前にD2セルとD6セルのうち一つでも空白の場合は 空白セルがありますとメッセージを流してマクロの実行をしないようにしたいです。 またP13セルが2の時にはMacro2を実行するようにするのですが 実行する前にD2セルとD6セル以外にD4セル、D5セルのうち一つでも空白の場合は 空白セルがありますとメッセージを流してマクロの実行をしないようにしたいです。 このようにP13セルの数字によって別々の空白セルがあった場合には マクロを実行しないで警告メッセージを流すことはできますか? よろしくお願いします。 < 使用 Excel:Excel2010、使用 OS:Windows7 > ---- できます。 Selectで分けるとよいかと。 (稲葉) 2019/01/31(木) 15:36 ---- できますか?、じゃありません。 質問する前に、まずは自分で考えて、調べて、コーディングして、デバッグしてください。 回答者をロボット扱いしないで! Sub test() Select Case Range("P13") Case 1 If Range("D2") = "" Or Range("D6") = "" Then MsgBox "空白セルがあります", vbCritical, 1 Exit Sub End If Call Macro1 Case 2 If Range("D2") = "" Or Range("D6") = "" Or _ Range("D4") = "" Or Range("D5") = "" Then MsgBox "空白セルがあります", vbCritical, 2 Exit Sub End If Call Macro2 End Select End Sub P13が1でも2でもない場合はどうするのかなぁ?、とか思いますが、ご自分で考えてください。 (???) 2019/01/31(木) 15:53 ---- 最近の???さん優しいですよね・・・。 (稲葉) 2019/01/31(木) 16:00 ---- お二人ともありがとうございました。 マクロを知って日が浅く、普段はマクロの記録から記録してるのが主で わからない事は調べてるつもりなのですが どうしても組み方等がわからずついつい質問をしてしまいました。 マクロについてわかりやすいサイト等おすすめがあれば教えていただければ そちらを参考に自分で考えたいと思います。 回答者様をロボット扱いしてるつもりはないので もしそのように感じたのであればすいませんでした。 (初心者ウーマン) 2019/01/31(木) 16:13 ---- VBAといえど、立派なコンピュータ言語のプログラミングです。 学校の授業とは全く逆で、どこかで学んで覚える事なんてどうでも良くて、必要なときに調べて、書いて、動かして、デバッグ、という事を繰り返すものです。 自分で考えていれば、「できますか?」なんて質問にならず、「こうしたいけどこうなってしまう」という質問になるはず。 適切なキーワードを指定して素早く調べられるようになれば作るのが早くなっていくし、不具合を見つけて修正する事を繰り返すうちに、同じ不具合を出さないようになっていくものなので、お薦めサイトなんて探さずに、ひたすらググってみてください。 何をキーワードにすれば良いか、それを試し続けてみてください。(やりたい事を簡潔に書いて、スペースで区切って、excel とか vba とか 数式 とかを一緒に指定するのが基本) (???) 2019/01/31(木) 16:31 ---- 同意見ですが、ちょっとずつ参考サイト載せたので、動かしながらやってみてください。 Option Explicit Sub test() Stop 'F8を押して、ステップ実行しながら挙動を確かめてください。 'https://www.239-programing.com/excel-vba/basic/basic023.html '変数宣言 'http://officetanaka.net/excel/vba/variable/ Dim msg As String 'Selectステートメント 'http://officetanaka.net/excel/vba/statement/SelectCase.htm 'Rangeオブジェクト Valueプロパティ 'http://www.asahi-net.or.jp/~ef2o-inue/vba_k/sub04_070_10.html Select Case Range("P13").Value Case 1 msg = chkBLANK(Range("D2,D6")) 'Ifステートメント 'https://vba-code.net/basic/if/ If msg <> "" Then MsgBox msg & "が空白です" 'MsgBox関数 'https://www.moug.net/tech/exvba/0100051.html Else Call macro1 End If Case 2 msg = chkBLANK(Range("D2,D6,D4,D5")) If msg <> "" Then MsgBox msg & "が空白です" Else Call macro2 End If End Select End Sub 'Functionプロシージャ 'http://www.excel-wing.com/study/macro/588 Private Function chkBLANK(rng As Range) As String Dim r As Range Dim Result As String 'For Eachステートメント 'http://officetanaka.net/excel/vba/speed/s5.htm For Each r In rng If r.Value = "" Then Result = Result & "," & r.Address(0, 0) Next r chkBLANK = Mid$(Result, 2) End Function (稲葉) 2019/01/31(木) 16:47 ---- お二人ともありがとうございました。 少しづつ勉強していきたいと思います。 (初心者ウーマン) 2019/01/31(木) 17:01