Page 388 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 通常モードに戻る ┃ INDEX ┃ ≪前へ │ 次へ≫ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ▼VBAは難しい・・・。だれか教えて。 さくら 02/11/22(金) 20:48 ┣Re:VBAは難しい・・・。だれか教えて。 ichinose 02/11/22(金) 21:04 ┃ ┣Re:VBAは難しい・・・。だれか教えて。 ぴかる 02/11/22(金) 21:10 ┃ ┗Re:VBAは難しい・・・。だれか教えて。 さくら 02/11/22(金) 23:48 ┃ ┣Re:VBAは難しい・・・。だれか教えて。 ぴかる 02/11/23(土) 10:29 ┃ ┗Linkedcellの設定と条件付書式で・・ ichinose 02/11/23(土) 10:49 ┣うまく伝わらなかったようです。も一度助... さくら 02/11/24(日) 17:54 ┃ ┗Re:うまく伝わらなかったようです。も一度助... Nakamura 02/11/24(日) 18:31 ┃ ┗Re:うまく伝わらなかったようです。も一度助... ichinose 02/11/24(日) 19:05 ┃ ┗Re:うまく伝わらなかったようです。も一度助... Nakamura 02/11/24(日) 20:25 ┗やった、やった!みなさんありがとう。 さくら 02/11/25(月) 17:40 ┗Re:やった、やった!みなさんありがとう。 ichinose 02/11/25(月) 20:45 ─────────────────────────────────────── ■題名 : VBAは難しい・・・。だれか教えて。 ■名前 : さくら ■日付 : 02/11/22(金) 20:48 -------------------------------------------------------------------------
だれか教えてください。VBA始めたばかりでよくわかんなくて・・・・。 作りたいマクロは 「もし、オプションボタンAかBかCがオンならばセルA1を黒く塗りつぶす。 どれにも当てはまらないとき、 オプションボタンDかEかFがオンならばセルB1を黒く塗りつぶす。 さらに、どれにも当てはまらないときは セルC1を黒く塗りつぶす。」 こんな感じなんですけど、どうでしょうか? |
▼さくら さん こんばんは。 >だれか教えてください。VBA始めたばかりでよくわかんなくて・・・・。 > >作りたいマクロは >「もし、オプションボタンAかBかCがオンならばセルA1を黒く塗りつぶす。 > どれにも当てはまらないとき、 > オプションボタンDかEかFがオンならばセルB1を黒く塗りつぶす。 > さらに、どれにも当てはまらないときは > セルC1を黒く塗りつぶす。」 > >こんな感じなんですけど、どうでしょうか? オプションボタンは、どこに貼り付けてあるんですか? ユーザーフォームですか?それともシートですか? さらに、もし、シートの場合は、「フォーム」というツールバーと「コントロールツールバー」というツールバーの両方にオプションボタンは付いています。特定して下さい。 また、オプションボタンは、どのようにグループ化されているのか はっきりわかりません、教えて下さい。 |
さくらさん、ichinoseさん、こんばんは。 ユーザーフォームだったとして作ってみました。 A〜Fではなく1〜6にしました。参考にしてみてください。 Private Sub CommandButton1_Click() Range("A1:C1").Interior.ColorIndex = xlNone If (OptionButton1 = True) Or (OptionButton2 = True) Or (OptionButton3 = True) Then Range("A1").Interior.ColorIndex = 1 ElseIf (OptionButton4 = True) Or (OptionButton5 = True) Or (OptionButton6 = True) Then Range("B1").Interior.ColorIndex = 1 Else Range("C1").Interior.ColorIndex = 1 End If End Sub |
オプションボタンについてきちんと書くべきでしたね。 ごめんなさい。 オプションボタンはツールバー内のフォームにあるオプションボタンのことです。 それと、わかりやすく書くつもりが逆にわけわかんなくしてしまってる、 A,B,C…ですが1,2,3…でかまいません。 ichinoseさん、ぴかるさん、その他のみなさんよろしくお願いします。 |
さくらさん、こんにちは。 >オプションボタンはツールバー内のフォームにあるオプションボタンのことです。 ↑をシートに配置させる訳ですよね。そう考えてお答えします。 1.グループボックスを配置 2.その中にオプションボタンを配置 3.オプションボタン上で右クリックしてコントロールの書式設定を選択 4.コントロールのリンクするセルを指定 5.ボタンを設置 6.標準モジュールに以下のマクロをコピーし、ボタン用のマクロとする。 リンクセルは、D1としています。 Sub TEST() Range("A1:C1").Interior.ColorIndex = xlNone If (Range("D1") = 1) Or (Range("D1") = 2) Or (Range("D1") = 3) Then Range("A1").Interior.ColorIndex = 1 ElseIf (Range("D1") = 4) Or (Range("D1") = 5) Or (Range("D1") = 6) Then Range("B1").Interior.ColorIndex = 1 Else Range("C1").Interior.ColorIndex = 1 End If End Sub |
▼さくら さん: おはようございます。 >オプションボタンについてきちんと書くべきでしたね。 >ごめんなさい。 >オプションボタンはツールバー内のフォームにあるオプションボタンのことです。 >それと、わかりやすく書くつもりが逆にわけわかんなくしてしまってる、 >A,B,C…ですが1,2,3…でかまいません。 >ichinoseさん、ぴかるさん、その他のみなさんよろしくお願いします。 ツールバー「フォーム」のオプションボタンならば、設定だけで可能です。 1〜6のオプションボタンのどれか一つを ・「右クリック」----「コントロールの書式設定」を選択 ・「コントロール」タブを選択 ・「リンクするセル」に適当なセルアドレスを指定する「ここでは仮にJ1」 ・「OK」ボタンをクリック 以上の設定で例えば、オプションボタン1をクリックすれは゛、セルJ1に「1」が入るはずです。 後は、セルA1〜C1に条件付書式を設定します。 ・セルA1を選択 ・「書式」---「条件付書式」をクリック ・「セルの値が」を「数式が」に変更 ・その右のボックスに「=if(and($j$1>=1,$j$1<=3),true,false)」と入力 ・「書式」ボタンをクリックし、パターンで黒を選択 ・「OK」ボタン、「OK」ボタンのクリックで完了 同様の手順でセルB1、C1に数式だけ 「=if(and($j$1>=4,$j$1<=6),true,false)」 「=if($j$1=0,true,false)」 の指定を行う。 この設定でマクロ要らないと思いますが・・・。 |
ichinoseさん、ぴかるさん、もう一度教えてください。 「もし、オプションボタン1か2か3がオンならばセルA1を黒く塗りつぶす。 どれにも当てはまらないとき、 オプションボタン4か5か6がオンならばセルB1を黒く塗りつぶす。 さらに、どれにも当てはまらないときは セルC1を黒く塗りつぶす。」 オプションボタンはすべてSheet1上にあります。 オプションボタン1・2・3でひとつのグループ。 オプションボタン4・5・6でひとつのグループに分けてます。 このマクロも同じシート上の別のグループ内のオプションボタン7にマクロ登録するつもりです。 黒く塗りつぶすセルA1,B1,C1はSheet2のセルです。 Sheet2には保護をかけています。 以上ですべてです。 これでうまく伝わるといいんだけど・・・・。 ichinoseさんとぴかるさんからそれぞれ2度教えていただいた中では、ぴかるさんの最初のマクロが近いと思うんです。 私も同じ構文を使ってやろうとしてました。・・・・・・ダメだったけど。 ぴかるさんの回答をベースに作り直したのが↓です。 Sub Macro1() If (OptionButton1 = True) Or (OptionButton2 = True) Or (OptionButton3 = True) Then Sheets("Sheet2").Select ActiveSheet.Unprotect Range("A1").Interior.ColorIndex = 1 ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True ElseIf (OptionButton4 = True) Or (OptionButton5 = True) Or (OptionButton6 = True) Then Sheets("Sheet2").Select ActiveSheet.Unprotect Range("B1").Interior.ColorIndex = 1 ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True Else Sheets("Sheet2").Select ActiveSheet.Unprotect Range("C1").Interior.ColorIndex = 1 ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True End If End Sub これでエラーメッセージは出てこなくなったけど、オプションボタン1〜6と関連してないんです。 オプションボタン1〜6がオンになっててもマクロ実行後はすべてセルC1が黒くなるだけなんです。 もうちょっとでうまくいきそうなのに、わかりません。 も一度教えてください。 |
こんばんは 横から失礼します。 こんな感じでどうでしょう。 Sub test() Dim sh As Worksheet Set sh = Worksheets("Sheet2") sh.Unprotect With Worksheets("Sheet1") If .OptionButton1 Or .OptionButton2 Or .OptionButton3 Then sh.Range("A1").Interior.ColorIndex = 1 ElseIf .OptionButton4 Or .OptionButton5 Or .OptionButton6 Then sh.Range("B1").Interior.ColorIndex = 1 Else sh.Range("C1").Interior.ColorIndex = 1 End If End With sh.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True Set sh = Nothing End Sub それでは |
こんばんは、みなさん。 もう一度、確認です。「フォーム」ツールバーのオプションボタンですよね。 さくらさんのコードを改良しましたが・・・、 '=================================================================== Sub Macro1() Worksheets("Sheet2").Unprotect Worksheets("sheet2").Range("a1:c1").Interior.ColorIndex = 0 With Worksheets(1) If .Shapes("Option Button 1").OLEFormat.Object.Value = xlOn Or .Shapes("Option Button 2").OLEFormat.Object.Value = xlOn Or .Shapes("Option Button 3").OLEFormat.Object.Value = xlOn Then Worksheets("sheet2").Range("A1").Interior.ColorIndex = 1 ElseIf .Shapes("Option Button 4").OLEFormat.Object.Value = xlOn Or .Shapes("Option Button 5").OLEFormat.Object.Value Or .Shapes("Option Button 6").OLEFormat.Object.Value = xlOn Then Worksheets("sheet2").Range("B1").Interior.ColorIndex = 1 Else Worksheets("sheet2").Range("C1").Interior.ColorIndex = 1 End If End With Worksheets("sheet2").Protect DrawingObjects:=True, Contents:=True, Scenarios:=True End Sub で動いていますが(最近、フォームツールバーって、使用してなかったなあ)たぶん、 私が新規にコードを作成するとしたら、ぴかるさんのようにリンクされたセルを覗きに行くと思います。だって、簡単そうだら・・・。 どうしても上記のようなコードにするなら、「コントロールツールバー」のオプションボタンを使用して、Nakamuraさんのコードを使うと思います。 |
いやーすいません。全体の流れを見ていませんでした。m(_ _)m 私のコードはichinoseさんの書かれた通り、コントロールツールボックス のオプションボタンの場合です。 失礼致しました。 |
やっとできました! ichinoseさん、ぴかるさん、Nakamuraさん、ありがとうございます。 ジツを言うと、コントロールツールバーの存在を知りませんでした。 恥ずかしい・・・・。 今回はとても勉強になったです。 ところで、ichinoseさんの教えてくれた 「OLEFormat.Object.Value」はどういう意味なんですか? 特に「OLEFormat」がわかんないんですけど。 よかったら教えてください。 今後の為にもぜひ知っておきたいです。 |
▼さくら さん: こんばんは。 >今回はとても勉強になったです。 >ところで、ichinoseさんの教えてくれた >「OLEFormat.Object.Value」はどういう意味なんですか? >特に「OLEFormat」がわかんないんですけど。 >よかったら教えてください。 >今後の為にもぜひ知っておきたいです。 実は、OLEFormat.Object.Valueの最後のValueプロパティは感でした。「コントロールツールボックス」のオプションボタンにもあったから、たぶんあるだろうとマクロの記録で調べたら、そうだったということです。 OLEFormat.Objectについては、 Shapeオブジェクトに埋め込まれたオブジェクト(Oleobject)の情報を取得するオブジェクトがOleformat(ここではShapeオブジォクトから取得するプロパティということになりますが)、実際のOleobjectをObjectというプロパティで取得しています。オプションボタンON、OffをこのObjectのプロパティValueによって、取得しています(感だったけど・・)。 「コントロールツールボックス」のオプションボタンは、シートに埋め込まれたOleobjectなので、Activesheet.Oleobjects等で取得できますが、フォームのオプションボタンは、図形の中に埋め込まれているので、上記のような取得の仕方をしています。 というような理解の仕方をしていますが、どなたか異論・補足がありましたら、お願いします。 |