3

Excel に、セルの ColorIndex (または RGB) を取得する数式はありますか?

次の関数を見つけました。

CELL(info_type, the_cell)

ここに記載されていますが、セルの色に関する参照情報はありません。

color情報ですが、私には役に立ちません。実際には、次のように説明されています。

"color"セルが負の値に対して色で書式設定されている場合は値 1。それ以外の場合は 0 (ゼロ) を返します。

何か案が?

また、これを行う VBA プロパティはCell.Interior.Color、実際にはマクロではなく単純な Excel 数式を使用していることがわかりました。数式で VBA 関数をエミュレートする方法はありますか?

4

3 に答える 3

4

ここにいくつかの小さな関数があります。Altシートから-F11を押して VBA エディターにアクセスし、新しいモジュールを挿入し、以下のコードを貼り付け、ワークシートに戻って、次のように名前で使用します。=FillColor(A1)

最初の 2 つは、フォントと背景色に 10 進数値を与える約束された「3 ライナー」ですが、あまり役に立ちません。

2 番目のペアは、10 進数を RGB に変換し、N、N、N の形式の文字列を返します。

3 番目のペアは配列数式です。3 つのセルを連続して選択し、数式を入力してCtrl+ Shift+Enterを押すと、隣接する 3 つのセルの RGB 数値が取得されます。

Function FillColor(Target As Range) As Variant
    FillColor = Target.Interior.Color
End Function

Function FontColor(Target As Range) As Variant
    FontColor = Target.Font.Color
End Function

Function FillColorRGB(Target As Range) As Variant
Dim N As Double

    N = Target.Interior.Color
    FillColorRGB = Str(N Mod 256) & ", " & Str(Int(N / 256) Mod 256) & ", " & Str(Int(N / 256 / 256) Mod 256)
End Function

Function FontColorRGB(Target As Range) As Variant
Dim N As Double

    N = Target.Font.Color
    FontColorRGB = Str(N Mod 256) & ", " & Str(Int(N / 256) Mod 256) & ", " & Str(Int(N / 256 / 256) Mod 256)
End Function

Function FillColorRGBArray(Target As Range) As Variant
Dim N As Double, A(3) As Integer

    N = Target.Interior.Color
    A(0) = N Mod 256
    A(1) = Int(N / 256) Mod 256
    A(2) = Int(N / 256 / 256) Mod 256
    FillColorRGBArray = A
End Function

Function FontColorRGBArray(Target As Range) As Variant
Dim N As Double, A(3) As Integer

    N = Target.Font.Color
    A(0) = N Mod 256
    A(1) = Int(N / 256) Mod 256
    A(2) = Int(N / 256 / 256) Mod 256
    FontColorRGBArray = A
End Function

注意: セルの色を変更しても、上記の関数/数式による再計算は開始されません。一般に、セルの色を変更しても再計算は行われないためです。+ + +を使用して完全な再計算を手動で開始する必要があります。CtrlAltShiftF9

于 2013-01-11T17:09:01.887 に答える
0

以下で試してください

行われた変更: コード内のコメントを参照してください

モジュール

Public Function Performance_Message(NonPreferredAvg As Single _
                                  , NonPreferredAvgname As String _
                                  , PreferredAvg As Single _
                                  , PreferredAvgname As String _
                                  , Optional Outputtype As String _
                                   ) As Variant

    Dim performancemessage As String
    Dim averagedifference As Single
    Dim stravgdif As String
    Dim cellcolor As String

    averagedifference = Abs(NonPreferredAvg - PreferredAvg)
    stravgdif = FormatPercent(averagedifference, 2)

    Select Case PreferredAvg
        Case Is < NonPreferredAvg
            performancemessage = PreferredAvgname & " Is " & stravgdif & " Less Than " & NonPreferredAvgname
            cellcolor = 4 '"green" 'Changes made

        Case Is = NonPreferredAvg
            performancemessage = PreferredAvgname & " Equals " & NonPreferredAvgname
            cellcolor = 6 '"yellow" ''Changes made

        Case Is > NonPreferredAvg
            performancemessage = PreferredAvgname & " Is " & stravgdif & " Greater Than " & NonPreferredAvgname
            cellcolor = 5 '"blue" 'Changes made
        Case Else
            performancemessage = "Something Bad Happened"
    End Select
    If Outputtype = "color" Then
        Performance_Message = cellcolor
    Else
        Performance_Message = performancemessage
    End If
End Function

ワークシート

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim myColor As Double
  myColor = Target.Value ''Changes made
  Call SetPerformancecolor(Target, myColor)
End Sub

Private Sub SetPerformancecolor(Target As Range, myColor As Double)
  Target.Interior.ColorIndex = myColor ''Changes made
End Sub
于 2016-04-21T04:22:33.013 に答える
0

次の関数は、選択したセルの RGB 値を表示します。

Function CellColorValue(CellLocation As Range)
    Dim sColor As String

    Application.Volatile
    'Retrieve hex value into string sColor    
    sColor = Right("000000" & Hex(CellLocation.Interior.Color), 6)
    'Return the string Version e.g. 255,255,255 RGB color value found in 
    'Excel cell. Use in built worksheet function to convert Hex to Decimal
    'Use string function to separate Hex string into three parts
    CellColorValue = Application.WorksheetFunction.Hex2Dec(Right(sColor, 2)) & "," & application.WorksheetFunction.Hex2Dec(Mid(sColor, 3, 2)) & "," & Application.WorksheetFunction.Hex2Dec(Left(sColor, 2))
End Function
于 2014-10-24T02:13:21.317 に答える