前提・実現したいこと
ExcelVBAで申請書をテキスト出力するツールを使用しています。
そのツールに2つ機能を追加しようとしています。
①申請書には申請区分が1~3まであり、それぞれの区分に応じた必須入力項目に値が入っていなければ(セルが空白の時)エラーメッセージを出力する。その時に、未入力のセルの場所も表示させる。
エラーメッセージ例)
A5,E3,G12 セルに入力してください。
②申請区分を選択した際、必須入力項目のセル色を変更
申請区分1~3で登場する全ての必須項目のうち、申請区分を1を選んだ場合は、全体の必須項目から申請区分1の必須項目のみをRGB(255,255,153)に、それ以外の申請区分2、3の必須項目でかつ申請区分1で使用しないものは、RGB(255,255,255)というようにしたいです。
※申請区分はC3セルで、申請区分1~3までをプルダウンで選択する仕様です。
各申請区分の必須項目
・申請区分1(D3,D4,D5,D6,D9,D12,E22,F22,D25,D28)
・申請区分2(D5,D6,D11,D16,E34,F34,D36,D37)
・申請区分3(D5,D6,D15,D16,E18,E19,D25,E35,D36)
今後申請区分が増えるため、簡潔に配列を使用した処理で書きたいと思っております。
①についてはセルの配列処理が上手くできず、止まっています。
配列を使用せず、必須項目のいずれかが空白だった場合にエラーを出力することはできるのですが、そこから先が出来ずにいます。
②は処理はできるのですが、長くなってしまいます。
配列はあまり使用した事がないのですが、今回使用してプログラムを書いてみようと思いました。
発生している問題・エラーメッセージ
1.セルの配列処理をどのようにしたらよいのか分かりません。
セルの値を取得することはできるのですが、セルの場所の表示方法が分かりません。
また、必須項目のうち空白セルの場所だけを組み合わせて表示するにはどのようにしたらよいのでしょうか。
2.必須項目のセルの色の変更も配列で行いたいのですが、現状だと長くなってしまうので、改善したいと考えています。
該当のソースコード
VBA
1Sub input_check() 2'①セルの入力チェック 3 4 If Range("C3") = "申請区分1" Then 5 If Range("D3") = "" Or Range("D4") = "" Or Range("D5") = "" Or Range("D6") = "" Or Range("D9") = "" Or Range("D12") = "" _ 6 Or Range("E22") = "" Or Range("F22") = "" Or Range("D25") = "" Or Range("D28") = "" Then 7 MsgBox "未入力セルがあります" 8 End If 9 10 ElseIf Range("C3") = "申請区分2" Then 11 If Range("D5") = "" Or Range("D6") = "" Or Range("D11") = "" Or Range("D16") = "" Or Range("E34") = "" Or Range("F34") = "" _ 12 Or Range("D36") = "" Or Range("D37") = "" Then 13 MsgBox "未入力セルがあります" 14 End If 15 16 ElseIf Range("C3") = "申請区分3" Then 17 If Range("D5") = "" Or Range("D6") = "" Or Range("D15") = "" Or Range("D16") = "" Or Range("E18") = "" Or Range("E19") = "" _ 18 Or Range("D25") = "" Or Range("E35") = "" Or Range("D36") = "" Then 19 MsgBox "未入力セルがあります" 20 End If 21 22 End If 23 24End Sub
該当のソースコード
VBA
1Sub sinsei() 2 3'②必須項目セルの色を変更 4 5If Range("C3") = "申請区分1" Then 6 '申請区分1の必須項目を黄色に 7 Range("D3").Interior.Color = RGB(255, 255, 153) 8 Range("D4").Interior.Color = RGB(255, 255, 153) 9 Range("D5").Interior.Color = RGB(255, 255, 153) 10 Range("D6").Interior.Color = RGB(255, 255, 153) 11 Range("D9").Interior.Color = RGB(255, 255, 153) 12 Range("D12").Interior.Color = RGB(255, 255, 153) 13 Range("E22").Interior.Color = RGB(255, 255, 153) 14 Range("F22").Interior.Color = RGB(255, 255, 153) 15 Range("D25").Interior.Color = RGB(255, 255, 153) 16 Range("D28").Interior.Color = RGB(255, 255, 153) 17 18 '申請区分2の必須項目を白色に(申請区分1と共通の項目は除く) 19 Range("D11").Interior.Color = RGB(255, 255, 255) 20 Range("D16").Interior.Color = RGB(255, 255, 255) 21 Range("E34").Interior.Color = RGB(255, 255, 255) 22 Range("F34").Interior.Color = RGB(255, 255, 255) 23 Range("D36").Interior.Color = RGB(255, 255, 255) 24 Range("D37").Interior.Color = RGB(255, 255, 255) 25 26 '申請区分3の必須項目を白色に(申請区分1,申請区分2と共通の項目は除く) 27 Range("D15").Interior.Color = RGB(255, 255, 255) 28 Range("E18").Interior.Color = RGB(255, 255, 255) 29 Range("E19").Interior.Color = RGB(255, 255, 255) 30 Range("D25").Interior.Color = RGB(255, 255, 255) 31 Range("E35").Interior.Color = RGB(255, 255, 255) 32 33ElseIf Range("C3") = "申請区分2" Then 34 '申請区分2の必須項目を黄色に 35 Range("D5").Interior.Color = RGB(255, 255, 153) 36 Range("D6").Interior.Color = RGB(255, 255, 153) 37 Range("D11").Interior.Color = RGB(255, 255, 153) 38 Range("D16").Interior.Color = RGB(255, 255, 153) 39 Range("E34").Interior.Color = RGB(255, 255, 153) 40 Range("F34").Interior.Color = RGB(255, 255, 153) 41 Range("D36").Interior.Color = RGB(255, 255, 153) 42 Range("D37").Interior.Color = RGB(255, 255, 153) 43 44 '申請区分1の必須項目を白色に(申請区分2と共通の項目は除く) 45 Range("D3").Interior.Color = RGB(255, 255, 255) 46 Range("D4").Interior.Color = RGB(255, 255, 255) 47 Range("D9").Interior.Color = RGB(255, 255, 255) 48 Range("D12").Interior.Color = RGB(255, 255, 255) 49 Range("E22").Interior.Color = RGB(255, 255, 255) 50 Range("F22").Interior.Color = RGB(255, 255, 255) 51 Range("D25").Interior.Color = RGB(255, 255, 255) 52 Range("D28").Interior.Color = RGB(255, 255, 255) 53 54 '申請区分3の必須項目を白色に(申請区分1,申請区分2と共通の項目は除く) 55 Range("D15").Interior.Color = RGB(255, 255, 255) 56 Range("E18").Interior.Color = RGB(255, 255, 255) 57 Range("E19").Interior.Color = RGB(255, 255, 255) 58 Range("D25").Interior.Color = RGB(255, 255, 255) 59 Range("E35").Interior.Color = RGB(255, 255, 255) 60 61ElseIf Range("C3") = "申請区分3" Then 62 '申請区分3の必須項目を黄色に 63 Range("D5").Interior.Color = RGB(255, 255, 153) 64 Range("D6").Interior.Color = RGB(255, 255, 153) 65 Range("D15").Interior.Color = RGB(255, 255, 153) 66 Range("D16").Interior.Color = RGB(255, 255, 153) 67 Range("E18").Interior.Color = RGB(255, 255, 153) 68 Range("E19").Interior.Color = RGB(255, 255, 153) 69 Range("D25").Interior.Color = RGB(255, 255, 153) 70 Range("E35").Interior.Color = RGB(255, 255, 153) 71 Range("D36").Interior.Color = RGB(255, 255, 153) 72 73 '申請区分1の必須項目を白色に(申請区分3と共通の項目は除く) 74 Range("D3").Interior.Color = RGB(255, 255, 255) 75 Range("D4").Interior.Color = RGB(255, 255, 255) 76 Range("D9").Interior.Color = RGB(255, 255, 255) 77 Range("D12").Interior.Color = RGB(255, 255, 255) 78 Range("E22").Interior.Color = RGB(255, 255, 255) 79 Range("F22").Interior.Color = RGB(255, 255, 255) 80 Range("D25").Interior.Color = RGB(255, 255, 255) 81 Range("D28").Interior.Color = RGB(255, 255, 255) 82 83 '申請区分2の必須項目を白色に(申請区分1,申請区分3と共通の項目は除く) 84 Range("D11").Interior.Color = RGB(255, 255, 255) 85 Range("E34").Interior.Color = RGB(255, 255, 255) 86 Range("F34").Interior.Color = RGB(255, 255, 255) 87 Range("D37").Interior.Color = RGB(255, 255, 255) 88 89End If 90 91End Sub 92
試したこと
VBA
1Sub array_test() 2'セルの値の取得(OK) 3Dim ary(3) As String 4ary(0) = Cells(3, 1) 5 6MsgBox ary(0) 7 8End Sub 9 10Sub array_test2() 11'セルの場所の取得(実行時エラー91) 12Dim ary(3) As Range 13ary(0) = Cells(3, 1) 14 15MsgBox ary(0) 16 17End Sub 18
ご存知の方おりましたら、教えて頂けますと幸いです。
よろしくお願い致します。
回答5件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/09/18 11:28
2018/09/19 00:15
退会済みユーザー
2018/09/19 00:30
退会済みユーザー
2018/09/19 03:02
2018/09/19 03:40
退会済みユーザー
2018/09/20 05:03