[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『文字色の変換について』(とまと)
Excel2003を試用しています。
VBAでユーザーフォームを作り使用しています。
ユーザーフォームでコンボボックスを利用して
担当者をsheet1のリストより選択しワークシートに表示させています。
コンボボックスのリストの文字色は VBAでは変更できないと
ネットでいろいろ検索しわかりました。
では、コンボボックスでワークシートに表示した文字を
別リストを参照にして文字色を変えることは加納でしょうか?
たとえば・・・
別リスト
上田(赤文字)
田中(黄色文字)
木下(青文字)
山田(ピンク文字)
コンボボックスのリストで選択した文字は
ワークシートに表示した文字は黒ででると思うのですが
コンボボックスのリストで上田と選択すれば
別リストを参照にして赤文字になるとかってことは
VBAで加納でしょうか〜?
説明がへたで申し訳ありません。
よろしくお願いします。
Private Sub ComboBox1_Change() Select Case ComboBox1.Value Case "上田" ComboBox1.ForeColor = vbRed Case Else ComboBox1.ForeColor = vbBlack End Select End Sub
新規ブックにて、試してください。
ユーザーフォームを一つ作成してください(UserForm1)。
このUserForm1には、
コンボボックス(ComboBox1) コマンドボタン(CommandButton1)
を配置してください。
UserForm1のモジュールに
Option Explicit '=================================================== Private Sub CommandButton1_Click() With ComboBox1 If .ListIndex >= 0 Then ActiveCell.Value = .List(.ListIndex, 0) ActiveCell.Font.Color = .List(.ListIndex, 1) End If End With End Sub '=================================================== Private Sub UserForm_Initialize() With ComboBox1 .Style = fmStyleDropDownList .ColumnCount = 1 .List = Application.Evaluate("{""上田""," & vbRed & ";""田中""," & vbYellow & _ ";""木下""," & vbBlue & ";""山田""," & vbMagenta & "}") End With End Sub
標準モジュールに
Option Explicit Sub test() Range("a1").Select UserForm1.Show End Sub
以上です。testを実行してみてください。
コンボボックスで適当に選択後に コマンドボタンをクリックしてください。
上田(赤文字) 田中(黄色文字) 木下(青文字) 山田(ピンク文字)
というような文字の色になります。ここでは、表示対象はセルA1です。
コンボボックスには、見た目には1列データ表示でも実際には、2列データが配置できると言うことです。
ここでは、 名前と色(RGB)番号が設定されています。
実際には、このデータはどこかシートに配置して、コンボボックスに配置した方がよいですよ
例のようにユーザーフォームに直接固有名や色番号などは 書かないこと
ichinose
勘違いしてるかなぁ・・・
ichinoseさんのアドバスのように名前と、それに紐つく色は別シートにテーブルとして構えておくといいね。 で、名前と色番号(またはインデックス)をテーブルに持たせる方法もあるけど、私がよくつかうのは 名前のみをリストにして、その名前のセルの背景色を、その名前に紐つく色にしておく。 このほうが、リストを見たときに、それぞれの名前と色が一瞬でわかるので便利かな。
で、それはいいんだけど、コンボボックスで選んだ名前が、タイミングはわからないけど、最終的には 特定のセルに転記されるんだよね。 で、転記された時にそのシートのセルの文字色を紐ついた色にしたいということなのでは?
それであれば、私なら、ユーザーフォームでは、我関せずで、淡々と転記。 シート側で、Changeイベントで、その名前にふさわしい文字色をセット。 こういうようにするけどなぁ。
追記)あぁ、すでにSHeet1に担当者リストがあるんだね。であれば、そのリストの各セルに色をつけておけばいいと思うね。
(ぶらっと)
↑でつぶやいたことをコードにすると。 前提として、COmboBox1のRowSourceにリストアドレスがセットされている、シート上の名前のリストに背景色がセットされている、 名前を転記するセルがA1。
この前提で、転記セルのシートのシートモジュールに以下。ユーザーフォームでは色に関しては何もしない。
Private Sub Worksheet_Change(ByVal Target As Range) Dim x As Variant Dim r As Range Dim c As Range
Set c = Range("A1") If Not Intersect(Target, c) Is Nothing Then Set r = Evaluate(UserForm1.ComboBox1.RowSource) x = Application.Match(c.Value, r, 0) If IsNumeric(x) Then c.Font.Color = r(x).Interior.Color Else c.Font.ColorIndex = xlAutomatic End If End If End Sub
追記)スレ主さんの環境は2003なのでColorIndexによる処理でもいいんだけど、2007以降の環境で実行する場合を想定して より、色が自由に選べるColorで処理をしている。
さらに追記)処理結果は文字色なので、リスト内の各セルも背景色ではなく、その文字色として セットしておいた方がいいのかもしれないね。もし、そうするなら c.Font.Color = r(x).Interior.Color を c.Font.Color = r(x).Font.Color
(ぶらっと)
ichinoseさんのをやってみたのですがうまくいかず
ぶらっとさんのも試したみたのですが 文字色が変りません。
リストの文字色を変えて 転記セルのシートのシートモジュール書き込んだのですが
文字色がうまく変りません。
シート作成で毎月シートを作っていく設定になってます。
書き込むシートモジュールはWorksheetでいいのでしょうか?
それともテンプレ?
よくわかっていなくてすみません。
再度教えていただきたいと思います。
よろしくお願いします。
アップしたコードは、仮に、コンボボックスで選択された名前が A1 に転記されるという前提なんだけど そこは大丈夫?
(ぶらっと)
エラー表示は 転記シートの下に別表を作り そこにも必要項目が転記されるようになってる部分がエラーになってます。
If ComboBox3.Value < "80" Then
If ComboBox1.Value = "上田" Then ActiveSheet.Range("D30").Value = Range("D30").Value + TextBox3.Value ElseIf ComboBox1.Value = "田中" Then ActiveSheet.Range("G30").Value = Range("G30").Value + TextBox3.Value ElseIf ComboBox1.Value = "伊藤" Then ActiveSheet.Range("J30").Value = Range("J30").Value + TextBox3.Value ElseIf ComboBox1.Value = "久保" Then ActiveSheet.Range("M30").Value = Range("M30").Value + TextBox3.Value Else MsgBox "担当者を入力してください" End If
上田を選択した場合
ActiveSheet.Range("D30").Value = Range("D30").Value + TextBox3.Value
がエラーになってます。
あと、A6〜A26に転記されるようにするためには
ここのSet c = Range("A1")部分はどのように記入すればよいのでしょうか?
すみません
よろしくお願いします。
>コンボボックスで選択された名前が A6やA7に変更してやると「実行時エラー"13" 型が一致しません」
このエラーが出たコードをアップしてくれる?
>ActiveSheet.Range("D30").Value = Range("D30").Value + TextBox3.Value がエラーになってます。
この時のエラーメッセージは?
>あと、A6〜A26に転記されるようにするためには ここのSet c = Range("A1")部分はどのように記入すればよいのでしょうか?
いやぁ、ここは転記しているところではなく、転記されたものをチェックしているところなんだけど? 質問の意味が、【転記先は A6〜A26のいずれかになっているんだけど、その場合、どう直したらいいか?】 ということなら理解できるけど?
↑ という理解で、
Private Sub Worksheet_Change(ByVal Target As Range) Dim x As Variant Dim r As Range Dim c As Range Dim a As Range
Set a = Intersect(Target, Range("A6:A26")) If a Is Nothing Then Exit Sub Set r = Evaluate(UserForm1.ComboBox1.RowSource) For Each c In a x = Application.Match(c.Value, r, 0) If IsNumeric(x) Then c.Font.Color = r(x).Font.Color Else c.Font.ColorIndex = xlAutomatic End If Next
End Sub
(ぶらっと)
それと、アップされた別表への書き込みコードだけど ・これは、どのプロシジャに書かれている? ・で、この4人以外ならエラーなの? 佐藤というのがリストにあって、それを選んだらどうなる? ・ComboBox3 や TextBox3 には何が入るの?
まぁ、これは、質問しているエラーとは関係のないところだけど。ちょっと気になって。
追加質問) コンボボックスで選んだ名前がA6:A26 のいずれかに書かれるとして、 その中のどこに書くかは、どうやって決めているの?
(ぶらっと)
転記先は A6〜A26のいずれかになっているんだけど、その場合、どう直したらいいか?でした。
書いていただいた通りのコードでちゃんとできました。
今度はエラーもでずに文字色も変更できました。
ComboBox3やTextBox3は見込み度と売上金額です。
でも なぜかエラーがでなくなりました。
入力フォームから入力すると 自動でA6からA7、A8と順番に転記されます。
こんな答えで合ってますでしょうか?
本当にありがとうございました。
また、何かありましたら よろしくお願いします。
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.