- 締切済み
詳細な文字カウントをするツール
行が指定した文字数を超えた場合ハイライトする。 パラグラフの文字数。 各行の文字数。 各句点までの文字数 句点や句読点間の平均文字数 こういうのがわかるツールってありますか?
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- toi_awase_01
- ベストアンサー率31% (133/429)
句点や句読点間の平均文字数以外は、フリーソフトのエディタで出来そうです。 サクラエディタやTeraPadなど無料テキストエディターで参照願います。
- imogasi
- ベストアンサー率27% (4737/17069)
#2です。第4番目の課題ですが(第5課題にも使えそう)。 その後多少考えて、Word VBAですが、プログラム的に泥臭く、1文字ずつ文字の判別を繰り返す方法ですが、やってみました。 半角の「、や。」は全角の「、や。」に事前に一括変換したのち(統一して)実行。 ーー 例文 ああ良い天気になりました。どこかに散歩に行こうかな、と思いました。 早速駅の方に、歩いていきました。 大きな池の中に、魚が泳いでいました。(注)↓で改行 大きなフナのようで、重さは数キロありそうです。 はやく、帰らないと、叱られると思い、その場を離れました。 もう一度、あの池に行って、あの鯉を見てみたい。 表 結果を出す表を20行、2列を用意しておく。 ーー コード 文章部分全体を範囲指定して実行のこと。 Public Sub Sample() '文字が、。か、かどうかを一文字ずつチェック Dim r As Word.Range Dim s As String 'Application.ScreenUpdating = False i = 1 '表の行 l = 0 '各文字数 s = "" ' ActiveDocument.Range(0, 0).Select ' Selection.WholeStory For Each r In Selection.Characters If r = vbCr Or r = Chr(11) Then GoTo p1 '改行と行内改行↓は処理しない If r = "、" Or r = "。" Then '句点、句読点なら ActiveDocument.Tables(1).Cell(i, 1).Range = s ’表に書き込み ActiveDocument.Tables(1).Cell(i, 2).Range = l s = "" i = i + 1 '次行 l = 0 Else s = s & r l = l + 1 '文字数+1 End If p1: Next ' Application.ScreenUpdating = True MsgBox "処理が終了しました。", vbInformation + vbSystemModal End Sub ーー 結果 表の中 ああ良い天気になりました 12 どこかに散歩に行こうかな 12 と思いました 6 早速駅の方に 6 歩いていきました 8 大きな池の中に 7 魚が泳いでいました 9 大きなフナのようで 9 重さは数キロありそうです 12 はやく 3 帰らないと 5 叱られると思い 7 その場を離れました 9 もう一度 4 あの池に行って 7 あの鯉を見てみたい 9 ーーー 諸所に改良の余地ありますが、基本だけです。
- imogasi
- ベストアンサー率27% (4737/17069)
こんなことを考えるのは、論文や作品の研究のためか。 小生はワードVBAの学習は徹底していないので、下記で言っていることは、後出回答で覆るかもしれない。1週間程度、ぴったりの回答が出ないか、様子を見てはどうかな。ただし可能性は少ないと思う。 ワードの操作でも、文字数を画面にだしたり、知らせる仕組みはあるが、行、パラグラフ、句点、読店は位置を変えて複数(多数)あり、それらの結果数を捉えるのは、一覧的な表を作らないと質問者の要望に応えられないのだろう。そのためには、ワードのVBAを駆使するほか方法はないのではないか。吸うが文字数を捉えることが出来れば、表の最下行に、合計と数で割った平均は出せるだろう。ちなみにワードの表で関数のAVERAGEが使える。 こんなことを、簡単に質問している風なのは、質問者がワードを頻繁に、使ったり、それで苦労した経験が少ないのだろう。 ワードのVBAは、1995年来、解説書が3-4本しか出ておらず、WEBの記事も、一部の事項しか載ってないので、学習に苦労するのだ。洋書の方が解説書はあるようだ。 もしエクセルVBAや他の言語の経験があり、理系の若い人ならVBAに挑戦する人もいるだろう。 ーー 例として第2の課題は 標準モジュールに Sub test06() '各パラグラフの文字数 OK For Each para In ActiveDocument.Paragraphs MsgBox para.Range.Characters.Count Next End Sub 上記は画面に数を出すだけだが、これをワードの表の上からの列にセットすることもむつかしくない。 「パラグラフ」は、日本のワードのユーザーは意識が少ないが、英語=ワードでは基礎的な概念(オブジェクト)に扱われている。 それに比べ日本人は、「ページ」や「行」をすぐ持ち出すが、Pages(2)、やLines(2)のように簡単にとらえさせてくれないようで、苦労する。wdLineなどはある(下記例)のに不思議に思う。 ーー 第3の課題は Sub test13() '各行の文字数カウント Dim i1 As Integer, i2 As Integer, Count As Integer ActiveDocument.Range(0, 0).Select Selection.Expand Unit:=wdLine MsgBox Selection.Characters.Count Do i1 = Selection.Information(wdFirstCharacterLineNumber) Selection.GoTo what:=wdGoToLine, which:=wdGoToNext, Count:=1, Name:="" Count = Count + 1 i2 = Selection.Information(wdFirstCharacterLineNumber) Selection.Expand Unit:=wdLine MsgBox Selection.Characters.Count Loop Until i1 = i2 ' MsgBox Count End Sub これらは改行文字も1文字に数えられたりする。こういう点などで、「質問者のニーズ」に 合うかどうか、の検討が必要な難しさもある。 ーー 第4、第5の課題の中に、句点や読点という言葉が出ているが、それらには複数の文字があり、原文で使い方も統一されているとは言い難いと思う。するとVBAでの処理が複雑になる。 句点を「。」、句読点を「、」に限定し、VBAのFindでメソッドで、次に出現する「、か。」の位置を探し、その文章範囲Rangeの文字数を数えるVBAコードを作れば、達成できるかもしれない。 ーー 第1の「行が指定した文字数を超えた場合」という、入力途中で書式表示を変えるのは イベント的な考えだが、ワード(VBA)で扱うのは、高等なスキルだと思う。 エクセルの条件付き書式のようなものを、自分で作らないといけないのかな、と思う。
- aokii
- ベストアンサー率23% (5210/22062)
エクセルではいかがでしょう?