• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:EXCEL2000 VBAにてセルの入力制限とon errorについて)

EXCEL2000 VBAにてセルの入力制限とon errorについて

このQ&Aのポイント
  • 数値のセルに文字列をいれるとVBAがこけてしまいます。入寮制限をかけたいのですが、on errorのかけ方がわかりません。
  • 数値のセルに文字列をいれるとVBAがエラーを起こし、処理が中断されてしまいます。入力制限を設けてこのようなエラーを回避する方法を教えてください。また、on errorの使い方も教えていただきたいです。
  • EXCEL2000 VBAを使用していますが、数値のセルに文字列を入力するとエラーが発生し、プログラムが停止してしまいます。この問題を解決するために、どのように入力制限を設けることができるのか教えてください。また、on errorを使用してエラーハンドリングをする方法も教えていただきたいです。

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

  • ベストアンサー
回答No.1

On Error Goto ~は始めのほうで使います。 Sub Test_Sample() Dim ??? as ???? On Error GoTo ErrorHandle  '処理 Exit Sub ErrorHandle:  'エラーが発生した時の処理 End Sub エラーが発生した時の処理は例えば、メッセージボックス等を表示してどこが間違ってるかをいったりするとか。 処理の中にStr="~が間違っています"というようなのを代入するコードをいれます。 また別の方法で、それが数値として使えるかどうか判断するには、IsNumeric関数を使います。 If IsNumeric(A) Then msgbox("数値です") else msgbox("数値ではありません") End If というコードがあったとして、 A="123" だと「数値です」と表示され、 A="アイウ" だと「数値ではありません」と表示されます。

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

関連するQ&A

  • EXCELのVBAでセル値の移動でエラー

    EXCEL2002のVBAでセル値の移動をVBAでやりたいのですが (1)の様に1行は出来るのですが、(2)の様に2行を移動させるとエラー (実行時エラー1004 アプリケーション定義またはオブジェクト定義のアラーです。)が出てしまいます。 (2)のマクロでどうしてエラーが出るのか分かりません。 エラーを出さずに2行目を移動させる方法を教えてください。 (1)_________________________________________________ If Range("L1") <> detachn Then i = 9 While i >= 1 Cells(1, i + 13).Value = Cells(1, i + 12).Value i = i - 1 Wend Cells(1, 13).Value = Range("L1").Value datachn = Range("L1").Value End If (2)_______________________________________________ If Range("L1") <> detachn Then i = 9 While i >= 1 Cells(1, i + 13).Value = Cells(1, i + 12).Value Cells(2, i + 13).Value = Cells(2, i + 12).Value ←ここでエラー i = i - 1 Wend Cells(1, 13).Value = Range("L1").Value Cells(2, 13).Value = Range("L2").Value datachn = Range("L1").Value End If

  • VBAで実行時エラー'13': がでます

    初歩の初歩ですいません。 VBAで Dim A As Integer Dim B As Integer Dim C As Integer Dim gokei As Integer For i = 8 To 70 A = Cells(i, 4).Value B = Cells(i, 5).Value C = Cells(i, 6).Value goukei = A + B + C Cells(i, 7) = goukei Next i としていますが A = Cells(i, 4).Value のところで今使っているシートだと止まってしまいます。 新規でワークシートを使って仮に数字を代入すると普通に動きます。 今使っているシートもセル内には =100 と入力して 100 と表示され セルの書式設定も数値になってるんですがどうしてでしょうか?

  • vbaでセルとセルの積を求める方法

    添付ファイルにある様なI列:原価xJ列:販売数量の積をK列:原価計表示させる場合ですが K列に関数(ixJ)を入れれば求められるのはわかりますが、行数がどんどん増えて行く為、K列に関数を入れておくと重くなるので出来ればvbaでいっきにI列とJ列の積をK列に出力したいのですがvbaでのワークシート関数の書き方がよくわからず困っております。 どなたか御教授願います。  ちなみに原価列、販売数量列の列数は毎日増え続けていきます。(同じペースで)

  • セルの交点に入力するには?

    あるセルとあるセルの交点に変数に格納した値を入力したいのですが、うまくいきません。 どなたかご教授をお願いできないでしょうか。 VBAを以下にご紹介します。s,e,aの変数はStringで定義しています。Longだとemptyになるようなので・・・ .Cells(i, t).Value = Format(Now(), "yyyy/mm/dd AM/PM") s = Me.s.Value 'ユーザフォームから入力された値を格納 16桁の数値 e = .Cells(i, t).Value a = Me.a,.Value'ユーザフォームから入力された値を格納 16桁の数値 Intersect(Range("$B:$B").Find(s, Lookat:=xlWhole).EntireRow, Range("$1:$1").Find(e, Lookat:=xlWhole).EntireColumn).Value = a これで実行すると、 「実行時エラー91 オブジェクト変数、またはwithブロック変数が設定されていません。」 となってしまいます。 よろしくお願いします。

  • 【Excel VBA】セルが塗りつぶされているものを探す方法を教えてください!

    VBA初心者です。 お分かりになる方がいらっしゃったら、教えてください。 プロシージャを書いていただけると本当にありがたいです! 次のようなデータがあって、セルが赤く塗りつぶされているものがあれば、「データが間違っています」、なければ「OKです!」とメッセージボックスを表示したいのですが、どのようにすればよいかわかりません。  A B   C   D 1 No.1 完了(赤) りんご  2 No.2 受付  みかん 3 No.3 完了  みかん ○ ちなみに、B1のセルを塗りつぶすのは、 その前に、B列が"完了"でD列が""空白のものを検索し、赤く塗りつぶす構文を入れています。 Dim myData as integer myData=Range("B1000").End(xlUp).Row For i = myData To 2 Step -1 If Cells(i, 2).Value = "完了" And Cells(i, 4).Value = "" Then Cells(i, 2).Interior.Color = vbRed End If Next i この後にメッセージボックスが出るようにしたいです! よろしくお願いいたします。

  • EXCELのマクロで数値比較

    「数量」「単価」「金額」のEXCELの表があり「金額」欄が「入力」であったり「計算式」であったりするため「金額」の不整合をチェックするマクロを作りました。(コードの一部は下記) For cntR = 5 To MaxRow If Cells(cntR, 8).Value <> _ Application.RoundDown(Cells(cntR, 6).Value * Cells(cntR, 7).Value, 0) Then Cells(cntR, 23) = "計算違い" End If Next 計算違いとは思えないのに”計算違い”となってしまいます。 テストした表の内容 数量:200 単価:20、20.1、20.3・・・・・20.9、21 金額:=数量*単価の計算式が入っている。 マクロ実行後”計算違い”となってしまうケース。 単価:20.1と20.4の時 ※金額に手入力してみる:”計算違い”になりません。 ※金額欄の計算式を変えてみる=Rounddown(数量*単価,0):”計算違い”になりません。 どこに問題があるのか特定できずにいます。 EXCEL2007・2000の両バージョン下でマクロに手を加えてます。

  • vbaにおいて、セルのエラー検出に関して

    vbaにてセルに入力する数式のエラー検出に関して教えてください。 iserror関数で検出できない数式を簡単に検出する方法ありませんか? sub test() dim str as string str=" C2*C3* " cells(5,7).value=str end sub 簡単なVBAのコードですが、*の右側はセル相対参照もセル絶対参照も数値も入っていませんので、数式としてはエラーです。 strの値を(5,7)のセルに放り込んだら、vbaのエラーで停止してしまいます。 かといって、iserror()を使って、 sub test() dim str as string str="C2*C3*" if iserror(str)=true then else cells(5,7).value=str end if end sub としても、エラーをはじいてくれず、VBAでもエラーを出力してしまいます。 力業で、strの数式エラーをはじくしか方法はないのでしょうか? インターネットを調べているのですが、的を射た答えが出てきません。 どなたか詳しい方ご教示ください。

  • EXCEL→SQL VBAを簡略化したい

    EXCELのVBAを使って、SQLサーバーに接続し、 データテーブルを開き、データを200個(xが100個、yが100個) 書き込みさせたいプログラムを作っています。 強引に1つ1つ書き込みし、200個登録は出来たのですが、 もっとプログラムを簡略化したいと思います。 以下に内容をしめします。 ------------------------------------------- 'SQLデータベースに接続 Set rs = CreateObject("ADODB.RecordSet") Set CN = CreateObject("ADODB.Connection") CN.ConnectionString = "Driver={SQL Server};" & _ "server=○○○.○○.○○.○○; database=DB ; uid=ID; pwd=1234;" CN.Open '-----[Dataテーブル] ----- Set rs = New Recordset rs.Open "Data", CN, adOpenKeyset, adLockOptimistic '[Dataテーブル]に書込み rs.AddNew Worksheets("Sheet1").Select '☆☆☆ rs!x1 = Cells(10, 5).Value rs!x2 = Cells(11, 5).Value rs!x3 = Cells(12, 5).Value rs!x4 = Cells(13, 5).Value    ・    ・     ・    ・ rs!x100 = Cells(109, 5).Value rs!y1 = Cells(10, 7).Value rs!y2 = Cells(11, 7).Value rs!y3 = Cells(12, 7).Value rs!y4 = Cells(13, 7).Value    ・    ・     ・    ・ rs!y100 = Cells(109, 7).Value '☆☆☆ '保存 rs.Update MsgBox "追加しました" '後処理 rs.Close: Set rs = Nothing CN.Close: Set CN = Nothing '終了処理 Set rs = Nothing Set CN = Nothing ------------------------------------------- '☆☆☆で挟まれた部分を繰り返し文で簡潔にプログラミングしたいです。 自分が考えた以下の分では、エラーが出てしまいました。   i = 1   n = 10 Do While i < 100    rs!x"& i &" = Cells(n, 5)    rs!y"& i &" = Cells(n, 7)   i = i + 1   n = n + 1 Loop よりシンプルな構文にしたいと思います。 お手数おかけいたしますが、わかる方いらっしゃいましたら 教えて下さい。

  • Excel VBAのFormulaでアプリケーションエラーが発生。

    Excel VBAのFormulaでアプリケーションエラーが発生。 フォーマットが統一された複数のExcelBookから特定の値を別のbookに一覧化するマクロを作成中ですが、エラーで止まり原因も分かりません。 for文で回してますが、エラーとなったコードをほぼそのまま書くと下記のような形です。 Cells(i, j).Formula = _ "=[" & Cells(i, 3).Value & "\]test!" & Cells(2, j).Value 上記の文字列「test」はbookのシート名です。 Cells(i, 3).Valueには  「C:\tmp\testbook.xls」 のようなbookのパスを Cells(2, j).Valueには  「A1」 のようなセル位置の文字列を記載し、  ='C:\tmp\[testbook.xls]test'!$A$1 という関数を代入したいのですが冒頭の通り、エラーで先に進まず原因も不明です。 対処方法を教えて頂ければと思います。 上記の関数をExcelに貼り付ければちゃんと値を表示します。 また、VBAのウォッチウィンドウでも関数は認識している様ですが、 Excelへの代入だけできません。 ちなみにCells(i, j).FormulaではなくCells(i, j).Valueでもダメでした。 非常に困っています。よろしくお願いします。

  • エクセルVBAでEvaluate関数で指定子を使う

    テーブル設定された表があります。 表には数字や数式が入っているのですが、 運用しているうちに数式が増え、再計算が時間が長くてストレスになってます。 時間を短くするため、VBAを使用して数式の計算結果と同じ値を設定(“値のみ貼り付け”と同じこと)をして数式を減らそうとしています。 ただし、数式は今後も追加・変更されるため、 そのときのVBAソースコード修正の手間を最小限にしたいという事情もあります。 まずは 【ソースコード1】 For i = 1 To 10000 Cells(i, 金額列).Value = Evaluate("[@単価]*[@数量]") Next i このようなコードを書いたのですが、エラー値になってしまいます。 Evaluate関数で指定子(角かっこ)は使えないのでしょうか。 使えないなら別の方法として、 数式を設定した後で、値をもう1度代入する方法を考えてます。 【ソースコード2】 For i = 1 To 10000 Cells(i, 金額列).Formula = "[@単価]*[@数量]" Next i Range("A1:Z10000").Value = Range("A1:Z10000").Value ’計算結果だけをもう1度代入して数式を消す 他に良いやり方があったら教えてください。

このQ&Aのポイント
  • 既に登録されているアプリがデスクトップに表示されない問題について、解決方法を教えてください。
  • デスクトップに表示されない登録済みアプリを表したい時、どのようにすれば良いですか?
  • デスクトップに登録されたアプリが表示されないトラブルの解消策を教えてください。
回答を見る

専門家に質問してみよう