実現したいこと
下記のようなIFが複数続く場合、配列などを使って簡素化することは可能でしょうか。
右と左の組み合わせでどちらか一方が未入力であればメッセージボックスが出てくるようにしているつもりです。ご教示いただけると幸いです。
発生している問題・分からないこと
もっと簡単なプログラムを作りたいです。
該当のソースコード
VBA
1Sub sample33() 2 3 Dim row_c1 As Long 4 Dim row_c2 As Long 5 Dim wb As Workbook 6 Dim wb_out As Workbook 7 Dim ws As Worksheet 8 Dim ws_out As Worksheet 9 10 Set wb = Workbooks("Xブック.xlsx") 11 Set wb_out = Workbooks("Yブック.xlsm") 12 Set ws = wb.Worksheets("Xシート") 'データ元 13 Set ws_out = wb_out.Worksheets("Yシート") '出力先 14 15 row_c1 = 3 16 row_c2 = 10 17 18 Do While CStr(ws.Cells(row_c1, "A").Value) <> "END" 19 20 'XシートのD(右)とE(左)のいずれかが未入力 21 If CStr(ws.Cells(row_c1, "D").Value) = "" Or CStr(ws.Cells(row_c1, "E").Value) = "" Then 22 MsgBox "Xシート," & row_c1 & "行目は画像名称が未入力です" 23 row_c2 = row_c2 + 1 24 End If 25 26 'XシートのF(右)とG(左)のいずれかが未入力 27 If CStr(ws.Cells(row_c1, "F").Value) = "" Or CStr(ws.Cells(row_c1, "G").Value) = "" Then 28 MsgBox "Xシート," & row_c1 & "行目は画像名称が未入力です" 29 row_c2 = row_c2 + 1 30 End If 31 32 'XシートのH(右)とI(左)のいずれかが未入力 33 If CStr(ws.Cells(row_c1, "H").Value) = "" Or CStr(ws.Cells(row_c1, "I").Value) = "" Then 34 MsgBox "Xシート," & row_c1 & "行目は画像名称が未入力です" 35 row_c2 = row_c2 + 1 36 End If 37 38 row_c1 = row_c1 + 1 39 40 Loop 41 42End Sub 43
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
For Each RGT In Array(D,F,H)
For Each RGT In Array(E,G,I)
For文に入れると内側と外側のずれが生じるので上手く行きませんでした。
補足
特になし
不明点です。
1.row_c2 をメッセージボックスを表示するたびに、加算していますが、そのあと、row_c2 を使用していません。加算は不要かと思いますが、いかがでしょうか。
2.1つの行で、D,Eの何れかが未入力、F,Gの何れかが未入力、H,Iの何れかが未入力の場合、3回エラーメッセージが表示されますが、これは、意図した動作でしょうか。1回だけ表示すれば良いかと思うのですが、いかがでしょうか。