• ベストアンサー

Excelで文字色別に文字数をカウントする方法は?

EXCELの表で、ある列に黒・青2色に分けて文字が入力されています。 列の中には一つのセルに黒・青の文字が混在している場合もあります。 知人が翻訳の仕事をやっていて、黒文字の分だけが報酬の対象になる関係で、色別に文字数をカウントする必要があります。 この作業をワークシート関数や何かのコマンドで実行する方法があるでしょうか。 もしなければVBAで、ということになるかと思いますが、何分マクロが不得手なので、なかなか構文を考えつきません。どなたか教えて頂ければ助かります。よろしくお願いします。 なお、EXCELで難しければWORDの表に変換しても構いません。(行数は数千行あります。)

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

  • ベストアンサー
  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.2

一つ一つのセル内に色が混在するのですね?それなら文字を一個ずつみていかねば。 それから、黒とはわざわざ黒を着色したのではなく「自動」でなっている黒でいいですね? ある列がA列なら、B列に総文字数、C列に「自動」色の文字数、D列に青色の文字数を出します。 Sub test01() Dim x As Long, i As Long Dim n As Integer, black As Integer, blue As Integer Dim c As Object With ActiveSheet x = .Cells(Rows.Count, "A").End(xlUp).Row For i = 1 To x If Trim(.Cells(i, "A")) <> "" Then .Cells(i, "B") = Len(.Cells(i, "A")) For n = 1 To Len(.Cells(i, "A")) Set c = .Cells(i, "A").Characters(Start:=n, Length:=1) If c.Font.ColorIndex = xlAutomatic Then black = black + 1 If c.Font.ColorIndex = 5 Then blue = blue + 1 Set c = Nothing Next n .Cells(i, "C") = black .Cells(i, "D") = blue black = 0 blue = 0 End If Next i .Range(.Cells(x + 1, "B"), .Cells(x + 1, "D")).FormulaR1C1 = "=SUM(R[-" & x & "]C:R[-1]C)" End With End Sub

doubt34
質問者

お礼

ありがとうございました。 おかげさまで何とか出来ました。 ただ、その後マクロによらない別の方法があることも分かりましたので、今後状況によって使い分けたいと思っています。 参考までにその方法を記しますと、まずEXCELの該当列を複製してWORDにペーストし、全選択→編集→検索→置換→オプション→書式→フォント→OKとし、文字色を選択の上、全置換で色付き文字を削除します。その上で表をEXCELの複製列に戻し、それぞれの文字数をLEN関数で計算するやり方です。 EXCELだけでもこのような操作はできますが、一つのセルに混在している場合、何故か選択した文字色以外の(自動の)文字も削除されてしまいます。(WORDだとうまく行きます。) ともあれマクロの勉強になり、大変有益でした。厚くお礼申し上げます。

その他の回答 (3)

  • okormazd
  • ベストアンサー率50% (1224/2412)
回答No.4

#3です。 あっ! 試したのを直してないところがありましたので、訂正。 For i = 1 To l - 10 は For i = 1 To l です。

doubt34
質問者

お礼

ありがとうございました。 おかげさまで何とか出来ました。 ただ、その後マクロによらない別の方法があることも分かりましたので、今後状況によって使い分けたいと思っています。 その方法は#2の形へのお礼に記していますので、参考まで。 ともあれ不得手なマクロの勉強になり、ためになりました。 お礼申し上げます。

  • okormazd
  • ベストアンサー率50% (1224/2412)
回答No.3

色文字数を数える Sub test() Dim wb As Object, sh1 As Object Dim myrange As Range Set wb = Workbooks(ThisWorkbook.Name) Set sh1 = wb.Sheets(1) cl = 5 '明示的に指定したものだけ 1黒、2白、3赤、4緑、5青、6黄、7紫、8水色、等。自動はxlAutomatic。現在のカラー パレットによって変わるかも。 '自動が黒なら1ではとれない。xlAutomaticとして黒または自動にするか。 Select Case cl Case 1 jcl = "黒" Case 2 jcl = "白" Case 3 jcl = "赤" Case 4 jcl = "緑" Case 5 jcl = "青" Case 6 jcl = "黄" Case 7 jcl = "紫" Case 8 jcl = "水" Case xlAutomatic jcl = "黒または自動" Case Else jcl = "その他" End Select With sh1 Set myrange = .Range(.Cells(1, 1), .Cells(100, 20)) '検索範囲を指定します。 strn = 0 For Each c In myrange l = Len(c) For i = 1 To l - 10 If c.Characters(i, 1).Font.ColorIndex = cl Then strn = strn + 1 End If Next Next MsgBox jcl & "色文字数は" & strn & "です。" End With Set wb = Nothing Set sh1 = Nothing End Sub

回答No.1

参考になりそうなページがありましたのでご紹介します。 文章での説明は少々難しいので、参考URLをご覧ください^^;

参考URL:
http://blog.oni100.jp/?eid=305066
doubt34
質問者

お礼

私の質問は文字色、しかも同一セル混在なので、参考URLの内容とは若干違いますが、何かのときに参考になるかも知れません。 ありがとうございました。

関連するQ&A

  • Word, Excel での文字数カウントについて

    受注翻訳の仕事をやっております。 Word, Excel での文字数カウントについて、 Word では、文字数カウントの機能があります。 Excel では、文字数カウントの機能が無いようです。 Excel で作った表をコピペでWord に移したら、 Excel で作った表の中の文字数がカウントされますか?

  • エクセル、行数をカウントしたい。

    エクセル初心者です。 よろしくお願いいたします。 エクセルでこのような表を作っています。   A  B  C 1 10 15 2 20 3    10 4    15 5 10 6 10 10 7 8 この時、データの入っている行数をカウントしたいのです。 上の例では 「6」 です。 途中に空白の行はありません。 A列、B列にはどちらにも数字が入る場合と、どちらかにしか 入らない場合があります。 なので COUNT は使えないですよね? 今まではデータを入力後、下の空白の行を削除し、C列で COUNTBLANK として求めていたのですが、表の長さ(行数)が一定でないため、 体裁が悪くなってしまっていました。 希望としては。 最終行のC列に「終了」などと入れると、その文字列を判別 してくれて、それより上の行数をカウントしてくれる。 または 例えば OR を使って、A列B列どちらかにデータがある 場合のみ、カウントしてくれる。 こんなワガママなことができたら、と思っております。 補足が必要ならばいたします。 それと、遅くなるかもしれませんが、お礼は必ずさせていただきます。

  • エクセル(VBA) 検索条件に文字色を含める

    エクセルについて質問です。 エクセルのバージョンは2007を使用しています。 基本的にはCOUNTIFS関数やSUMPRODUCT関数の考え方で複数条件を満たすセルの個数を数えたいのですが その検索条件のうちのいくつか(正確には3つの列)において、特定文字が何色かを見たいのです。 具体的には下の添付ファイルの備考A~備考Cの列のように、その3つの列のセルの中にそれぞれ黒文字(自動)、黒文字(自動)太字、赤文字、青文字が混在しており、その文字列の羅列の規則性としては 1.セル内の文字列は必ず、上で挙げた4種のフォントスタイルのうちのいずれかの # で始まる。 2.#A #B #C (#D) のように、セル内の文字列は一連の小文字列が半角スペースで区切られているとともにその一連の小文字列の最初の文字は必ず # もしくは (# であり、またその一連の小文字列は同一色同一の太さである。 3.(#A) のような、() で囲んだ一連の小文字列は黒文字(自動)スタイルだけであり、また1.でも述べたようにセル中の文字列の最初に来ることはない。 となっております。 そこでそれぞれの列について、黒文字(自動)もしくは黒文字(自動)太字もしくは青文字の # で始まるセルを検索し(つまり赤文字の # で始まるセルと何も記述のない空白のセルを除く)、 その3列を and もしくは or 条件で組み合わせ、更に1、2個条件を加えて該当する行の数をCOUNTIFS関数やSUMPRODUCT関数のように数え、返したいと思っております。 恐らくVBAを利用することとなると思います。まだまだVBAを自分で一から構築することは難しいのですが、ある程度VBAを読み解き理解していくことは可能なレベルですので、どうか大まかな構文の枠組みだけでもご教授いただけると幸いです。 よろしくお願いいたします。

  • エクセルで文字の数をカウントしたいのですが、

    エクセルで文字の数をカウントしたいのですが、 うまくできません。 データを文字列で 112 134 234 235 567 とあり、「1」の数を数えたいです。 関数で =COUNTIF(B1:B5,"*1*") とやると結果は 2 になってしまいます。(本当は3と出てほしい) データ、区切り位置でやる方法も見つけましたが、 この方法で結果を出すことはできないでしょうか? よろしくお願いします。

  • Excel2007の文字数カウント(半角0.5)

    Excel(エクセル)2007で、 ある1列のすべてのセル内の文字を「半角文字⇒0.5文字」、「全角文字⇒1文字」とカウントした場合の文字数表示をしたいのですが、方法がわかりません。 ----------------------------- たとえば、↓のように表示されるようにしたいです。 【A列 (文字)】     A1:いぬ A2:犬 A3:イヌ A4:dog ↓↓↓ 【B列 (文字数)】 B1:2 B2:1 B3:1 B4:1.5 ※「A3:イヌ」の"イヌ"は全角カタカナではなく半角カタカナなので、1(0.5×2)文字となります。 【補足】 ※極力、マクロとVBAを使わない方法を知りたいです。 ※マクロやVBAを使わなければ上記の条件を満たすカウントと文字数表示ができない場合、その方法やVBAソースが知りたいです。できれば、コマンドボタンを押すと文字数を表示する仕様にしたいです。 ※上記の【A列 (文字)】 の文字はあくまで例です。実際は、どんな文字や数字にも対応できる応用の利く仕様にしたいです。 ※上記の【A列 (文字)】が4行というのもあくまで例です。実際には、何行にでも対応できる仕様にしたいです(具体的には、時間はかかると思いますが10000行くらいまで対応できるのが理想です)。 ここまでの条件を満たす「文字数カウント」の方法、 もし分かる方がいましたらどうかよろしくおねがいします。

  • エクセルで文字色がついているセル数をカウント

    エクセル初心者です。 エクセルセルに 佐藤 鈴木 青山 渡辺 と入力されてあって佐藤と鈴木の文字の色が青だった場合文字色(青)がついているセルをカウントし,あるセルに2と表示することはできるのでしょうか。条件付書式や検索と思いましたがわかりません。よろしくお願いします。

  • 文字カウントで教えてください

    文字カウントについて教えてください。 あるテキストファイルがあります。 「あ」の文字は、何個 「い」の単語は、何個 というように、異なる文字ごとにカウントするようなことはできますでしょうか? できれば、エクセルで、表の形で出力したいです。

  • excelピボットテーブルで作成してる表から、ある数をカウントする方法

    excelピボットテーブルで作成してる表から、ある数をカウントする方法 投稿が既にあるものかもしれませんが、見つけ出すことができないため、教えてください。 まずexcelにピボットテーブルで作成している表があります。 商品名が「カナ」であいうえお順の一覧になってます。 あかさたな…別に何件あるのか数を調べる方法はありますか? カナには、商品名「ああい」「あいう」… といったように一番頭にある頭文字から件数をカウントしたいです。 ・あから行 ・たわ行 ・まさな行 のように混在した形での件数カウントです。 ぜひ教えてください!! よろしくお願いします

  • エクセルでセル内の文字をカウントしたい

    エクセルでセル内の文字をカウントしたいです。 例えば A| B| 1|1,2| 2|1,3| 3|2,3| 4|2 | 5|3 | というエクセルでB列の1の数、2の数、3の数をカウントしたいです。 B列の中には数字と数字の間は,が入っています。 困っています!よろしくお願いします!

  • 斜体文字のみのカウント方法を教えてください。

    ExcelのVBAで斜体文字のみカウントすることはできますか? 例えば、下記のような文章で、A列に「田中」という文字列が斜体になっている場合 「田中」の文字列の合計をC列で取得したい。   A1          B1     C1(合計)  田中(斜体)     田中     1 使用OS:Windows 8 使用ソフト:Microsoft Excel 2010 ご存知の方がおられましたらご回答をよろしくお願いします。

専門家に質問してみよう