2015-09-23 12 views
8

私はMySQLデータベースに取り込もうとしているExcelシートを持っています。セル内に複数の色のセルからフォントの色を抽出する

  • 私はVBAを使ってデータをテキストとしてファイルに書き出し、それをデータベースにアップロードしています。
  • ワークシートのセルには、色分けされた文字列があります。
  • 色は特定の意味を持っているので、値をデータベースに移動するときに色を保持したい(色を列挙するデータベースに特別な列がある)。

が事は反対側に、いくつかの細胞は、カンマで区切られた文字列を有しており、カンマの一方の側に文字列が黒であることである、それは、青色(またはその逆であり、よりコンマと文字列が存在することができます細胞)。

私は

を試してみましたが、どのような私は、VBAでSplit機能を使って、細かい文字列を抽出することができますが、それは、文字列の書式設定を失います。

Range("mycell").Font.ColorIndexを使用してセルの色を取得できますが、文字列に複数の色がある場合はNULLが返されます。

文字列のすべての色を取得できますか?

例:一つのセルは、以下の文字列

"W345、PO3244、12309"
1(W345)黒であろう(のColorIndex -4105)、
2(PO3244)を含むことができるだろう青色(colorindex 47)
3.(12309)は赤色(colorindex 3)です。

+2

よく書かれたQ(変更用)を参照してください。 – pnuts

+2

http://stackoverflow.com/questions/18509806/vba-split-cell-value-by-font-colour –

+0

ありがとうございましたkatz、私はそこに解決策を試してみます。私はその質問を自分で見つけられなかったと驚いた、私のGoogleのfooは通常これより良いです。他のstackexchangeサイト上の他の質問からも分かるように、fooに質問する質問は常に良いとは限りません。しかし、誰かが改善しようとします。 – ojs

答えて

1

私は、RGB値を処分するために.Font.Colorを使用したいが、あなたが好きなら、あなたはの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 
+0

@ojsあなたのために働く? –

+0

ありがとう、はい、それは正しい軌道に乗った。私は自分の適応ソリューションで自分の答えを提出します。 – ojs

1

次のコードを使用して、色を保存し、独自の値や状況に適したソリューションのみを保存する辞書/コレクション/配列を作成できます。これはちょうどあなたがすべての色にアクセスする方法を示しています。

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 
0

あなたはこの戦略を適応させることができます配列も):

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 
関連する問題