- 締切済み
条件付書式について
4種類以上の文字列を自動的に色変換について教えて下さい。 例えば、A1の列にリスト形式で下記国名を選択すると自動的に色が変わるようにしたいです。 日本=赤 アメリカ=青 イタリア=緑 フランス=黄 韓国=黒 ちなみに、EXCEL2003です。 事務処理で困っています。 宜しくお願いします。
- みんなの回答 (8)
- 専門家の回答
みんなの回答
- galma_zabi
- ベストアンサー率33% (41/124)
いえ、こちらこそ至らずで。。 勉強してくださるということですから、 以下に回答6のコードを書いておきますね。 内容は至ってシンプルです。 Private Sub Worksheet_Change(ByVal Target As Range) '複数のセルが変更された場合は処理終了 If Target.Count > 1 Then Exit Sub 'A列のセルが変更された場合 If Not Intersect(Target, Range("A1:A65536")) Is Nothing Then '色の変更対象はD列なので、同一行のD列にRangeを設定します。 Dim country As Range Set country = Target.Offset(rowOffset:=0, columnOffset:=3) 'A列のセルに「日本」と入力された場合 If Target.Value = "日本" Then country.Font.Color = RGB(255, 0, 0) 'D列のセルの色を変更 ElseIf Target.Value = "アメリカ" Then country.Font.Color = RGB(0, 0, 255) ElseIf Target.Value = "イタリア" Then country.Font.Color = RGB(0, 128, 0) ElseIf Target.Value = "フランス" Then country.Font.Color = RGB(255, 255, 0) ElseIf Target.Value = "ドイツ" Then country.Font.Color = RGB(255, 255, 0) Else country.Font.Color = RGB(0, 0, 0) End If End If End Sub
- galma_zabi
- ベストアンサー率33% (41/124)
秋が来たら木々の葉が紅く色づく、、というのは、自然発生的なものですよね? Private Sub Worksheet_Change(ByVal Target As Range)関数もこれと同じで、 ワークシートのセルに何かしらの変更がなされた場合に自動的に同関数が呼び出されます。 (ただし、「アメリカ」と書かれているセルをダブルクリックしてセルを編集できるようにし、 その後「アメリカ」という文字を何も変えることなくEnterキーを押すだけでもこちらの関数は呼び出されますが。) プログラム的にはイベントが発生する、、などといい、 本件でいうとWorksheetのChangeイベントが発生しているわけです。 いちばん最初の回答にも書きましたが、VBAというのはプログラミング言語の一種ですから、 プログラミング経験がなくいきなり使いこなすのは難しいです。 メンテナンスができないのであれば、利用しないほうが良いと思いますよ。
お礼
何日間にもわたり色々教えて下さってありがとうございました。 これを機会に私も勉強してみようと思います。 本当にありがとうございました。
- galma_zabi
- ベストアンサー率33% (41/124)
> ただ、数式の所でEnterを押すと色が変わるのですが、自動で色が変わる方法ってありますか? VLOOKUP関数で取得した値をセットした場合、VBAで記述した以下の関数が呼び出されないため、色が変わりません。 > Private Sub Worksheet_Change(ByVal Target As Range) そのため、VBAのコードを書き換える必要があります。 つまり、入力をするセルがA列、VLOOKUPで取得した値を表示するセルがD列の場合、 A列のセルが変更されたら、D列のセルの色を変更する、というようにです。
補足
何度もごめんなさい。 > Private Sub Worksheet_Change(ByVal Target As Range) 上記の関数を呼び出す為には、どうすればよいのでしょうか? 宜しくお願いします。
- galma_zabi
- ベストアンサー率33% (41/124)
こんにちは。 A、B列の情報を元にC、D列へ自動的に値を設定するには?ということですが、 まずA、B列の情報に対する値のリストが必要になります。 例えば、補足回答にある表ですが、 1行目のスカートは売価50、利益15(いずれも単価)になっていますが、 2行目のスカートは売価80、利益10(いずれも単価)になっています。 これだと「スカート」に対するデータの区別がつかないので、 商品名、売価、利益 スカートA、50、15、 スカートB、80、10、、、というようなリストを作ります。 データリストが出来上がったら次は仕上げです。 ここでは仮に「データリスト」というシートにリストを作成したとします。 > ちなみにAとBはリスト形式にしたいです。 この意味がよくわかりませんが、ドロップダウン形式で選択させるということでしょうか。。 であれば、データリストのA列(商品名)を参照範囲としてドロップダウンリストの設定をすれば可能です。 数量をリストにしたいというのはよくわかりませんが、数量の範囲が決まっているということであれば同様にしてやればOKです。 C列の売価については、VLOOKUP関数を使って、先ほど作成したデータリストから取得します。 =VLOOKUP(A1,データリスト!A2:B10,2,FALSE) [A1]は、「スカートA」などの入力された値、 [データリスト!A2:B10]は、先ほど作成したリストの範囲、 [2]は、リストの範囲の中で何番目の列のデータを引っ張ってくるかです。 同様にして利益のデータもVLOOKUP関数で取得します。 あとは未入力時のチェック式などを埋め込んで仕様にあうように仕上げます。 VLOOKUP関数についてわからない場合は調べてみてください。 なお、あくまでも一例にすぎませんので、参考程度にお願いします。 私の回答による不利益には責任を持てませんのでよろしくお願いします。
お礼
ありがとうございました。 何とか目標としている物が出来ました。 すごく助かりました。 最後にもう一つ教えて下さい。 参考URLに「コードを入力すると商品名が自動入力される」 とありますが、VLOOKUPで商品名が自動入力されると、商品別に色が変わりません。 ただ、数式の所でEnterを押すと色が変わるのですが、 自動で色が変わる方法ってありますか? 宜しくお願い致します。
- galma_zabi
- ベストアンサー率33% (41/124)
とりあえず出来たということで良かったですね。 > A列とB列を入力するとCとD列が自動的に入力される方法はありますか? 方法はあると思いますが、この情報だけではなんとも。。。
補足
説明が下手でごめんなさい。 もう一度説明させて下さい。 例) A列 B列 C列 D列 (商品) (個数) (売価) (利益) スカート 2 100 30 スカート 1 80 10 ブラウス 2 300 50 こんな風にA列に商品、B列に個数、C列に売価、D列に利益を入力して、AとBを入力するとCとDが自動的に入力されるような感じにしたいのですが・・・。 ちなみにAとBはリスト形式にしたいです。 宜しくお願いします。
- galma_zabi
- ベストアンサー率33% (41/124)
上手くいかず申し訳ありません ^^; RGB(Red、Green、Blue) http://ja.wikipedia.org/wiki/RGB 色の表現方法の1つで、RGB(0,0,0)の黒から、 RGB(255,255,255)の白まで色の指定が可能です。 RGB(255, 0, 0)が赤なのは、緑と青が0だからです。 RGB 一覧 などで調べると参考になると思います。 (以下に見やすいところがあったのでリンク張っておきます。) また、「日本」だけ上手く言って他がダメということですが、全角で「アメリカ」と入れていますか? 半角では弾かれてしまうので。 あとはテキストの前後にスペースが入っているとか。 マクロの動作確認をして何がいけないのかを調べることができます。 エクセルの[ツール]-[マクロ]-[Visual Basic Editor]メニューを開き、 先のコードを貼り付けますが、貼り付ける先のシートをプロジェクトウィンドで選択して下さい。 (初期では左上に表示されているはずです。 表示されていない場合は、Visual Basic Editorの表示メニューよりプロジェクトエクスプローラを選択します。) If Intersect(Target, Range("A1:A65536")) Is Nothing Then Exit Sub と書いてあるところにカーソルを持ってきて、F9キーを押します。 するとこちらのコードに色が付いて反転します。 (この行為を、「ブレークポイントを設定」といいます) この状態で、エクセルのシートに戻ってA列のどこかで「アメリカ」と入力してください。 すると、Visual Basic Editorが表示されて先ほどブレークポイントを置いた箇所が黄色く変わります。 (この状態でF8を押すと、黄色い行が下に一つ移動します) この状態で、Target.Valueと書いてあるところのどこでもいいので その上にマウスカーソルを持ってきます。 するとTarget.Valueに何が入っているのかが分かります。 Target.Valueに「アメリカ」と入っていれば、 ElseIf Target.Value = "アメリカ" Then Target.Font.Color = RGB(0, 0, 255) の式が評価されるはずですから、F8を何回か押して黄色い行を移動させ、 どのように処理が流れているのかを確認してください。 上記の式を通らない場合、「Target.Value = "アメリカ"」ではないということです。 確認が終わったらツールバーのリセットボタンを押すか、F5を押してください。
お礼
出来ました。! ありがとうございました。 すごく助かりました。 すみません、もう一つ聞いてもよろしいでしょうか? 例えば、アメリカの1が500と200 ↑ ↑ ↑ ↑ A列 B列 C列 D列 A列とB列を入力するとCとD列が自動的に入力される方法はありますか? 説明が下手ですいません。 お忙しいとは思いますが、宜しくお願い致します。
- galma_zabi
- ベストアンサー率33% (41/124)
> A1セルで日本は赤になったのですが、他国の色が変わりませんでした。 おかしいですね。 文字が確定されれば変わるはずですが。。 あと、マクロのセキュリティを「中」にしておいてください。 > それと、Aの列全てを上記の条件を当てはめるにはどうしたら良いのでしょうか? 以下に書き直しました。 やり方は色々、ネットにも同じような情報は載っていますので、そちらも参考にしてください。 Option Explicit ' A1セルの値を監視し文字色を変更する Private Sub Worksheet_Change(ByVal Target As Range) If Target.Count > 1 Then Exit Sub If Intersect(Target, Range("A1:A65536")) Is Nothing Then Exit Sub ' 文字色を設定する If Target.Value = "日本" Then Target.Font.Color = RGB(255, 0, 0) '赤 ElseIf Target.Value = "アメリカ" Then Target.Font.Color = RGB(0, 0, 255) '青 ElseIf Target.Value = "イタリア" Then Target.Font.Color = RGB(0, 128, 0) '緑 ElseIf Target.Value = "フランス" Then Target.Font.Color = RGB(255, 255, 0) '黄 ElseIf Target.Value = "フランス" Then Target.Font.Color = RGB(255, 255, 0) '黄 Else Target.Font.Color = RGB(0, 0, 0) '黒 End If End Sub
お礼
ありがとうございました。 Aの列は全て変更することが出来ましたが、やはり他国の色は変更できませんでした。 一つお聞きしたいのですが、上記のRGB(255, 0, 0)はどういう意味なのでしょうか? お忙しいところすいません。
- galma_zabi
- ベストアンサー率33% (41/124)
こんにちは。 Excel2003の場合、条件付書式は3つしかないので、それ以上の条件は設定できません。 (Excel2007は可能) Excel2003でやるとしたらVBAでマクロを組むしか方法はないです。 以下にVBAの記述を書いておきますが、さっぱり分からない場合は 保守性の面でも利用しないほうが良いかもしれません。 Option Explicit ' A1セルの値を監視し文字色を変更する Private Sub Worksheet_Change(ByVal Target As range) ' A1セルでなければ処理しません If Target.Address <> "$A$1" Then Exit Sub Dim rg As range Set rg = range("$A$1") ' 文字色を設定する If rg.Value = "日本" Then rg.Font.Color = RGB(255, 0, 0) '赤 ElseIf rg.Value = "アメリカ" Then rg.Font.Color = RGB(0, 0, 255) '青 ElseIf rg.Value = "イタリア" Then rg.Font.Color = RGB(0, 128, 0) '緑 ElseIf rg.Value = "フランス" Then rg.Font.Color = RGB(255, 255, 0) '黄 Else rg.Font.Color = RGB(0, 0, 0) '黒 End If End Sub
補足
回答ありがとうございました。 A1セルで日本は赤になったのですが、他国の色が変わりませんでした。 galma_zabiさんが記載して下さったものをコピーして貼り付けたのですが出来ませんでした。 それと、Aの列全てを上記の条件を当てはめるにはどうしたら良いのでしょうか? 回答宜しくお願い致します。 kyoko
補足
回答ありがとうございました。出来ました。 何となくですけど、どこを変えればどう変わるというのが分かってきました。 galma_zabiさんのおかげです。 これから少しずつ知識を増やしていきたいと思います。 感謝しています。 本当にありがとうございました。 kyoko