• ベストアンサー

エクセルVBA記述誤りの解決お願い

A1~A20のセルに入力データが一切無い場合に、入力を促すメッセージを表示させるマクロを作りましたが,「実行時エラー13  型が一致しません」のエラー表示が出ます。 デバックすると下記マクロの「If Range("A1:A20").Value = "" Then」の部分でストップしていました。 いろいろとやってみましたが、うまくゆきません。 If Range("A1:A20").Value = "" Then MsgBox ("参加マークーを入力ください") Exit Sub End If 記述上の誤りがあるようですので、ご教示いただけましたら幸いです。

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

  • ベストアンサー
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

こんばんは! ごく単純に >If Range("A1:A20").Value = "" Then を >If WorksheetFunction.CountA(Range("A1:A20")) = 0 Then としてみてはどうでしょうか?m(_ _)m

whity149
質問者

お礼

ご教示有難うございました。 WorkSheetFunctionを利用するといとも簡単ですね。 見よう見まねで不勉強のためなかなか上達しません。 今後もよろしくお願いします。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.3

Range("A1:A20").Value = "" は何を確認したいのでしょうか。 A1:A20セルがすべて空白かどうか 或いは、一つでも空白がある場合かどうか 一例ですが If WorksheetFunction.CountBlank(Range("A1:A20")) = 20 Then とか If WorksheetFunction.CountBlank(Range("A1:A20")) > 0 Then では。 或いは、シート上のあいているセルに =CountBlank(A1:A20) と入れておいて If Range("B1").Value= 20 Then とかしておいて方が、後あとの変更など考えると便利な場合があります。

whity149
質問者

お礼

早速ご指導いただき有難うございました。 質問の「A1:A20」の確認はすべて空白かの確認でした。 CountBlankを利用することで解決できそうです。 今後もよろしくお願いします。

全文を見る
すると、全ての回答が全文表示されます。
  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

If Trim(Range("A1:A20").Value) = "" Then か If isnull(Range("A1:A20").Value) Then だとどうなります?

whity149
質問者

お礼

hallo-2007さん、tom04さんの方法で解決しました。 いろいろと有難うございました。 今後も初心者のご指導をよろしくお願いいたします。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • エクセルVBAについて

    エクセルVBAについて 下にある、1行目に入力された数値の、選択したセルの数値を、B5セルに表示させるマクロなのですが、1行目が結合していると、うまくB5セルに表示できません。 Private Sub Worksheet_SelectionChange(ByVal Target As Range)  If Target.Count > 1 Then Exit Sub    '●複数セル選択は無視  If Target.Row <> 1 Then Exit Sub    '●1行目以外の選択は無視  If Target.Column > 6 Then Exit Sub   '●F列目以降の選択は無視  If Target.Value = "" Then Exit Sub   '●選択セルが未入力なら無視    Range("B5").Value = Target.Value End Sub このマクロで、結合しているセルをB5に表示させることはできますでしょうか? 1行目で選択するセルは、すべて2つのセルが結合しています。 よろしくお願いいたします。

  • Excelのセルの比較について

    Excelのマクロにてセルの比較を行っています。 A1に"123" A2をハイパーリンクに指定して"123"と表示しています。 表示形式はどちらも通貨で表示しています。 If Range(A1).Value <> Range(A2).Value Then   MsgBox "同じではない" Else   MsgBox "同じ" End If と比較しているのですが"同じではない"が表示されてしまいます。 試しに MsgBox Range(A1).Value と MsgBox Range(A2).Value を表示してみたところ、どちらも"123"と表示されました。 セルに表示されている値で比較するにはどうしたらいいのでしょうか?

  • エクセルVBAの記述で・・・OTL

    エクセルVBAの記述で・・・OTL VBA初心者です。 まず、私が記述した内容を書きます。 Sub 実践練習() Dim tuika As String tuika = Application.InputBox( _ Title:="追加", _ Prompt:="追加する内容を入力して下さい。", _ Left:=650, _ Top:=100, _ Type:=2) If Worksheets("Sheet2").Range("G10").Value <> " FALSE " Then MsgBox "OKです", vbOKOnly + vbDefaultButton2, "追加完了" With Worksheets("Sheet2") .Range("G10").Value = tuika LastRow = Worksheets("Sheet3").Range("A" & Rows.Count).End(xlUp).Row + 1 Worksheets("Sheet3").Range("A" & LastRow).Value = Worksheets("Sheet2").Range("G10").Value End With Else MsgBox "入力が不足しています。", vbOKOnly + vbCritical, "入力ミス" End If End Sub() 完成させたいことは・・・ Sheet1に存在するInputbox(ボタン)を使用し、 Sheet2のG10にFALSE以外が入力されたときは、 MsgBox追加完了のダイアログを表示してSheet2のG10値をSheet3のA列に順番に転送させる。 もしFALSEが入力されてしまったら、 MsgBox入力ミスを表示させて、 Sheet2のG10の値(FALSE)を削除しなさい。 と、記述したいのです。 勿論、上記の記述は完成していません(泣 どなたか、ご教授の程、何卒宜しくお願い致します。 (上記の完成型をお待ちしてます m(_ _)m ) 【環境】 OS:WindowsXP Pro Excel:2003

  • VBA 空白をエラー表示させる!

    ボタンをクリックすると、入力ミスがないように MsgBoxで表示させるものを作りましたが TextBox3を都合のため切り取りました! そしたら、エラー表示され If Controls("TextBox" & i).Text = "" Then ↑黄色く表示されます! どのように下の記述を変えれば良いか教えてください! Private Sub CommandButton5_Click() Dim i As Integer For i = 1 To 9 If Controls("TextBox" & i).Text = "" Then MsgBox "判定入力していない項目がありますよ!", vbInformation, "空欄を見て!" Exit Sub End If Next If MsgBox("記録するよ?", vbOKCancel) = vbOK Then With Worksheets("グラフ") 'アセスメント身体 .Range("U2").Value = TextBox1.Value .Range("U3").Value = TextBox2.Value .Range("U4").Value = TextBox3.Value .Range("U5").Value = TextBox4.Value .Range("U6").Value = TextBox5.Value .Range("U7").Value = TextBox6.Value .Range("U8").Value = TextBox7.Value .Range("U9").Value = TextBox8.Value .Range("U10").Value = TextBox9.Value

  • 印刷後のVBAの実行 (3)

    Private Sub Workbook_BeforePrint(Cancel As Boolean) If ActiveSheet.Name = "Sheet1" Then If Range("D6").Value = "" Then Cancel = True MsgBox ("名前を入力してください") Range("D6").Select Exit Sub End If Else If ActiveSheet.Name = "Sheet2" Then If Range("C11").Value = "" Then Cancel = True MsgBox ("受付時間を入力してください") Range("C11").Select Exit Sub End If Else Exit Sub End If End If If Worksheets("Sheet1").Range("D5") = "不要" Then GoTo P1 ActiveSheet.Range("A70:Y70").Copy If Worksheets("Sheet3").Range("A1").Value = "" Then Worksheets("Sheet3").Range("A1").PasteSpecial Paste:=xlPasteValues Else Worksheets("Sheet3").Range("A65536").End(xlUp).Offset(1, 0).PasteSpecial _ Paste:=xlPasteValues End If Application.CutCopyMode = False P1: ActiveSheet.Range("A1").Select End Sub sheet1のD5に「不要」と入っていたら 24~33行目の作業がキャンセルになりますが sheet2のD5にも「不要」と入っていたら、同じ様にキャンセルできる様に出来ますでしょうか? ご回答お願いします

  • 印刷後のVBAの実行 (2)

    Private Sub Workbook_BeforePrint(Cancel As Boolean)   If ActiveSheet.Name = "Sheet1" Then     If Range("D6").Value = "" Then       Cancel = True       MsgBox ("名前を入力してください")       Range("D6").Select       Exit Sub     End If   Else     If ActiveSheet.Name = "Sheet2" Then       If Range("C11").Value = "" Then         Cancel = True         MsgBox ("受付時間を入力してください")         Range("C11").Select         Exit Sub       End If     Else              Exit Sub     End If   End If   ActiveSheet.Range("A70:Y70").Copy   If Worksheets("Sheet3").Range("A1").Value = "" Then     Worksheets("Sheet3").Range("A1").PasteSpecial Paste:=xlPasteValues   Else     Worksheets("Sheet3").Range("A65536").End(xlUp).Offset(1, 0).PasteSpecial _       Paste:=xlPasteValues   End If   Application.CutCopyMode = False   ActiveSheet.Range("A1").Select End Sub 先日、上記のコードを回答者の方から教えてもらい、とても助かっていますが sheet1のD5に「不要」という文字が入っていた場合、 sheet3への貼り付け(23~30行目の作業)をキャンセルして、最後にsheet1のA1を選択するようにはどの様にしたらいいでしょうか?

  • エクセルVBAについて

    http://okwave.jp/qa/q7236213.html 上記質問の発展形なのですが 同様のことを E列に日付 F列に売上 G列に結果 でやりたいのですが この時A列~C列のマクロも残したままでしたいのですが 下記のように同様のプロシージャーを下段に書けばできると思ったのですが うまくいきません。 Private Sub worksheet_change(ByVal Target As Excel.Range) If Target.Address <> "$A$1" Then Exit Sub If Target = "" Then Exit Sub Range("C10:C65536").ClearContents With Range(Cells(9 + Range("A1").Value, "C"), Cells(Range("A65536").End(xlUp).Row, "C")) .FormulaR1C1 = "=MAX(RC2:R[" & -Range("A1").Value + 1 & "]C2,FALSE)" .Value = .Value End With End Sub Private Sub worksheet_change(ByVal Target As Excel.Range) If Target.Address <> "$E$1" Then Exit Sub If Target = "" Then Exit Sub Range("G10:G65536").ClearContents With Range(Cells(9 + Range("E1").Value, "G"), Cells(Range("E65536").End(xlUp).Row, "G")) .FormulaR1C1 = "=MAX(RC6:R[" & -Range("A1").Value + 1 & "]C6,FALSE)" .Value = .Value End With End Sub どなたかお知恵を拝借できませんでしょうか?

  • エクセル VBAについて。

    Private Sub ComboBox2_Change() On Error Resume Next With Me.ComboBox2 If .ListCount < 0 Then Exit Sub If .Value = "" Then Exit Sub Me.Range("K45").Value = _ Worksheets("マスタ").Range(.List(.ListIndex, 1)).Offset(0, 2).Value Me.Range("K48").Value = _ Worksheets("マスタ").Range(.List(.ListIndex, 1)).Offset(0, 4).Value End With End Sub これをマスタのU列とW列を表示したい場合、どこを変えれば良いのでしょうか? 今はD列とF列が表示されております。

  • エクセルVBAで If~ Then

    If Range("A1") = "" Then Exit Sub と If Range("A1") = "" Then Exit Sub では違うのですか? 通常改行すると思っていたのですが、改行したらエラーになってしまいました。

  • エクセル VBAで

    変動する数値が、セル A1に入る状況で、 該当シートに Private Sub Worksheet_Change(ByVal Target As Range) If Range("A1").Value = 1 Then Range("C62").Value = "○" ElseIf Range("A1").Value = 2 Then Range("C62:C63").Value = "○" ElseIf Range("A1").Value = 3 Then Range("C62:C64").Value = "○" ElseIf Range("A1").Value = 4 Then Range("C62:C65").Value = "○" ElseIf Range("A1").Value = 5 Then Range("C62:C66").Value = "○" ElseIf Range("A1").Value = 6 Then Range("C62:C67").Value = "○" ElseIf Range("A1").Value = 7 Then Range("C62:C68").Value = "○" ElseIf Range("A1").Value = 8 Then Range("C62:C69").Value = "○" ElseIf Range("A1").Value = 9 Then Range("C62:C70").Value = "○" ElseIf Range("A1").Value = 10 Then Range("C62:C71").Value = "○" ElseIf Range("A1").Value = 11 Then Range("C62:C72").Value = "○" ElseIf Range("A1").Value = 12 Then Range("C62:C73").Value = "○" ElseIf Range("A1").Value = 13 Then Range("C62:C74").Value = "○" ElseIf Range("A1").Value = 14 Then Range("C62:C75").Value = "○" ElseIf Range("A1").Value = 15 Then Range("C62:C76").Value = "○" End If End Sub と言ったマクロを記述しましたが、 動作がどうにも重くて困っています。 一度、プレビューをした後は特に遅くなります。 何か良い解決方法はありますでしょうか?

専門家に質問してみよう