
いつもお世話になります
今、沢山の数値を扱うプログラムを社内で提供していますが、たまにエラー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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2024/01/18 15:48
- Visual Basic(VBA) VBAコードについて教えてください。 2 2024/06/18 13:51
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2024/03/01 17:04
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/25 16:07
- Visual Basic(VBA) Sub 要具ライフ() ActiveSheet.Cells.Find(what:="TOPゴム"). 2 2024/03/27 11:57
- Excel(エクセル) エクセルの数式で教えてください。 5 2023/02/10 15:11
- Visual Basic(VBA) VBA レジストリの値の読み方について教えてください 1 2024/05/03 19:08
- Visual Basic(VBA) Excelのマクロについて教えてください。 1 2024/06/18 09:20
- Visual Basic(VBA) エクセルで、1つのセルで上書き足し算して セルの範囲を指定できますか? パソコン初心者です。 お時間 3 2023/07/05 06:13
- Excel(エクセル) エクセルの数式で教えてください。 1 2023/02/08 09:05
このQ&Aを見た人はこんなQ&Aも見ています
-
Visualbasicの現状について教えてください
Visual Basic(VBA)
-
アセンブリ言語について。
その他(プログラミング・Web制作)
-
IT業で開発をされてる方々に質問なんですが、一日に書かれるコード数ってどれくらいですか? また、最近
その他(プログラミング・Web制作)
-
-
4
算術演算子「¥」の意味について
Visual Basic(VBA)
-
5
プログラミングについて プログラミングの練習(勉強)ができるようなサイトなどありませんか? あれば教
その他(プログラミング・Web制作)
-
6
至急助けてください!!!あと2時間しかないです! ボタンを押したら0ランプが点灯し、コンマ5秒後に1
その他(プログラミング・Web制作)
-
7
修正依頼:【VBA】 結合セルに複数画像とファイル名一括挿入する方法
Visual Basic(VBA)
-
8
VB.net 文字列から日付型へ変更したい
Visual Basic(VBA)
-
9
以下のプログラムの実行結果はどうなると思いますか? その理由も教えてください。
Visual Basic(VBA)
-
10
プログラミング言語のバージョン確認について。
その他(プログラミング・Web制作)
-
11
改行文字「vbCrLf」とは
Visual Basic(VBA)
-
12
pythonでAmazonのほしいものリストをローカル保存するスクリプト書いたら一部しか保存できぬ!
その他(プログラミング・Web制作)
-
13
Web初心者です。 簡易的なWebページを作成し
その他(プログラミング・Web制作)
-
14
プログラミングの進学について
その他(プログラミング・Web制作)
-
15
エクセルを使ってQRコードを作成したい。
Excel(エクセル)
-
16
Cのプログラムからアクセスできないファイル名の一括変更方法
C言語・C++・C#
-
17
C言語のことです。写真(見にくくてすいません)の下のプログラムを実行したいのですが四行目がおかしいと
C言語・C++・C#
-
18
pythonについて
その他(プログラミング・Web制作)
-
19
アセンブラーの命令についてです。
その他(プログラミング・Web制作)
-
20
添付URLの様なサイトを作るにはどうすればいいですか?※どんな技術が使われていますか
その他(プログラミング・Web制作)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【マクロ】オートフィルター を...
-
【マクロ】開いているブックの...
-
Vba セルの4辺について罫線が有...
-
vbsでのwebフォームへの入力制限?
-
ワードの図形にマクロを登録で...
-
VBAでFOR NEXT分を Application...
-
算術演算子「¥」の意味について
-
【マクロ】シートの変数へ入れ...
-
【マクロ】並び替えの範囲が、...
-
エクセルのマクロについて教え...
-
エクセルの改行について
-
vb.net(vs2022)のtextboxのデザ...
-
質問58753 このコードでうまく...
-
vbaマクロについて
-
Vba Array関数について教えてく...
-
testファイル内にある複数のpng...
-
ダブルクリックで貼り付けた画...
-
VBAでCOPYを繰り返すと、処理が...
-
【マクロ】売上一覧YYYYMMDDHHS...
-
【マクロ】変数を使った、文字...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Vba セルの4辺について罫線が有...
-
vbsでのwebフォームへの入力制限?
-
【ExcelVBA】5万行以上のデー...
-
【マクロ】売上一覧YYYYMMDDHHS...
-
【マクロ】開いているブックの...
-
【マクロ】並び替えの範囲が、...
-
エクセルの改行について
-
エクセルのマクロについて教え...
-
vb.net(vs2022)のtextboxのデザ...
-
VBAでCOPYを繰り返すと、処理が...
-
VBA ユーザーフォーム ボタンク...
-
エクセルのVBAコードと数式につ...
-
エクセルのVBAコードについて教...
-
[VB.net] ボタン(Flat)のEnable...
-
【マクロ】変数を使った、文字...
-
改行文字「vbCrLf」とは
-
質問58753 このコードでうまく...
-
【マクロ】シートの変数へ入れ...
-
ワードの図形にマクロを登録で...
-
算術演算子「¥」の意味について
おすすめ情報