[[20120706144123]] 『文字色の変換について』(とまと) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『文字色の変換について』(とまと)

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さん、ぶらっとさんありがとうございます。

ichinoseさんのをやってみたのですがうまくいかず
ぶらっとさんのも試したみたのですが 文字色が変りません。

リストの文字色を変えて 転記セルのシートのシートモジュール書き込んだのですが
文字色がうまく変りません。

シート作成で毎月シートを作っていく設定になってます。

書き込むシートモジュールはWorksheetでいいのでしょうか?
それともテンプレ?

よくわかっていなくてすみません。
再度教えていただきたいと思います。

よろしくお願いします。


 アップしたコードは、仮に、コンボボックスで選択された名前が A1 に転記されるという前提なんだけど
 そこは大丈夫?

 (ぶらっと)

コンボボックスで選択された名前が A6やA7に変更してやると
「実行時エラー"13" 型が一致しません」と出た後 
「このコマンドを使うとデバックは中断します」と出た後
転記シートに戻ると文字色が変更されています。

エラー表示は 転記シートの下に別表を作り そこにも必要項目が転記されるようになってる部分がエラーになってます。

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.