- ベストアンサー
カンマ区切りの文字列単位で色を付けたい
- VBAでGetWindowText関数の引数a,b,cに色を付ける方法について教えてください。
- 現在、GetWindowText関数のa,b,cの部分を手作業で色付けしていますが、VBAを使用して自動化したいです。
- 具体的には、該当セル(A1)の文字列をカンマ区切りで切り分けて、各部分に対して指定の色を付けて再度A1セルに表示したいです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>【EndDialog(hWnd,0);】という内容が、【A2セル】に記述しています。 Sub macro1r1() Dim target As Range Dim a, s, e, t Set target = Range("A2") 'てきとーに応用してください s = InStr(target.Text, "(") + 1 e = InStr(target.Text, ")") - 1 t = Mid(target.Text, s, e - s + 1) a = Split(t, ",") On Error Resume Next target.Characters(Start:=s, Length:=Len(a(0))).Font.ColorIndex = 5 target.Characters(Start:=s + Len(a(0)) + 1, Length:=Len(a(1))).Font.ColorIndex = 3 target.Characters(Start:=s + Len(a(0) & a(1)) + 2, Length:=Len(a(2))).Font.ColorIndex = 24 End Sub
その他の回答 (1)
- keithin
- ベストアンサー率66% (5278/7941)
関数の引数に書式を施す方法はありません。 ご相談の事は不可能です。 #参考? 言わずもがなですが、関数としてじゃなく「関数式の格好をした文字列」をセルに記入し、その一部の文字に書式を施すことは、それは可能です。 当然関数じゃなくタダの文字列ですから、計算とかはしてくれませんが。 あるいはご相談では「関数」と言ってますが実際には関数っぽく見えるだけの、「GetWindowText(a,b,c)」と書かれた単に文字列を処理したいというお話なら。 もしホントにそういう事でよいなら、もちろんふつーに「何文字目から何文字目に色を塗る」の操作を新しいマクロの記録でマクロに録って、だいたいそのまま使えるマクロは手に入ります。 sub macro1() dim target as range dim a, s,e, t set target = range("A1") ’てきとーに応用してください s = instr(target.text, "(") + 1 e = instr(target.text, ")") - 1 t = mid(target.text, s, e - s + 1) a = split(t, ",") target.characters(start:=s, length:=len(a(0))).font.colorindex = 5 target.characters(start:=s + len(a(0)) +1, length:=len(a(1))).font.colorindex = 3 target.characters(start:=s + len(a(0)&a(1))+2, length:=len(a(2))).font.colorindex = 24 end sub
補足
情報ありがとうございます。 >「GetWindowText(a,b,c)」と書かれた単に文字列を処理したいというお話なら 仰られる通り、「関数式の格好をした文字列」に処理を施したいのです。 ただ、 >「何文字目から何文字目に色を塗る」 これでは、やりたいことが満たせないのです。理由としては、 他に、 【EndDialog(hWnd,0);】という内容が、【A2セル】に記述しています。 よって、 A1セル:【GetWindowText(a,b,c)】と A2セル:【EndDialog(hWnd,0);】では、 【引数の数も異なる】【文字位置も異なるため】 教えて頂いた方法、「何文字目から何文字目に色を塗る」では対応ができないのです。 よって、【,】区切りで、引数文字に色を付けることができればと考えたのです。
お礼
keithinさん、ありがとうございます。 目的を満たすことができました。 結構複雑ですね。 ちょっといろいろカスタマイズさせていただきたいと思います。 ありがとうございました。