『マクロで未入力時は警告してマクロを終了するには?』(スイム)
以下の様なマクロがあります。
Sub Macro1()
Dim hensu1 As String Dim hensu2 As String Dim hensu3 As String Dim hensu4 As String Dim hensu5 As Integer Dim hensu6 As Integer Dim hensu7 As Integer
hensu1 = ActiveSheet.Range("P1").Value hensu2 = ActiveSheet.Range("P2").Value hensu3 = ActiveSheet.Range("P3").Value hensu4 = ActiveSheet.Range("P4").Value hensu5 = ActiveSheet.Range("P5").Value hensu6 = ActiveSheet.Range("P6").Value hensu7 = ActiveSheet.Range("P7").Value
myData = Sheets("名前").Range("B3") myData2 = Sheets("名前").Range("B4") myData3 = Sheets("名前").Range("B6") myData4 = Sheets("名前").Range("B7")
Range(hensu1 & hensu5) = myData2 Range(hensu2 & hensu5) = myData Range(hensu3 & hensu5) = myData3 Range(hensu4 & hensu5) = myData4 ・・・・ End Sub
とあります。
B2及びB3が未入力の場合、実行時エラーが出てしまいますので、 未入力の場合、未入力項目があります。と警告が出て 実行時エラーが出ない様にするにはどうしたら良いですか?
< 使用 Excel:Excel2019、使用 OS:Windows10 >
>B2及びB3が未入力の場合、実行時エラーが出てしまいます 代入する側の値の問題ではないと思います。未入力なら単にEmptyが代入されるだけです。
アドレス指定のhensu1 & hensu5のほうに問題がありそうです。 エラーになったときの値をよく調べたらどうですか? (xyz) 2025/03/27(木) 13:52:38
B2及びB3の値によってP1からP7のセルの値が変動する様になっています。 なのでエラーになると思います。
B2及びB3が未入力でない場合はMacro1を実行 B2及びB3が未入力の場合は警告を出す。 ことをしたいです。
よろしくお願いいたします。 (スイム) 2025/03/27(木) 16:11:48
Sub main() If IsEmpty([B2]) Or IsEmpty([B3]) Then MsgBox "B2セルB3セルに空白セルがあります。入力してください" Exit Sub Else Call Macro1 End If End Sub 前提に差異があるならそちらで修正してください。私はここまでとします。 (xyz) 2025/03/27(木) 16:20:51
hensuに問題があるようにしか感じられません hensuに格納されたセルの値をセル番地としてRangeに突っ込んでますが これは本当にやりたいこととあっているのですか? わざわざセルにセル番地を記入し、そこからさらに参照先が変わるような処理を組むのは ちょっとよくわかりませんし、例えば関数でセル番地を返している、というのも考えにくいですし。 xyz様が仰っているように「B2,B3が空白か否か」が趣旨ではなくもっと別のところに問題があると思いますよ ( TKG) 2025/04/16(水) 17:18:09
>なのでエラーになると思います。 推測ではなく明確に問題を見つけてください。 F8キーでステップインしながらローカルウィンドウを確認するのが最も手っ取り早いです ( TKG) 2025/04/16(水) 17:20:16
|[A]|[B]|[C]|[D]|[E]|[F]|[G]|[H]|[I]|[J]|[K]|[L]|[M]|[N]|[O]|[P] [1]|BBB| |CCC|DDD| | | | | | | | | | | |A [2]| | | | | | | | | | | | | | | |B [3]| | | | | | | | | | | | | | | |C [4]| |BBB| | | | | | | | | | | | | |D [5]| | | | | | | | | | | | | | | | 1 [6]| |CCC| | | | | | | | | | | | | | 2 [7]| |DDD| | | | | | | | | | | | | | 3
Sub Macro1()
Dim hensu1 As String Dim hensu2 As String Dim hensu3 As String Dim hensu4 As String Dim hensu5 As Integer Dim hensu6 As Integer Dim hensu7 As Integer
hensu1 = ActiveSheet.Range("P1").Value hensu2 = ActiveSheet.Range("P2").Value hensu3 = ActiveSheet.Range("P3").Value hensu4 = ActiveSheet.Range("P4").Value hensu5 = ActiveSheet.Range("P5").Value hensu6 = ActiveSheet.Range("P6").Value hensu7 = ActiveSheet.Range("P7").Value
myData = Sheets("Sheet1").Range("B3") myData2 = Sheets("Sheet1").Range("B4") myData3 = Sheets("Sheet1").Range("B6") myData4 = Sheets("Sheet1").Range("B7")
Range(hensu1 & hensu5) = myData2 Range(hensu2 & hensu5) = myData Range(hensu3 & hensu5) = myData3 Range(hensu4 & hensu5) = myData4
End Sub
B2、B3が未入力でも、エラーは出ませんでした。、
(趣味本位) 2025/04/16(水) 20:11:23
>B2及びB3が未入力の場合、実行時エラーが出てしまいます
んなこといっても、B2及びB3のコード書いてないので エラーになる方が不思議 出し惜しみなどして、何かに取り憑かれているのでは (不思議ちゃん) 2025/04/16(水) 21:14:39
>myData = Sheets("名前").Range("B3")
B3のコード書いてあったわ でもmyDatahはVariant型だから、何でも入ると思われ エラーになるがわからない
(不思議ちゃん) 2025/04/16(水) 21:29:13
不思議ちゃん様が仰っているようにmyDataは型宣言をしていない、つまりVariant型変数なので B2が空白であろうとどんな文字列や数値だろうと、なにを入れてもエラーにはなりません。仕様上不可能なことをしているわけではないので。
懸念点をあえて挙げるとすれば左辺のmyDataは変数であるのに対し 右辺のSheets("Sheet1").Range("B3")がオブジェクトであることですね。 Sheets("Sheet1").Range("B3").Valueと変更すれば空白であろうが何だろうがエラーにはならないかと思います。その後の空白の場合の処理はxyz様によって既に提示されています。
そして私の発言はすべて無視されていますね。これ以上無視されながら親切に答えるのがあほらしいので、私はここまでとさせていただきます。 ( TKG) 2025/04/17(木) 09:45:29
最後に一つだけ >B2、B3が未入力でも、エラーは出ませんでした。 なら解決では?w 主旨は「実行時エラーを回避しつつ条件分岐したい」ですよね?w ( TKG) 2025/04/17(木) 09:47:22
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.