いつもお世話になります
今、沢山の数値を扱うプログラムを社内で提供していますが、たまにエラー13が出て
その場所特定に呼ばれます。
プログラムにパスワードが掛かっているので、解除して再計算で場所を特定します
そこでOnError Gotoからエラーメッセージを出そうと考えましたが
その場所が特定できればと思い相談しました
エラーの箇所は単純で
Dim ABC as Double の変数に代入するセルに文字が入っているという時です
もし、そのセルの特定方法が分かれば教えてください
以上、宜しくお願いいたします
No.5ベストアンサー
- 回答日時:
Cells.SpecialCells(xlCellTypeFormulas, xlErrors)
なるほど、関数エラーとは値型の不一致なので違いますね
配布をするような限定的な処理のVBAの場合、メイン処理実行前にエラーチェックをした方が良いかな
今更改修できないかもですが・・・
そもそも数値以外入力できないようにする方法(値の取得方法が分からないので割愛)
入力時のエラーチェック
Changeイベントを使った簡単な例(CDbl関数は適時使用前提、範囲は適当)
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("B2:D10")) Is Nothing Then
With Target
If Not IsNumeric(.Value) Then
MsgBox .Address(0, 0) & "の値 " & .Value & "は適切ではありません", 48, "入力エラー"
End If
End With
End If
End Sub
チェック範囲が多い場合はIntersect範囲を分けるかUnionなどを使う
メイン処理実行前にエラーチェック
Sub CHK_v()
Dim rng As Range
Dim c As Range
Dim strMsg As String
Set rng = Range("B2:D8, B11:B13, E5")
Set rng = Union(rng, Range("F2:F8, Y11, AA5"))
For Each c In rng
If Not IsNumeric(c.Value) Then
strMsg = strMsg & c.Address(0, 0) & "の値 " & c.Value & vbCrLf
End If
Next
If strMsg <> "" Then
MsgBox strMsg & "は数値で入力してください", 48, "入力エラー"
End If
End Sub
ユーザーフォーム、コントロールからなら適切なイベントトリガーで・・
型指定の変数に値を入れているのですから対象範囲は分かっていると思うのですがいかがでしょう・・
No.6
- 回答日時:
shut0325です。
お礼拝見しました。>今は使用者にデータのエラー箇所を知らせたいだけ
ですよね、、なんでそんな難しくするんだろうって感じですが。
エラーが出る原因が数値であるところに文字列が入っている場合と特定できているのだから、セルの値が文字列だったら、そのセルが該当のエラーとなったセル=それ見つけたら表示、、だけでいいかと。
当然、それに色付けたり、別のセルにしたりの処理も簡単なIf文やらFor文の中に盛り込むだけで済ませればいいかと。「知らせる」が具体的にはどんなことなのかもよくわかりませんが。
ご意見、ありがとうございます
何本ものプログラムの開発と解析作業をしているので
効率の良い方法を考えようとしましたがうまく行きませんでした
休日返上で少し改良します
ありがとうございました
No.4
- 回答日時:
> Dim rng As Range
> Set rng = Cells.SpecialCells(xlCellTypeFormulas, xlErrors)
> rng.Select
えっと、ユーザーはセルに任意の値を入力できているわけですから、
Excelが受け付けている以上、Excelはエラーだなんで返してきません。
あなたが求めているのはExcelのエラーではなく業務のエラーですよね。
システムの操作として誤った値が入力されている時、誤った入力箇所にセルを遷移することで、ユーザーに誤りを分からせたい、ということですよね。
例えば数値しか受け付けないのなら
If Not IsNumeric(対象セル.Value) Then
対象セル.Select
Exit Sub
End If
Dim lValue As Decimal
lValue = CDec(対象セル.Value)
みたくしたらいいのでは?
もしくはExcelの入力規則によって入力可能な値を制限するとか。
No.3
- 回答日時:
以下のようにされてはいかがでしょうか。
on errorのとび先に
Stop
Resume
としておきます。
エラー発生時、Stopで止まりますので、
F8キーで1ステップずつ進めます。
Resumeの次に、元の位置に戻ります。
そこがエラー発生個所です。
下記は、A1~A10のセル中に、数字でない文字があったとき、
そこで停止するサンプルです。
--------------------------------------------------
Public Sub エラー箇所特定()
Dim ABC As Double
Dim i As Long
On Error GoTo ERROR99
For i = 1 To 10
ABC = Cells(i, 1).Value
Next
MsgBox ("エラーなし")
Exit Sub
ERROR99:
Stop
Resume
End Sub
早速ありがとうございます
ちょっとテストしてみました
勉強になりました、ありがとうございます
でも今は、質問の仕方が悪かったようです
今は使用者にデータのエラー箇所を知らせたいだけなので
下記のサンプルのようなものが欲しかったのですが
Dim rng As Range
Set rng = Cells.SpecialCells(xlCellTypeFormulas, xlErrors)
rng.Select
ただし、xlCellTypeFormulas は数式によるエラーみたいで
Type UnMatchの時は何かな?っと思って聞きました
以上、宜しくお願い致します
No.2
- 回答日時:
え、変数ABCにセルの値を入れてるところを探せばいいんじゃないんですか?
カレントプロジェクトをターゲットにして検索すれば済むと思うんですけど。
見つかったら、そこに設定しているセルを追いかけるか、
ブレークポイントを貼って、エラーになる操作(セルに文字を入れて何かを実行する)をすればよいかと思います。
それかそもそも文字が入っている状態では実行してはならないのなら、実行直後にバリデーション処理を追加すれば、追っかける必要なくなりますね。
早速ありがとうございます
ちょっと、質問の仕方が悪かったようです
今は使用者にデータのエラー箇所を知らせたいだけなので
下記のサンプルのようなものが欲しかったのですが
Dim rng As Range
Set rng = Cells.SpecialCells(xlCellTypeFormulas, xlErrors)
rng.Select
ただし、xlCellTypeFormulas は数式によるエラーみたいで
Type UnMatchの時は何かな?っと思って聞きました
以上、宜しくお願い致します
No.1
- 回答日時:
特定は簡単ですけど、文字列だった場合はどのように処理するんですか?
判別した上で文字列じゃなかったら、ABCに値を代入すればいいかと。あとは文字列だった場合はどうするか です。
そのときに単にセルを特定したいのだったらメッセージボックスで、そのセルを表示すればいいです。
まずはそこをやるというならば
IF
(セルの値が文字列化の判別式:文字列ならFalse)
Then
(ABCにセルの値を代入)
Else
Msgbox(セルの行列:見やすいように))
End If
としておいて、文字列の場合の処理があるなら、MsgBoxをコメントアウトして、やりたい処理を入れるとよいと思います。
早速ありがとうございます
ちょっと、質問の仕方が悪かったようです
今は使用者にデータのエラー箇所を知らせたいだけなので
下記のサンプルのようなものが欲しかったのですが
Dim rng As Range
Set rng = Cells.SpecialCells(xlCellTypeFormulas, xlErrors)
rng.Select
ただし、xlCellTypeFormulas は数式によるエラーみたいで
Type UnMatchの時は何かな?っと思って聞きました
以上、宜しくお願い致します
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
それもChatGPT!?と驚いた使用方法を教えてください
仕事やプライベートでも利用が浸透してきたChatGPTですが、こんなときに使うの!!?とびっくりしたり、これは画期的な有効活用だ!とうなった事例があれば教えてください!
-
スマホに会話を聞かれているな!?と思ったことありますか?
スマートフォンで検索はしてないのに、友達と話していた製品の広告が直後に出てきたりすることってありませんか? こんな感じでスマホに会話を聞かれているかも!?と思ったエピソードってありますか?
-
モテ期を経験した方いらっしゃいますか?
一生に一度はモテ期があるといいますが、みなさんどうですか? いまがそう! という方も、「思い返せばこの頃だったなぁ」という方も、よかったら教えて下さい。
-
【選手権お題その3】この画像で一言【大喜利】
とあるワンシーンを切り取った画像。この画像で一言、お願いします!
-
14歳の自分に衝撃の事実を告げてください
タイムマシンで14歳の自分のところに現れた未来のあなた。 衝撃的な事実を告げて自分に驚かせるとしたら何を告げますか?
-
Visualbasicの現状について教えてください
Visual Basic(VBA)
-
アセンブリ言語について。
その他(プログラミング・Web制作)
-
IT業で開発をされてる方々に質問なんですが、一日に書かれるコード数ってどれくらいですか? また、最近
その他(プログラミング・Web制作)
-
-
4
マイクロソフトがvbを捨てたのは何故ですか C#は変数の型指定ひとつとっても最近の主流とはかけ離れて
その他(プログラミング・Web制作)
-
5
修正依頼:【VBA】 結合セルに複数画像とファイル名一括挿入する方法
Visual Basic(VBA)
-
6
至急助けてください!!!あと2時間しかないです! ボタンを押したら0ランプが点灯し、コンマ5秒後に1
その他(プログラミング・Web制作)
-
7
プログラミングについて プログラミングの練習(勉強)ができるようなサイトなどありませんか? あれば教
その他(プログラミング・Web制作)
-
8
VB.net 文字列から日付型へ変更したい
Visual Basic(VBA)
-
9
過剰なオブジェクト指向脳からの脱却について
その他(プログラミング・Web制作)
-
10
AIの登場でプログラマーたちが解雇されていますが
その他(プログラミング・Web制作)
-
11
IF文、条件分岐の整理方法
Visual Basic(VBA)
-
12
時間短縮のために、テキストファイルの入出力をメモリを使って出来ないですか?
Visual Basic(VBA)
-
13
プログラミングの進学について
その他(プログラミング・Web制作)
-
14
Web初心者です。 簡易的なWebページを作成し
その他(プログラミング・Web制作)
-
15
エクセルを使ってQRコードを作成したい。
Excel(エクセル)
-
16
Cのプログラムからアクセスできないファイル名の一括変更方法
C言語・C++・C#
-
17
C言語のことです。写真(見にくくてすいません)の下のプログラムを実行したいのですが四行目がおかしいと
C言語・C++・C#
-
18
アセンブラーの命令についてです。
その他(プログラミング・Web制作)
-
19
添付URLの様なサイトを作るにはどうすればいいですか?※どんな技術が使われていますか
その他(プログラミング・Web制作)
-
20
共テのプログラミング言語はPython等と違いほとんど日本語ですが、その共テのプログラミング言語を解
その他(プログラミング・Web制作)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~1/20】 追い込まれた犯人が咄嗟に言った一言とは?
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・【選手権お題その3】この画像で一言【大喜利】
- ・【お題】逆襲の桃太郎
- ・自分独自の健康法はある?
- ・最強の防寒、あったか術を教えてください!
- ・【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
- ・歳とったな〜〜と思ったことは?
- ・ちょっと先の未来クイズ第6問
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルVBAで在庫の組み換え処...
-
【ExcelVBA】5万行以上のデー...
-
VB.net 文字列から日付型へ変更...
-
ExcelのVBAコードについて教え...
-
WindowsのOutlook を VBA から...
-
VBA ユーザーフォーム ボタンク...
-
VBAから書き込んだ条件付き初期...
-
VBAでエクセルのテキストデータ...
-
エクセルVBAのブックを開く方法...
-
2つのマクロでチェックボックス...
-
【ExcelVBA】インデックスが有...
-
ExcelのVBAコードについて教え...
-
【マクロ】オートフィルターに...
-
VBA 最終行の取得がうまくいか...
-
Excel VBAについて。こんな動作...
-
Excelのマクロについて教えてく...
-
vba Windowオブジェクト(Window...
-
【ExcelVBA】dictionaryの重複...
-
VBAでセルの書式を変えずに文字...
-
VBA 入力箇所指定方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAについて教えて下さい
-
ExcelのVBAコードについて教え...
-
ExcelのVBAコードについて教え...
-
【ExcelVBA】5万行以上のデー...
-
VBA Application.Matchについて...
-
Excelのマクロについて教えてく...
-
Excel VBAについて。こんな動作...
-
Excelの数式について教えてくだ...
-
ExcelのVBAコードについて教え...
-
VBA 同じフォルダ内のすべての...
-
不要項目の行削除方法について
-
Vba 型が一致しません(エラー1...
-
【マクロ】オートフィルターに...
-
【VBA】 結合セルに複数画像と...
-
VBAで特定の文字が入った行をコ...
-
ExcelのVBAコードについて教え...
-
VBAでセルの書式を変えずに文字...
-
VBAのエラー表示の対処法について
-
Excelのマクロについて教えてく...
-
Excel マクロについて詳しい方...
おすすめ情報