- 締切済み
VBAのコードがわからない
ある人が作成したマクロですが、当方初心者のため 内容が全く分かりません。 (フォームコントロールのコンボボックスに登録されていた マクロです) ご教授いただければ幸いです。 Sub Drop1_Change() i = Cells(3, 7).Value + 5 For j = 1 To 31 If Cells(j + 2, 4) Xor ((Cells(i, j + 26).Value = "開") Or (Cells(i, j + 26).Value = "ON")) Then Cells(j + 2, 4).Value = Not (Cells(j + 2, 4).Value) cmd_exec (j) End If Next j End Sub Sub cmd_exec(i As Integer) On i GoSub _ cmd1, cmd2, cmd3, cmd4, cmd5, cmd6, cmd7, cmd8, cmd9, cmd10, _ cmd11, cmd12, cmd13, cmd14, cmd15, cmd16, cmd17, cmd18, cmd19, cmd20, _ cmd21, cmd22, cmd23, cmd24, cmd25, cmd26, cmd27, cmd28, cmd29, cmd30, cmd31 Exit Sub cmd1: CheckBox1_Click Return cmd2: (以下cmd31まで続く) End Sub
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- BarcodeMaster
- ベストアンサー率73% (17/23)
もっと具体的にどこがわからないのか書かないと答えようがありませんよ。 もし、「このロジック自体が何をするためのものかわからない」ということであれば、 それは、あなたが初心者であるかどうかにかかわらず、誰にもわかりません。 (1)仕様書を探しましょう。 (2)作った人を探して聞きましょう。 (3)あきらめて、やりたいことをやりたい人に聞いて、全部作り直しましょう。
- eden3616
- ベストアンサー率65% (267/405)
何が不明で、何をどう扱いたいのかが分かりませんが。 またセルの値も不明なため具体的な例を挙げることが出来ません。 また、 下記説明においては細かい構文などを説明しておりませんのでヒント程度となります。 この回答において、細かな説明につきましては他サイト様へ丸投げしております。 コード内「▼」で簡単に説明を入れています。 ★○★で参考になるサイトのURLを最下に添付いたします。 ※下記○~○で表現している箇所については、変数の値「i」「j」を For~Nextによる繰り返し構文により動的に変化しながら扱っている事を意味します。 ▼オブジェクト名「Drop1」の値が変更されたら実行される Sub Drop1_Change() ★1★ ▼変数iに現在選択中のシートのセルG7の値に5加えた値で格納 i = Cells(3, 7).Value + 5 ★2★ ▼変数jの値を1から31まで1ずつ加えながら繰り返し (For~Next間を31回繰り返す) For j = 1 To 31 ★3★/★4★ ▼(1)セル「3行~33行のD列」の値と、セル「AA列~BE列のi行」の値が 「開」であるかをXorで排他的論理和を求める ▼(2)セル「AA列~BE列のi行」の値が「ON」であるか ・上記(1)、(2)のどちらかが満たされた時に(3)を実行 If Cells(j + 2, 4) Xor ((Cells(i, j + 26).Value = "開") _ Or _ (Cells(i, j + 26).Value = "ON")) Then ▼(3)セル「3行~33行のD列」の真理値を反転して格納 (真理値:True「真」またはFalse「偽」) Cells(j + 2, 4).Value = Not (Cells(j + 2, 4).Value) ★5★ ▼cmd_exexプロシージャに変数jの値(1~31)を渡して呼び出し cmd_exec (j) End If Next j End Sub ★5★ ▼以下cmd_execは上記Drop1_Changeから呼び出されて実行されます チェックボックスの番号を変数iに受け取り、 iの値に対応するチェックボックスcmd1~cmd31のチェックボタンを クリック(チェック状態の反転)します。 Sub cmd_exec(i As Integer) ~省略~ End Sub 参考サイト_______________ ★1★Cellsによるセル参照 http://home.att.ne.jp/zeta/gen/excel/c04p50.htm ★2★For~Nextによる繰り返し処理 http://officetanaka.net/excel/vba/tips/tips63.htm ★3★If~End IFブロックの条件分岐 http://www.atmarkit.co.jp/ait/articles/1403/04/news082_2.html ★4★ Xor演算子による排他的論理和 https://msdn.microsoft.com/ja-jp/library/csw1x2a6.aspx ★5★ cmd_execプロシージャ内の流れ http://officetanaka.net/excel/vba/statement/OnGoSub_OnGoTo.htm