塵芥回顧録

掃き溜めのようなブログ(?)

頻度分析マクロ2

以前作成した頻度分析できるマクロの分析結果や分析する文章の位置を変更しやすくしてみた。

以前作成した頻度分析マクロ↓
nurupon.hatenablog.com


使い方は頻度分析マクロに書いてあるので省略します。

Sub FREQUENCY_ANALYZE
	Dim ANALYZE_CELL As String
	Dim FREQUENCY_MAX As Integer
	Dim RESULT_TABLE As String
	ANALYZE_CELL = "B1" '解析するセルの番号
	RESULT_TABLE = "C4" '解析結果の表の原点位置(左上)
	FREQUENCY_MAX = 127 '周期最大値

	Dim oSheet As Object
	oSheet = ThisComponent.CurrentController.ActiveSheet 'Cellの操作に必要
	oRangeAddrConv = ThisComponent.createInstance("com.sun.star.table.CellRangeAddressConversion") '表範囲の指定に必要

	Dim org_r, org_c, v_cycle, i, j, JUDGE, FREQUENCY_COUNT As Integer
	FREQUENCY_COUNT = 1
	org_r = osheet.getCellRangeByName(RESULT_TABLE).CellAddress.Row '表原点位置(左上)
	org_c = osheet.getCellRangeByName(RESULT_TABLE).CellAddress.Column	
	oCellRange = ThisComponent.Sheets.getCellRangeByPosition(org_c, org_r, org_c + 26, org_r + FREQUENCY_MAX, 0) '表範囲
	oRangeAddrConv.Address = oCellRange.RangeAddress
	
	v_cycle = CInt(InputBox("周期入力 1 <= n <= " & FREQUENCY_MAX,"InputBox",4)) '入力処理とキャスト
	If v_cycle < 1 Then Exit Sub '0以下の場合マクロを停止
	If v_cycle > FREQUENCY_MAX Then Exit Sub '周期最大値を超えた場合マクロを停止
	
 	oSheet.getCellRangeByName(oRangeAddrConv.UserInterfaceRepresentation).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(ANALYZE_CELL).string)
		JUDGE = Asc(UCase(MID(osheet.getCellRangeByName(ANALYZE_CELL).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
OOo CalcのBasicマクロで,セルの行・列番号を変換して,"A1"等のセル番地・アドレス表現文字列を取得する方法 - モバイル通信とIT技術をコツコツ勉強するブログ