[[20250327132436]] 『マクロで未入力時は警告してマクロを終了するには』(スイム) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) |

| 全文検索 | 過去ログ ]

 

『マクロで未入力時は警告してマクロを終了するには?』(スイム)

 以下の様なマクロがあります。

 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.