1

問題があります。http: //goo.gl/i82eAこれは必要な出力を含むサンプルデータです。現在、多くのifステートメントを手動で使用してジョブを実行するユーザー定義関数がありますが、列で特定の色を見つけてそれに対応するカラーマップを返す場合は、vlookupのようなことを実行できるようにしたいと思います。

または、青を含むすべてのセルをフィルター処理し、宛先セルに青を指定するようなフィルター関数のように使用してから、色のテーブルの次の値で次のフィルターを実行します。

カラーColorMapテキスト必要な出力
ブルーブルーディープブルーシューブルー(テキストにブルーリターンブルーが含まれている場合)
赤赤深紅靴赤(テキストに赤のリターン赤が含まれている場合)など
タンブラウンタンシューブラウン
ネイビーブルーネイビーエンプシューブルー
翡翠緑翡翠靴緑
プラムレッドプラムレッドシューマルチカラー(テキストに複数のカラーリターンマルチカラーが含まれている場合)

したがって、入力は、検索するデータの2列のようにする必要があります。検索する場合は、1列で、関数の場合は1列が宛先列になります。

function_name(lookup_text,lookup_table,destination)

前もって感謝します

ps:これがImが今使っているコードです

コード:

Function Colormap(strVal As String) As String

If (InStr(strVal, "red") > 0) Then
    Colormap = "Red"
End If

If (InStr(strVal, "Beige") > 0) Then
    Colormap = "Beige"
End If

etc..

End Function
4

1 に答える 1

3

これは値を検索し、Text値を返しColorMapます。複数の一致が見つかった場合は、「多色」が返されます。注: これは配列数式です。Ctrl+Shift+Enter で入力してください。

=IF(SUM(IF(ISNUMBER(SEARCH(A$2:A$7,C2)),1,0))>1,"multicolored",LOOKUP(2^15,SEARCH(A$2:A$7,C2),B$2:B$7))

同じことを行う関数を次に示します。参照テーブルが名前付き範囲である必要があります。次のように関数を呼び出します。=ColorMap(C2,"ColorTable")ここColorTableで、 は を参照する名前付き範囲$A$2:$B$7です。

Public Function ColorMap(LookupValue As Variant, LookupTableName As String) As String
    Dim vTable As Variant
    Dim lIdx As Long
    Dim sColor As String

    ' transfer lookup table to 2D range & loop through to find matches
    vTable = Names(LookupTableName).RefersToRange.Value
    For lIdx = LBound(vTable, 1) To UBound(vTable, 1)
        If UCase$(LookupValue) Like "*" & UCase$(vTable(lIdx, 1)) & "*" Then
            sColor = sColor & ", " & vTable(lIdx, 2)
        End If
    Next lIdx
    If Len(sColor) > 2 Then sColor = Mid$(sColor, 3)
    ' map multiple matches to "multicolored"
    If InStr(sColor, ",") > 0 Then sColor = "multicolored"
    ColorMap = sColor
End Function
于 2011-12-13T07:48:27.937 に答える