从单元格中具有多种颜色的单元格中提取字体颜色



我有一个Excel表,我正试图进入MySQL数据库。

  • 我使用VBA将数据作为文本写入文件,然后将其上传到数据库。
  • 在工作表的单元格中有颜色编码的字符串。
  • 颜色有一定的含义,所以我想保留他们,当我移动到数据库中的值(我有一个特殊的列在数据库中,我枚举的颜色)。

问题是,一些单元格有逗号分隔的字符串,逗号的一边是黑色的,另一边是蓝色的(反之亦然,单元格中可以有更多的逗号和字符串)。

what I have try

我可以通过使用VBA中的Split函数来提取字符串,但这会失去字符串的格式。

我可以使用Range("mycell").Font.ColorIndex获得单元格的颜色,但如果字符串中有多个颜色,则返回NULL

有可能得到字符串的所有颜色吗?

示例:一个单元格可以包含以下字符串

"W345, PO3244, 12309"
1. (W345)将是黑色(colorindex -4105),
2. (PO3244)将是蓝色(colorindex 47)
3.(12309)将是红色(colorindex 3)。

您可以使用以下代码,然后创建一个字典/集合/数组来存储颜色,并且只保留唯一值或任何适合您情况的解决方案。这只是展示了如何访问所有的颜色。

Sub AllColors()
Dim r As Range
Dim x As Integer
Set r = Selection
For x = 1 To Len(r.Value)
    Debug.Print r.Characters(x, 1).Font.ColorIndex
Next x

End Sub

我会使用.Font.Color来剔除RGB值,但如果您喜欢,您可以将其更改为ColorIndex。

你可以采用这个策略:

Sub CellColors2CSV()
    Dim j&, k&, c$, r As Range
    Set r = ActiveSheet.Cells(1, 1)
    Do
        j = Len(r)
        k = InStr(k + 1, r, ",")
        If k Then j = k - 1
        c = c & "," & r.Characters(j, 1).Font.Color
    Loop Until k = 0
    c = Mid$(c, 2)
    MsgBox c
End Sub

在Excel Hero的答案之后,我设法编造了这段代码,满足了我的需求,这是一个返回集合中颜色的函数(也可以是一个数组):

Function GetColors(i, j) As Collection
Dim l&, k&, r As Range
Dim c As Collection
Set c = New Collection
Set r = ActiveSheet.Cells(i, j)
Do
    l = Len(r)
    If Not InStr(r, ",") Then
        k = InStr(k + 1, r, ",")
    ElseIf Not InStr(r, " / ") Then
        k = InStr(k + 1, r, " / ")
    End If
    If k Then l = k - 1
    c.Add r.Characters(l, 1).Font.ColorIndex
Loop Until k = 0
Set GetColors = c
End Function

最新更新