質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

2回答

507閲覧

VBAでメッセージボックスを表示したい

hiro.tatsu

総合スコア10

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2019/04/26 00:40

編集2019/04/26 02:56

前提・実現したいこと

excel VBAでシート間の照合をして、間違っていれば
メッセージボックスを表示しようとしてます。
しかし、メッセージボックスが間違っている個数分
何回も表示されてしまいます。

初心者なので解決策を見いだせずにいます。
よろしくお願いします。

発生している問題・エラーメッセージ

For gyou = GYOU_S To GYOU_E '開始行から終了行まで For retsu = RETSU_S To RETSU_E '開始列から終了列まで If s1.Cells(gyou, retsu).Value <> s2.Cells(gyou, retsu).Value Then '同じ位置のセルの値が等しくなければ、そのセルを黄で塗りつぶす。 s1.Cells(gyou, retsu).Interior.Color = rgbYellow MsgBox "未完成です" End If If s1.Cells(gyou, retsu).Value = s2.Cells(gyou, retsu).Value Then s1.Cells(gyou, retsu).Interior.ColorIndex = 0 End If Next Next``` ### 該当のソースコード ```ここに言語名を入力 ソースコード

試したこと

下記のコードをnextの一番外に置きましたが無理でした。

If s1.Cells(gyou, retsu).Value <> s2.Cells(gyou, retsu).Value Then

'同じ位置のセルの値が等しくなければ、そのセルを赤で塗りつぶす。 s1.Cells(gyou, retsu).Interior.Color = rgbYellow MsgBox "未完成です" End If

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。解決策を

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dodox86

2019/04/26 00:55 編集

> メッセージボックスが間違っている個数分何回も表示されてしまいます。 やりたいことは、「間違っている部分が複数個ある場合でも、メッセージボックスは1回だけ表示したい」と言うことでしょうか。
ttyp03

2019/04/26 01:42

質問内容とタイトルが一致していないので修正お願いします。質問したいことはメッセージボックスを1回にしたい、ということですよね?照合自体で困っているわけではないですよね?
hiro.tatsu

2019/04/26 02:58

解答ありがとうございます。おっしゃってる通り、「間違ってる部分が複数個ある場合でも、メッセージボックスは1回だけ表示したい」ということです。
guest

回答2

0

VBA

1Dim errflg As Boolean:errflg = False 2 3'長くなるので少しカット 4 5If StrComp(Cstr(s1.Cells(gyou, retsu).Value),Cstr(s2.Cells(gyou, retsu).Value),vbBinaryCompare) = 0 Then 6 7 s1.Cells(gyou, retsu).Interior.ColorIndex = 0 8Else 9 s1.Cells(gyou, retsu).Interior.Color = rgbYellow 10 if Not errflg Then 11 MsgBox "未完成です" 12 End if 13 errflg = True 14End If

こんな感じでしょうか?
VBAで正確な文字列判定をしたいならStrCompを使ってbinary単位で比較するのが一番ですよ。

もう一点
'同じ位置のセルの値が等しくなければ、そのセルをで塗りつぶす。
'同じ位置のセルの値が等しくなければ、そのセルをで塗りつぶす。
プログラムを見ると黄色で塗り潰されていますがどちらがやりたいの?

投稿2019/04/26 03:23

stdio

総合スコア3307

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hiro.tatsu

2019/04/26 07:39

解答ありがとうございます。すいません。コメントは赤ですが、黄色で塗りつぶしです。
guest

0

ベストアンサー

フラグ使えばいいかと思います。
ざっくり書くとこんな感じです。

VBA

1Dim errflg As Boolean 2errflg = False 3 4For ~ 5 For ~ 6 'MsgBox "未完成です" 78 errflg = True 9 Next 10Next 11If errflg = True Then 12 MsgBox "未完成です" 13End If 14

投稿2019/04/26 01:41

ttyp03

総合スコア16998

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hiro.tatsu

2019/04/26 03:14

大変助かりました。ありがとうございます。無事に成功しました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問