過去ログ

                                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を黒く塗りつぶす。」

こんな感じなんですけど、どうでしょうか?
 ───────────────────────────────────────  ■題名 : Re:VBAは難しい・・・。だれか教えて。  ■名前 : ichinose  ■日付 : 02/11/22(金) 21:04  -------------------------------------------------------------------------
   ▼さくら さん
こんばんは。
>だれか教えてください。VBA始めたばかりでよくわかんなくて・・・・。
>
>作りたいマクロは
>「もし、オプションボタンAかBかCがオンならばセルA1を黒く塗りつぶす。
> どれにも当てはまらないとき、
>    オプションボタンDかEかFがオンならばセルB1を黒く塗りつぶす。
> さらに、どれにも当てはまらないときは
>    セルC1を黒く塗りつぶす。」
>
>こんな感じなんですけど、どうでしょうか?
オプションボタンは、どこに貼り付けてあるんですか?
ユーザーフォームですか?それともシートですか?
さらに、もし、シートの場合は、「フォーム」というツールバーと「コントロールツールバー」というツールバーの両方にオプションボタンは付いています。特定して下さい。
また、オプションボタンは、どのようにグループ化されているのか
はっきりわかりません、教えて下さい。
 ───────────────────────────────────────  ■題名 : Re:VBAは難しい・・・。だれか教えて。  ■名前 : ぴかる  ■日付 : 02/11/22(金) 21:10  -------------------------------------------------------------------------
   さくらさん、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
 ───────────────────────────────────────  ■題名 : Re:VBAは難しい・・・。だれか教えて。  ■名前 : さくら  ■日付 : 02/11/22(金) 23:48  -------------------------------------------------------------------------
   オプションボタンについてきちんと書くべきでしたね。
ごめんなさい。
オプションボタンはツールバー内のフォームにあるオプションボタンのことです。
それと、わかりやすく書くつもりが逆にわけわかんなくしてしまってる、
A,B,C…ですが1,2,3…でかまいません。
ichinoseさん、ぴかるさん、その他のみなさんよろしくお願いします。
 ───────────────────────────────────────  ■題名 : Re:VBAは難しい・・・。だれか教えて。  ■名前 : ぴかる  ■日付 : 02/11/23(土) 10:29  -------------------------------------------------------------------------
   さくらさん、こんにちは。

>オプションボタンはツールバー内のフォームにあるオプションボタンのことです。
↑をシートに配置させる訳ですよね。そう考えてお答えします。

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
 ───────────────────────────────────────  ■題名 : Linkedcellの設定と条件付書式で・・  ■名前 : ichinose  ■日付 : 02/11/23(土) 10:49  -------------------------------------------------------------------------
   ▼さくら さん:
おはようございます。
>オプションボタンについてきちんと書くべきでしたね。
>ごめんなさい。
>オプションボタンはツールバー内のフォームにあるオプションボタンのことです。
>それと、わかりやすく書くつもりが逆にわけわかんなくしてしまってる、
>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)」
の指定を行う。

この設定でマクロ要らないと思いますが・・・。
 ───────────────────────────────────────  ■題名 : うまく伝わらなかったようです。も一度助...  ■名前 : さくら  ■日付 : 02/11/24(日) 17:54  -------------------------------------------------------------------------
   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が黒くなるだけなんです。
もうちょっとでうまくいきそうなのに、わかりません。
も一度教えてください。
 ───────────────────────────────────────  ■題名 : Re:うまく伝わらなかったようです。も一度助...  ■名前 : Nakamura  ■日付 : 02/11/24(日) 18:31  -------------------------------------------------------------------------
   こんばんは

横から失礼します。
こんな感じでどうでしょう。

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

それでは
 ───────────────────────────────────────  ■題名 : Re:うまく伝わらなかったようです。も一度助...  ■名前 : ichinose  ■日付 : 02/11/24(日) 19:05  -------------------------------------------------------------------------
   こんばんは、みなさん。
もう一度、確認です。「フォーム」ツールバーのオプションボタンですよね。
さくらさんのコードを改良しましたが・・・、
'===================================================================
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さんのコードを使うと思います。
 ───────────────────────────────────────  ■題名 : Re:うまく伝わらなかったようです。も一度助...  ■名前 : Nakamura  ■日付 : 02/11/24(日) 20:25  -------------------------------------------------------------------------
   いやーすいません。全体の流れを見ていませんでした。m(_ _)m
私のコードはichinoseさんの書かれた通り、コントロールツールボックス
のオプションボタンの場合です。
失礼致しました。
 ───────────────────────────────────────  ■題名 : やった、やった!みなさんありがとう。  ■名前 : さくら  ■日付 : 02/11/25(月) 17:40  -------------------------------------------------------------------------
   やっとできました!
ichinoseさん、ぴかるさん、Nakamuraさん、ありがとうございます。
ジツを言うと、コントロールツールバーの存在を知りませんでした。
恥ずかしい・・・・。
今回はとても勉強になったです。
ところで、ichinoseさんの教えてくれた
「OLEFormat.Object.Value」はどういう意味なんですか?
特に「OLEFormat」がわかんないんですけど。
よかったら教えてください。
今後の為にもぜひ知っておきたいです。
 ───────────────────────────────────────  ■題名 : Re:やった、やった!みなさんありがとう。  ■名前 : ichinose  ■日付 : 02/11/25(月) 20:45  -------------------------------------------------------------------------
   ▼さくら さん:
こんばんは。
>今回はとても勉強になったです。
>ところで、ichinoseさんの教えてくれた
>「OLEFormat.Object.Value」はどういう意味なんですか?
>特に「OLEFormat」がわかんないんですけど。
>よかったら教えてください。
>今後の為にもぜひ知っておきたいです。

実は、OLEFormat.Object.Valueの最後のValueプロパティは感でした。「コントロールツールボックス」のオプションボタンにもあったから、たぶんあるだろうとマクロの記録で調べたら、そうだったということです。

OLEFormat.Objectについては、
Shapeオブジェクトに埋め込まれたオブジェクト(Oleobject)の情報を取得するオブジェクトがOleformat(ここではShapeオブジォクトから取得するプロパティということになりますが)、実際のOleobjectをObjectというプロパティで取得しています。オプションボタンON、OffをこのObjectのプロパティValueによって、取得しています(感だったけど・・)。

「コントロールツールボックス」のオプションボタンは、シートに埋め込まれたOleobjectなので、Activesheet.Oleobjects等で取得できますが、フォームのオプションボタンは、図形の中に埋め込まれているので、上記のような取得の仕方をしています。

というような理解の仕方をしていますが、どなたか異論・補足がありましたら、お願いします。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━    通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━                                 Page 388