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

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

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

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

我所尝试过的

我可以使用VBA中的Split函数很好地提取string,但会丢失string的格式。

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

是否有可能获得一个string的所有颜色?

例如:一个单元格可能包含以下string

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

我会使用.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 

您可以使用以下内容,然后创build一个字典/集合/数组来存储颜色,并只保留唯一的值或任何适合您的情况的解决scheme。 这只是显示你如何访问所有的颜色。

 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 

在Excel Hero的答案之后,我设法完成了满足我需要的这个代码,这个函数返回一个Collection中的颜色(也可以是一个数组)。

 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