頻度分析マクロ
頻度分析できるマクロを作ってみた。
使い方
B1に頻度分析する文章を入力し、C4:AC131の範囲は何も記入しないでください。
C4:AC131にB1の文章を頻度分析した結果が入力されます。
文章記入位置と頻度分析結果表示位置の変更方法
org_r,org_cの数値と"C4:AC131"を変更すると頻度分析結果の表示位置が変わり、
2箇所ある"B1"を2箇所とも変更すると頻度分析する文章を入力する位置が変わります。
表示分析結果の位置を変更する場合
org_rとorg_cは頻度分析結果の表の一番左上を示していて、
デフォルトだとorg_rが4、org_cがCを示しています。
Rangeはorg_cの列を含む英語の文字種類26+1の27列分と、
org_rの行を含む現在周期の最大値として設定している値127+1の128行分を選択するよう変更してください。
周期の最大値は表を削除するときに使用するRangeの行の範囲と、
InputBox後のExit Subとなる条件を変更する事でIntegerの最大値まで増やすことができます。
Sub FREQUENCY_ANALYZE Dim oSheet as Object 'Cellの操作に必要 oSheet = ThisComponent.CurrentController.ActiveSheet Dim org_r, org_c, v_cycle, i, j, FREQUENCY_COUNT, JUDGE As Integer FREQUENCY_COUNT = 1 org_r = 3: org_c = 2 '表原点位置(左上) v_cycle = CInt(InputBox("周期入力 1 <= n <= " & 127,"InputBox",4)) '入力処理とキャスト If v_cycle < 1 Then Exit Sub '0以下の場合マクロを停止 If v_cycle > 127 Then Exit Sub '128以上の場合マクロを停止 oSheet.getCellRangeByName("C4:AC131").clearContents(511) '表のリセット Dim v_frequency(1 To v_cycle, 0 To 25) As Integer For i = 1 To v_cycle oSheet.getCellByPosition(org_c, org_r + i).value = i Next i For i = 0 To 25 oSheet.getCellByPosition(org_c + i + 1, org_r).string = Chr(65 + i) '65=A Next i For i = 1 To LEN(osheet.getCellRangeByName("B1").string) JUDGE = Asc(UCase(MID(osheet.getCellRangeByName("B1").string,i,1))) If 64 < JUDGE And JUDGE < 91 Then '大文字 JUDGE = JUDGE - 65 'A=65 v_frequency(FREQUENCY_COUNT, JUDGE) = v_frequency(FREQUENCY_COUNT, JUDGE) + 1 FREQUENCY_COUNT = FREQUENCY_COUNT Mod v_cycle + 1 End If Next i For i = 1 To v_cycle For j = 0 To 25 oSheet.getCellByPosition(org_c + j + 1, org_r + i).value = v_frequency(i, j) Next j Next i End Sub
参考記事(LibreOfficeでのセルの操作方法)
LibreOfficeマクロ:セルの操作いろいろ試す(Range,Cells)
【LibreOfficeマクロ】セルの値クリアと全クリア | 新人・若手SEスキルアップNavi