作業者のうっかりミスを警告するプログラムを作成しています。
A列9行目以降の値が500以上で、かつ同じ行のF列の値が空白であったときメッセージを表示する。・・・(1)
G列9行目以降が「○」で、かつ同じ行のDまたはE列に「在庫」の文字列あったときメッセージを表示する。・・・(2)
下記のようなプログラムを作成したのですが、もっと良い方法があるのではないかと思っています。
何かアドバイスいただけると助かります。
欲を言えば、メッセージ「部品番号○○の発注先のセルが空白になています。」((1)の場合)や、
「部品番号○○の備考のセルに在庫の文字があります。」((2)の場合)が、ミスが多数あれば
何度も表示されるのを1回または(1)(2)それぞれ1回にまとめて表示できないか考えています。
作業者は以下の作業を行います。
A列の9行目以降は部品番号の数値を入力します。(1、2・・・、101、102・・・、501、502・・・など)
DまたはE列の9行目以降は備考の文字列を入力します。(熱処理、ボルト付属、在庫使用・・・など)
F列の9行目以降は発注先の文字列を入力します。(フタバ、ミスミ、パンチ・・・など)
G列の9行目以降は発注先によって自動的に○になります。(セルに数式が入っています)
表を見やすくするために空白の行を任意の行に設けます。
入力する行は最大でも999以内とします。(実際には300くらいです)
(1)の補足:部品番号(A列)の500以降は発注先(F列)が必ず必要であり、この記入漏れに対して警告する。
(2)の補足:備考(DまたはE列)が「在庫使用」で発注(G列)が○は矛盾するので、この記入に対して警告する。
<シート>
(B、C列の値は省略しています)
A B C D E F G
8 部品番号 型番 個数 備考1 備考2 発注先 発注
9 101
10 102 パンチ
11
12 501 フタバ ○
13 502 パンチ
14 503
15 504
16 505 在庫使用 ミスミ ○
17 506 ミスミ ○
18 507 熱処理 在庫使用 ミスミ ○
19 508 ミスミ ○
20 509 ミスミ ○
21 510 ミスミ ○
22
23 601 フタバ ○
24 602 フタバ ○
<プログラム>
Sub TEST()
Dim 部品番号 As String
For i = 9 To 999
If Cells(i, 1).Value >= 500 And Cells(i, 6).Value = "" Then
部品番号 = Cells(i, 1).Value
MsgBox "部品番号" & 部品番号 & "の発注先のセルが空白になっています。"
Else
End If
Next
For i = 9 To 999
If Cells(i, 7).Value = "○" And (Cells(i, 4).Value Like "*在庫*" Or Cells(i, 5).Value Like "*在庫*") Then
部品番号 = Cells(i, 1).Value
MsgBox "部品番号" & 部品番号 & "の備考のセルに在庫の文字があります。"
Else
End If
Next
End Sub
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
とりあえずご質問の直接の回答として。
sub macro1()
dim i as long
dim mes as string
dim lastrow as long
range("F:G").interior.colorindex = xlnone
lastrow = range("A65536").end(xlup).row
for i= 9 to lastrow
if cells(i, "A") >= 500 and cells(i, "F") = "" then
mes = mes & vblf & "部品番号" & cells(i, "A") & "の発注セルが空白"
cells(i, "F").interior.color = vbred
end if
next i
msgbox mid(mes, 2)
mes = ""
for i = 9 to lastrow
if cells(i, "G") = "○" then
if cells(i, "D") like "*在庫*" or cells(i, "E") like "*在庫*" then
mes = mse & vblf & "部品番号" & cells(i, "A") & "は在庫使用"
cells(i, "G").interior.color = vbred
end if
end if
next i
msgbox mid(mes, 2)
end sub
No.1
- 回答日時:
質問者様がどれくらいプログラムに詳しいかわかりませんが…。
個人的にもよく遭遇する問題なので、お気持ちはわかります。
案としては以下の4案があるかと思います。
案1:1か所でも条件に合わないセルがあったら、それ以上のチェックを止める
条件に合わないセルを見つけたら、警告メッセージの表示を行い、その後"Exit Sub"で処理を終わらせます。
[メリット]
1回の処理で1回の警告メッセージしか出さないので、操作がうっとおしくない
[デメリット]
1回の処理で警告を1か所しか知らせないので、複数該当箇所があれば、
全ての該当箇所を修正するまで何度もチェック処理を実行しなくてはいけない
案2:条件不適合セルの情報を集めておいて、最後に表示する
・多少プログラムがお分かりであれば、String変数Alartを宣言し、条件に合わないセルを見つけたら、
Alartに部品番号のなどの情報を設定しておく
(この場合、変数に部品番号の情報を追記していく形で設定していきます)
・全セルのチェックを終えたら、Alartが空白かどうかチェックします。
空白でない場合(部品番号情報が設定されている場合は)最後に警告メッセージを出力します。
[メリット]
1回の操作で全てのエラー個所が判明する
[デメリット]
多少のプログラム知識が必要
案3:セルの色を変える
エラーメッセージではなく、条件に合わないセルの色を変更する
[メリット]
1回の操作で全てのエラー個所が判明する
細かいプログラム知識が不要
[デメリット]
セルの値を修正後、セルの色を元に戻す必要がある
案4:マクロではなく、条件付き書式で対応
該当セルに条件付き書式を組み込み、条件に合わないようであればセルの色が変わるように設定
[メリット]
そもそもマクロが不要で、チェック処理を走らせる必要もない
結果は案3と同じになる
正しい値を入力すればセルの色が戻るので、案3のようなセルの入りを戻す対応も不要
[デメリット]
条件付き書式を設定する知識が必要
値の範囲が可変的に極まる場合は、ちょっと問題があるかも?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) VBAでのループ順序について 3 2023/03/13 10:55
- Excel(エクセル) B列に文字がはいったらA列に数字が入るマクロードを完成させたい 4 2023/04/21 01:58
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) VBAコードが作動せず、どこに問題があるのか教えて下さい。 3 2023/06/13 13:20
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 2 2022/06/25 22:42
- Visual Basic(VBA) ExcelからAccessのテーブルに書き込む時に時間がかかる 1 2022/10/14 20:38
- Visual Basic(VBA) vba 重複データ合算 5 2023/07/05 18:55
- Visual Basic(VBA) VBA シート間の転記で、条件の追加コードの書き方について教えて下さい。 13 2023/02/26 09:31
- Visual Basic(VBA) Changeイベントで複数セルへの貼り付けおよび値削除時に1個目のセルのみエラーになる 3 2022/12/21 09:07
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセル マクロ オートフィ...
-
エクセルで特定の文字列が入っ...
-
[EXCEL]ボタン押す→時刻が表に...
-
【Excel関数】UNIQUE関数で"0"...
-
エクセル 上下で列幅を変えるには
-
Excel 時刻の並び替え
-
結合されたセルをプルダウンの...
-
エクセルマクロで偶数行(又は...
-
エクセル マクロで数値が変っ...
-
エクセルVBA:リストに登録した...
-
AのセルとB行を比較して、一致...
-
【EXCEL】連続データの個数を抽...
-
Excel グラフのプロットからデ...
-
Excel ウインドウ枠の固定をす...
-
エクセルのマクロで意図しない...
-
excel 小さすぎて見えないセル...
-
特定の文字がある行以外を削除...
-
エクセル2016で時間を入力して...
-
エクセルのセルに指定画像(.jpg...
-
エクセルVBA:データ端に画...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで特定の文字列が入っ...
-
エクセル マクロ オートフィ...
-
【Excel関数】UNIQUE関数で"0"...
-
結合されたセルをプルダウンの...
-
[EXCEL]ボタン押す→時刻が表に...
-
excel 小さすぎて見えないセル...
-
AのセルとB行を比較して、一致...
-
エクセル マクロで数値が変っ...
-
エクセル 上下で列幅を変えるには
-
excelのデータで色つき行の抽出...
-
Excel グラフのプロットからデ...
-
エクセル2016で時間を入力して...
-
VBAで色の付いているセルの行削除
-
特定の文字がある行以外を削除...
-
連続データが入った行の一番右...
-
エクセルVBA 最終行を選んで並...
-
エクセルのセルに指定画像(.jpg...
-
エクセルで昨日までの日付デー...
-
エクセルマクロで偶数行(又は...
-
A1に入力された文字列と同じ文...
おすすめ情報