- 締切済み
VBの使い方ーオプションボタン6個のうち1つを選択したらフォント変更するやり方
エクセルでデータを作成しています。 オプションボタン6個のうちボタンを1つを選択すると、選択された番号に関連するセル内が網掛けになったり、太字になったり又はフォントが大きくなったりするやり方を是非教えてください。 イメージとしてはA列にオプションボタン B列に項目名という感じです。 贅沢なことをいうと (1)選択すると、選択されなかった文字はフォントが小さくなる。 (2)選択されたものは、フォントが大きく+太字+網掛けになるというのが希望です。 そこまでの設定はできなかったり、難しすぎるのであれば、選択されたものは「網掛け+太字」になるようにしたいです。 VBを使用しないとできないのかな?と思いますがVBは全く使い方が分からない為、実際に貼り付けて使えるような例文を教えていただけたら幸いです。 宜しくお願いします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- めとろいと(@naktak)
- ベストアンサー率36% (785/2139)
ざっとですが、とりあえずsetOption()について以下のように書き換えました。 一応、勉強の為に多めにコメントをつけて(笑) Private Sub setOption(ByVal opt As Long) Dim i, j As Long '字体定数 Const FONT_DEFAULT = "標準" Const FONT_BOLD = "太字" Const FONT_ITALIC = "斜体" Const FONT_BOLD_ITALIC = "太字 斜体" '対象セル Const START_ROW = 1 '対象セルの開始行 Const DATA_COL = "B" '対象セルの列 '非選択スタイル Const DEFAULT_FONTSTYLE = FONT_DEFAULT 'フォント字体 Const DEFAULT_FONTSIZE = 9 'フォントサイズ Const DEFAULT_COLORINDEX = Excel.xlNone 'セルの色 Const DEFAULT_PATTERN = Excel.xlNone 'パターン Const DEFAULT_PATTERNCOLORINDEX = Excel.xlNone 'パターンの色 '選択スタイル Const TARGET_FONTSTYLE = FONT_BOLD 'フォント自体 Const TARGET_FONTSIZE = 15 'フォントサイズ Const TARGET_COLORINDEX = 34 'セルの色 Const TARGET_PATTERN = Excel.xlGray8 'パターン Const TARGET_PATTERNCOLORINDEX = 1 'パターンの色 '画面の更新をしない Application.ScreenUpdating = False 'オプションボタンがある分繰り返す For i = 1 To ActiveSheet.OLEObjects.Count 'オプションボタン以外のオブジェクトは操作しない If ActiveSheet.OLEObjects(i).Object.DisplayStyle = _ MSForms.fmDisplayStyleOptionButton Then '全オプションボタンを非選択スタイルにする j = i + START_ROW - 1 With ActiveSheet.Range(DATA_COL & CStr(j)) With .Font .Size = DEFAULT_FONTSIZE .FONTSTYLE = DEFAULT_FONTSTYLE End With With .Interior .ColorIndex = DEFAULT_COLORINDEX .Pattern = DEFAULT_PATTERN .PatternColorIndex = DEFAULT_PATTERNCOLORINDEX End With End With End If Next '選択オプションボタンを選択スタイルにする j = opt + START_ROW - 1 With ActiveSheet.Range(DATA_COL & CStr(j)) With .Font .Size = TARGET_FONTSIZE .FONTSTYLE = TARGET_FONTSTYLE End With With .Interior .ColorIndex = TARGET_COLORINDEX .Pattern = TARGET_PATTERN .PatternColorIndex = TARGET_PATTERNCOLORINDEX End With End With '画面の更新をする Application.ScreenUpdating = True End Sub いじる所は「対象セル」と「非選択スタイル」と「選択スタイル」だけですので 書き換えたとしてもプログラムの動作を壊す事はありません。 DEFAULT(TARGET)_FONTSTYLEに指定するのは 上で記述されてある「字体定数」から持ってきて下さい。 DEFAULT(TARGET)_FONTSIZEに指定するのはフォントのサイズです。 DEFAULT(TARGET)_COLORINDEX、DEFAULT(TARGET)_PATTERN、 DEFAULT(TARGET)_PATTERNCOLORINDEXに指定するのは 通常直感で全てを知っている人はいません。 一度、どうでもいいセルでセルの色、パターンを変えるマクロを登録し、 Alt+F11を押して出てきたウィンドウの左上にあるウィンドウ、 そこにModule1などというのがあると思いますから、 それを開いてみてみれば指定した色やパターンの数値などが出ています。 それをコピペする形で変更すれば良いでしょう。 一応、処理対象の開始行と列が選べますから、オプションボタンと行の同期を取る必要はありません。
- めとろいと(@naktak)
- ベストアンサー率36% (785/2139)
> Private Sub OptionButton1_Click() > end sub > の間に > Private Sub setOption(ByVal opt As Long) > Dim i As Long > を貼り付けようとするとエラーと出てしまいます。 > この文章を入れずに貼り付けると書式は変更できまし> た。 これは間違いです。 画面上にコンボボックスが2つありますよね? そこを (General) (Declarations) にして、 Private Sub setOption(ByVal opt As Long) Dim i As Long ~ 中略 ~ Application.ScreenUpdating = True End Sub を貼り付けてください。 その後、 Private Sub OptionButton1_Click() end sub の間に Call setOption(1) を貼り付けて下さい。 2つめのオプションボタンは以下のようになります。 Private Sub OptionButton2_Click() Call setOption(2) end sub 但し、今回示したプログラムは、オプションボタンとその項目名(B列)が 1行目から始まる事と、オプションボタン1~6が B1~B6に対応している事、この2つが前提になっていますから、 汎用的にしたいのであればちょっと書き換えないといけません。
- めとろいと(@naktak)
- ベストアンサー率36% (785/2139)
こんなんでどうでしょう? Private Sub setOption(ByVal opt As Long) Dim i As Long Application.ScreenUpdating = False For i = 1 To ActiveSheet.OLEObjects.Count With ActiveSheet.Range("B" & CStr(i)).Font .Size = 9 .FontStyle = "標準" End With ActiveSheet.Range("B" & CStr(i)).Interior.ColorIndex = xlNone Next With ActiveSheet.Range("B" & CStr(opt)).Font .Size = 15 .FontStyle = "太字" End With With ActiveSheet.Range("B" & CStr(opt)).Interior .ColorIndex = 34 .Pattern = xlGray8 .PatternColorIndex = 1 End With Application.ScreenUpdating = True End Sub 網掛け、パターンはお好みで。 呼び出し方は Call setOption(opt long) です。 引数optは押されたオプションボタンのインデックスです。 なので、1つ目のオプションボタンが押された場合は 以下のように記述します。 Private Sub OptionButton1_Click() Call setOption(1) End Sub 因みにエラー制御はしていませんので悪しからず。
お礼
回答ありがとうございます。 やってみました!! 選択すると書式は変更するように設定はできたのですが、私のやりかたが悪いのか再度教えてください。 (1)6個のオプションボタンがあり、最初1番を選択すると書式が変る。(これはできました!) ↓ (2)その後、2番に選択を変更すると1番に反映された書式は元に戻り、2番に書式が設定されるようにしたいのですが可能でしょうか? (3) Private Sub OptionButton1_Click() end sub の間に Private Sub setOption(ByVal opt As Long) Dim i As Long を貼り付けようとするとエラーと出てしまいます。 この文章を入れずに貼り付けると書式は変更できました。 (4) Private Sub OptionButton1_Click() Call setOption(1) End Sub これはどこに貼り付ければいいのか。。。すみません