- ベストアンサー
「セルの書式設定」の「ユーザー定義」でセルの値がTRUEなら○FALSEなら×と表示する方法について
マイクロソフトのエクセル2000で 「セルの書式設定」の「ユーザー定義」を [=1]"○";[赤][=2]"×"にすると、 1なら○、2なら赤字の×をセルに表示される機能がありますが、 これを応用してTRUEなら○、FALSEなら赤字の×をセルに表示したいと思い、 [="TRUE]"○";[赤][=FALSE]"×"と設定してみたのですが、 上手く行かず困ってます。どこが違うのか、それともこの方法では出来ないのかを教えてください。 補足 何故これをやりたいのかと言うと、フォームのチェックボックスを使用し 「コントロールの書式設定」の「リンクするセル」の返り値が TRUEとFALSEなので、このセル自身を見やすい文字に変更したいと思ったので・・・。 リンクするセルと違うところに○×を置くのは簡単にif関数で出来るんですが、 リンクするセル自身を○×に置くのができないです。 お手数かと思いますが、セルの書式設定に拘らず、 何らかのヒントを知ってる方、教えてください。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
質問のような表示ができるようにしてみました。(Excel97,2000で確認) チェックボックスが何個あるか分かりませんので、2個のケースです。数によって『チェックボックス-1用』等を増やして下さい。『チェックボックス-1』に『チェックボックス-1用』のマクロを登録します。 ※質問から推測すると、フォームのチェックボックスを使われているようですが、Excel97以降ならコントロールツールボックスのチェックボックス(他のコントロールも)を使われたほうがいいと思います。新しいし、設定も楽でコードも書き易いです。下はフォームのチェックボックスということで思い出しながら書いてみました。(使えるプロパティが無いのが欠点ですね) ※チェックボックスのリンクするセルを見えないところ(セル)を指定して(別シートでも)、表示したいセルに =チェックボックスのリンクするセル番地*1 (または+0)とすれば 「True」、「False」という Bool値を数値に変換できるのでマクロは不要になると思われます。 チェックボックスのリンクするセルの書式は [=1]"○";[赤][=0]"×" とします。 ↓ここから。チェックボックスのあるシートのコードウインドウに貼り付けます。 Dim ChechBoxAddress As String 'チェックボックスのリンクするセルの番地 Dim ChechBoxClickFlg As Boolean 'チェックボックスをクリックすればTrue Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Address = ChechBoxAddress Then 'チェックボックスのクリックだけに反応させる If ChechBoxClickFlg = True Then '選択されたセルがチェックボックスのリンクするセルなら 'True→1、False→0に書き換える(チェックボックスの選択状態は変わらない) If Target.Value = True Then Target.Value = 1 Else Target.Value = 0 End If ChechBoxClickFlg = False End If End If End Sub 'チェックボックス-1用(個々のチェックボックス用。例:F3がリンクするセル) Sub CheckBox1_Valuechange_Numeric() 'リンクするセルをセットする ChechBoxAddress = "$F$3": selectChechBoxRange ChechBoxAddress End Sub 'チェックボックス-2用(個々のチェックボックス用。例:F5がリンクするセル) Sub CheckBox2_Valuechange_Numeric() 'リンクするセルをセットする ChechBoxAddress = "$F$5": selectChechBoxRange ChechBoxAddress End Sub 'チェックボックスのリンクするセルを選択する(共通) ' ※チェックスボックスのクリックではWorksheet_SelectionChangeが起きないため自力で動かす Sub selectChechBoxRange(rgChkBox As String) Dim rg As Range 'アクティブセルの番地を退避 Set rg = ActiveCell If rg.Address <> rgChkBox Then 'アクティブセルがチェックボックスのリンクするセルでなかったらリンクするセルを選択する Range(rgChkBox).Select Else 'アクティブセルがチェックボックスのリンクするセルならリンクするセルの斜め右下を選択する rg.Offset(1, 1).Select End If '元のアクティブセルを選択状態にする rg.Select End Sub
その他の回答 (4)
- nishi6
- ベストアンサー率67% (869/1280)
一部修正して下さい。途中のマクロを回答してしまいました。 'チェックボックス-1用 Sub CheckBox1_Valuechange_Numeric() 'リンクするセルをセットする ChechBoxAddress = "$F$3": ChechBoxClickFlg = True selectChechBoxRange ChechBoxAddress End Sub 'チェックボックス-2用 Sub CheckBox2_Valuechange_Numeric() 'リンクするセルをセットする ChechBoxAddress = "$F$5": ChechBoxClickFlg = True selectChechBoxRange ChechBoxAddress End Sub
- imogasi
- ベストアンサー率27% (4737/17069)
BOOLEAN値のFALSEやTRUEの値が入っている列を非表示に するのはどうでしょうか。 列Bを選択-書式-列-「表示しない」で列の非表示になりますよね。 エクセルでは変数にあたるものは、セルだと思います。そして全ての 変数=セルはシート画面に表示されてしまいます。それでB列とC列 をペアーで考えて、B列をC列の裏にある変数と見なすと、自分自身の値(B列の値)を参照してあたかも自分自身(C列)の表示を好きなようにすることが出来るわけです。そして楽屋裏のB列は見せないために隠す。 こういうのは見当はずれでしょうか。 プログラムではほとんどの言語で、例えばA=2*A というのが出来るのに、表計算では出来ないのが歯がゆい と思うことがありませんか。
- imogasi
- ベストアンサー率27% (4737/17069)
セルA1に例えば1を入力する。 セルB1に関数式=IF(A1=1、”○”、”×”)といれる。○は「まる」×は「ばつ」で出ます。そしてB1を選択して、メニュバーで書式-条件付き書式-「セルの値が」-「次ぎの値に等しい」-「○」-「書式」をクリック-フォントのタブをクリック-「色」-赤色をクリック-「OK」-「OK」をクリックでいかがでしょうか。このB列に複写するとA列が1で赤○、その他で黒×になります。 ただセルの値がTRUE、FALSEである点がどうすれば良いか。 この回答では、A列に値があって、B列に○×表示があるが、A列そのものに○×に置きかえるのは出来るかどうか わかりません。VBAでプログラムをくむより他ないのではないでしょうか。良く分かっている方はご教示を。
お礼
早速の回答、ありがとうございます。 違うセルにあればimogasiがおしゃっているように if関数を用いればTRUE、FAISEであってもできる事はわかっては いるのですが、同じセルになるとVBAを組むしか方法は無いんですかね。 出来れば簡単な方法がいいんですが、 なければ、VBAの場合こうすれば出来るって方法でもいいんで、 引き続き回答お願いします。
- hidearex
- ベストアンサー率25% (87/346)
「条件付き書式」でなんとか成るような気はしますが 詳細な設定方法は、よく判りません(^-^;) (“FALES”を赤字にするだけならすぐ出来るはずです) エクセルのヘルプで検索してみてください!
お礼
お返事遅くなりまして、すいません。 結論はやはりVBAを使わないと出来ないってことですね。 nishi6さんのVBAの例を参考にして これからやってみたいと思います。 皆さん、ご協力ありがとうございました。 次質問したときもよろしくお願いします。