• ベストアンサー

文字を色の付いた記号へまとめて変換したい

エクセル(エクセル2003)の超初心者です。 文字を色の付いた記号にまとめて変換することは出来るのでしょうか? 例えば、ABCDABCD…と続く文字列の、Aを赤い●、Bを青い●、Cを緑の●、Dを黄の●、という具合です。 変換したい種類は4つの文字を4つの色にしたいだけですが、文字列数が膨大なのでとても一つ一つ手で変換は出来ません。 出来るのであれば、その方法を教えてください。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

エクセルで「できますか」に対し (1)手操作(エクセル本来の予想守備範囲) (2)エクセル関数 (3)ウイザード。(1)の範疇といえますが、特別にエクセルに 備わっている。MS社がつくったもの。 (4)アドイン。専門の目的のための追加するプログラムの機能。 MS社以外の人も造る。 (5)VBA (6)それ以上のプログラム技能でシステムをいじくる などあります。 問題ななのは(2)に対する過剰期待です。(2)でできるかできないかは、セルの「値」だけに関することかどうです。 本質問は、(フォント)文字色を問題にしているので、関数ではできません。 少しできる範囲が広がるのはVBAで、これならできます。 ーーーーーー 下記にVBAでの例を挙げます。繰り返しにおいて、コーディング行を少なく抑えるために細工してますが。 文字色設定でとめています。●に変換は容易です。 Sub test01() d = Range("A65536").End(xlUp).Row x = Array("", "A", "B", "C", "D") y = Array(0, 3, 5, 7, 6) For i = 1 To d For j = 1 To 4 st = 1 Do p = InStr(st, Cells(i, "A"), x(j)) If p <> 0 Then Cells(i, "A").Characters(p, 1).Font.ColorIndex = y(j) st = p + 1 End If Loop While p <> 0 Next j Next i End Sub 上記を自分に合わせて、改造できる力があれば、使えると思います。 例 A1:A4に ACVFGB SDFAHJKB DFXCMNBAA SDAAHJTY 質問では1セル1文字なのかわからなかった。 カラーインデックスは質問どおり設定してません。 A赤、B青、Cピンク、D黄色です。 道具立ては、INSTR関数と、Charactersプロパティです。 ArrayのX,Yは両者で順序を対応させています。いくらでも文字を増やせます(色種の限度はあるが)。

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

#2です。A,B,C,Dの文字を●に変えてしまうなら #2のコードで、IF文の中を If p <> 0 Then Cells(i, "A") = Mid(Cells(i, "A"), 1, p - 1) & "●" & _ Right(Cells(i, "A"), Len(Cells(i, "A")) - p) Cells(i, "A").Characters(p, 1).Font.ColorIndex = y(j) st = p + 1 End If と1行追加してください。 (先ほどは、用があって、テストする時間がなくて2回答に別れてしまってすみません。)

osteo
質問者

お礼

私のような初心者の言葉の足らない質問に丁寧に答えてくださってありがとうございます。 コードの内容を理解できるにはまだ道が遠いのですが、それでも分からなかったことに道が開けました。 これから理解を深めたいと思います。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

Public Sub conv() '選択した範囲のセルの文字を置き換える 'Aを赤い●、Bを青い●、Cを緑の●、Dを黄の● Dim r As Range Dim i, wk As String, rep As String For Each r In Selection wk = r.Characters.Text rep = wk rep = Replace(rep, "A", "●") rep = Replace(rep, "B", "●") rep = Replace(rep, "C", "●") rep = Replace(rep, "D", "●") r.Characters.Text = rep For i = 1 To Len(wk) Select Case Mid(wk, i, 1) Case "A" r.Characters(i, 1).Font.Color = vbRed Case "B" r.Characters(i, 1).Font.Color = vbBlue Case "C" r.Characters(i, 1).Font.Color = vbGreen Case "D" r.Characters(i, 1).Font.Color = vbYellow Case Else r.Characters(i, 1).Font.Color = vbBlack End Select Next Next End Sub

osteo
質問者

お礼

いったいどうやってエクセルを使えばよいのかさえ分かっていないほどの初心者ですが、コピーペーストして色々いじってみたところ(偶然)変換されました。ここから、理屈を勉強していきたいと思っています。 それでも素晴らしい前進です。ありがとうございました。

関連するQ&A

専門家に質問してみよう