QSORT

タグ: ,

配列の中身をソートします。キー配列と連動させる配列は次元の違う同じ配列名を指定することできます。

構文
  1. void = QSORT( var キー配列, [順列, var 配列, var 配列, ...] )
引数
キー配列
ソートされる配列変数名
順列
QSRT_A(0)
昇順 (デフォルト)
QSRT_D(1)
降順
QSRT_UNICODEA(2)
UNICODE文字比較 昇順
QSRT_UNICODED(3)
UNICODE文字比較 降順
QSRT_NATURALA(4)
自然順ソート 昇順
QSRT_NATURALD(5)
自然順ソート 降順
配列
配列変数名、キー配列のソートと連動
戻り値

順列

DIM array[] = “あ”, “ん”, “ア”, “ン”, “ア”, “ン”, “A”, “Z”, “A”, “Z”, “a”, “z”, “a”, “z”, “0”, “9”, “0”, “9”, “亜”
DIM sorts[] = QSRT_A, QSRT_D, QSRT_UNICODEA, QSRT_UNICODED, QSRT_NATURALA, QSRT_NATURALD

FOR sort IN sorts
	QSORT(array, sort)
	DIM str = “”
	FOR item IN array
		str = str + item + “ ”
	NEXT
	PRINT str
NEXT
結果
0 9 A Z a z あ ん ア ン 亜 0 9 A Z a z ア ン 
ン ア z a Z A 9 0 亜 ン ア ん あ z a Z A 9 0 
0 0 9 9 a a A A z z Z Z ア ア あ ン ン ん 亜 
亜 ん ン ン あ ア ア Z Z z z A A a a 9 9 0 0 
0 0 9 9 A a A a z Z Z z ア ア あ ン ン ん 亜 
亜 ん ン ン あ ア ア Z z z Z A a A a 9 9 0 0 

昇順(QSRT_A)

値が小さい順に並べます。

0 9 A Z a z あ ん ア ン 亜 0 9 A Z a z ア ン

  1. 半角数字
  2. 半角英字(大文字)
  3. 半角英字(小文字)
  4. ひらがな
  5. カタカナ
  6. 漢字
  7. 全角数字
  8. 全角英字(大文字)
  9. 全角英字(小文字)
  10. 半角カタカナ

降順(QSRT_D)

値が大きい順に並べます。

ン ア z a Z A 9 0 亜 ン ア ん あ z a Z A 9 0

  1. 半角カタカナ
  2. 全角英字(小文字)
  3. 全角英字(大文字)
  4. 全角数字
  5. 漢字
  6. カタカナ
  7. ひらがな
  8. 半角英字(小文字)
  9. 半角英字(大文字)
  10. 半角数字

Unicode昇順(QSRT_UNICODEA)

Unicodeの文字コード昇順で並べます。

0 0 9 9 a a A A z z Z Z ア ア あ ン ン ん 亜

数値ではなく数字(文字)として先頭から1文字ずつ比較され並び替えが行われるので、1,2,3,4,5,10,11,12の場合、1,10,11,12,2,3,4,5という並びになってしまいます。

数字を小さい順に並べるには、桁数に合わせてゼロ埋め(2桁の場合は01、3桁の場合は001のように)するか、自然順でソートします。

DIM array[] = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12

QSORT(array, QSRT_UNICODEA)

FOR item IN array
	PRINT item
NEXT
結果
0
1
10
11
12
2
3
4
5
6
7
8
9

Unicode降順(QSRT_UNICODED)

Unicodeの文字コード降順で並べます。

亜 ん ン ン あ ア ア Z Z z z A A a a 9 9 0 0

自然順昇順(QSRT_NATURALA)

アルファベット順を基本とし、複数桁の数字を単一文字として昇順で並べます。

0 0 9 9 A a A a z Z Z z ア ア あ ン ン ん 亜

  1. 数字(半角→全角)
  2. 英字(半角→全角)
  3. ひらがな・カタカナ
  4. 漢字

自然順でないソートする場合、先頭から1文字ずつ大きさを比較し並び替え、1文字目が同じ場合2文字目の大きさを比較し並び替えるという手順でソートされます。

6 12 34 15 1 27 17

1文字目を比較し、小さい順に並び替える

12 15 1 17 27 34 6

2文字目を比較し、小さい順に並び替える。

1 12 15 17 27 34 6

このような手順のため数字は値の小さい順になりません。

一方自然順でソートする場合、12は1文字目が1だからとかではなく12と数字の塊で比較するので自然な並び方になります。

DIM array[] = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12

QSORT(array, QSRT_NATURALA)

FOR item IN array
	PRINT item
NEXT
結果
0
1
2
3
4
5
6
7
8
9
10
11
12

自然順降順(QSRT_NATURALD)

アルファベット順を基本とし、複数桁の数字を単一文字として降順で並べます。

亜 ん ン ン あ ア ア Z z z Z A a A a 9 9 0 0

昇順

DIM array[] = 19, 5, 68, 13, 6, 99, 70, 64, 39, 30 

QSORT(array, QSRT_A)

DIM str = “”
FOR item IN array
	str = str + item + “, ”
NEXT
結果
5, 6, 13, 19, 30, 39, 64, 68, 70, 99,

降順

DIM array[] = 19, 5, 68, 13, 6, 99, 70, 64, 39, 30 

QSORT(array, QSRT_D)

DIM str = “”
FOR item IN array
	str = str + item + “, ”
NEXT

PRINT str
結果
99, 70, 68, 64, 39, 30, 19, 13, 6, 5,

Unicode昇順

DIM array[] = 19, 5, 68, 13, 6, 99, 70, 64, 39, 30 

QSORT(array, QSRT_UNICODEA)

DIM str = “”
FOR item IN array
	str = str + item + “, ”
NEXT

PRINT str
結果
13, 19, 30, 39, 5, 6, 64, 68, 70, 99,

Unicode降順

DIM array[] = 19, 5, 68, 13, 6, 99, 70, 64, 39, 30 

QSORT(array, QSRT_UNICODED)

DIM str = “”
FOR item IN array
	str = str + item + “, ”
NEXT

PRINT str
結果
99, 70, 68, 64, 6, 5, 39, 30, 19, 13,

プログラム実行例

都道府県別の人口・面積を人口降順で連動してソート

population配列(人口)を降順(大きい順)に、pref配列(都道府県)とarea配列(面積)の関係性を保ったまま並び替える。

データは【都道府県】人口ランキング・面積ランキング・人口密度ランキングを参照。
DIM pref[] = "北海道", "青森県", "岩手県", "宮城県", "秋田県", "山形県", "福島県", "茨城県", "栃木県", "群馬県", "埼玉県", "千葉県", "東京都", "神奈川県", "新潟県", "富山県", "石川県", "福井県", "山梨県", "長野県", "岐阜県", "静岡県", "愛知県", "三重県", "滋賀県", "京都府", "大阪府", "兵庫県", "奈良県", "和歌山県", "鳥取県", "島根県", "岡山県", "広島県", "山口県", "徳島県", "香川県", "愛媛県", "高知県", "福岡県", "佐賀県", "長崎県", "熊本県", "大分県", "宮崎県", "鹿児島県", "沖縄県"
DIM population[] = "5228885", "1238730", "1211206", "2303487", "960113", "1068696", "1834198", "2868554", "1934016", "1940333", "7346836", "6287034", "14064696", "9240411", "2202358", "1035612", "1133294", "767433", "810427", "2049683", "1979781", "3635220", "7546192", "1771440", "1414248", "2579921", "8842523", "5469184", "1325437", "923033", "553847", "671602", "1889607", "2801388", "1342987", "719704", "951049", "1335694", "692065", "5138891", "812013", "1313103", "1739211", "1124597", "1070213", "1589206", "1468410"
DIM area[] = "78421.39", "9645.64", "15275.01", "7282.29", "11637.52", "9323.15", "13784.14", "6097.39", "6408.09", "6362.28", "3797.75", "5157.57", "2194.03", "2416.11", "12583.96", "4247.58", "4186.21", "4190.52", "4465.27", "13561.56", "10621.29", "7777.35", "5173.07", "5774.49", "4017.38", "4612.20", "1905.32", "8401.02", "3690.94", "4724.65", "3507.14", "6707.89", "7114.33", "8479.65", "6112.54", "4146.75", "1876.78", "5676.19", "7103.63", "4986.51", "2440.69", "4130.98", "7409.46", "6340.76", "7735.22", "9187.06", "2282.59"

QSORT(population, QSRT_NATURALD, pref, area)

PRINT "都道府県,人口,面積"

FOR i = 0 TO UBound(pref)
	PRINT pref[i] + "," + population[i] + "," + area[i]
NEXT
  1. QSORT
結果
都道府県,人口,面積
東京都,14064696,2194.03
神奈川県,9240411,2416.11
大阪府,8842523,1905.32
愛知県,7546192,5173.07
埼玉県,7346836,3797.75
千葉県,6287034,5157.57
兵庫県,5469184,8401.02
北海道,5228885,78421.39
福岡県,5138891,4986.51
静岡県,3635220,7777.35
茨城県,2868554,6097.39
広島県,2801388,8479.65
京都府,2579921,4612.20
宮城県,2303487,7282.29
新潟県,2202358,12583.96
長野県,2049683,13561.56
岐阜県,1979781,10621.29
群馬県,1940333,6362.28
栃木県,1934016,6408.09
岡山県,1889607,7114.33
福島県,1834198,13784.14
三重県,1771440,5774.49
熊本県,1739211,7409.46
鹿児島県,1589206,9187.06
沖縄県,1468410,2282.59
滋賀県,1414248,4017.38
山口県,1342987,6112.54
愛媛県,1335694,5676.19
奈良県,1325437,3690.94
長崎県,1313103,4130.98
青森県,1238730,9645.64
岩手県,1211206,15275.01
石川県,1133294,4186.21
大分県,1124597,6340.76
宮崎県,1070213,7735.22
山形県,1068696,9323.15
富山県,1035612,4247.58
秋田県,960113,11637.52
香川県,951049,1876.78
和歌山県,923033,4724.65
佐賀県,812013,2440.69
山梨県,810427,4465.27
福井県,767433,4190.52
徳島県,719704,4146.75
高知県,692065,7103.63
島根県,671602,6707.89
鳥取県,553847,3507.14

都道府県別の人口・面積を人口降順で連動してソート(多次元配列)

array[0][i]は都道府県名、array[1][i]は人口で単位は「人」、array[2][i]は面積で単位は「km2」。

データは【都道府県】人口ランキング・面積ランキング・人口密度ランキングを参照。
DIM array[][46] = "北海道", "青森県", "岩手県", "宮城県", "秋田県", "山形県", "福島県", "茨城県", "栃木県", "群馬県", "埼玉県", "千葉県", "東京都", "神奈川県", "新潟県", "富山県", "石川県", "福井県", "山梨県", "長野県", "岐阜県", "静岡県", "愛知県", "三重県", "滋賀県", "京都府", "大阪府", "兵庫県", "奈良県", "和歌山県", "鳥取県", "島根県", "岡山県", "広島県", "山口県", "徳島県", "香川県", "愛媛県", "高知県", "福岡県", "佐賀県", "長崎県", "熊本県", "大分県", "宮崎県", "鹿児島県", "沖縄県", + _
					"5228885", "1238730", "1211206", "2303487", "960113", "1068696", "1834198", "2868554", "1934016", "1940333", "7346836", "6287034", "14064696", "9240411", "2202358", "1035612", "1133294", "767433", "810427", "2049683", "1979781", "3635220", "7546192", "1771440", "1414248", "2579921", "8842523", "5469184", "1325437", "923033", "553847", "671602", "1889607", "2801388", "1342987", "719704", "951049", "1335694", "692065", "5138891", "812013", "1313103", "1739211", "1124597", "1070213", "1589206", "1468410", + _
					"78421.39", "9645.64", "15275.01", "7282.29", "11637.52", "9323.15", "13784.14", "6097.39", "6408.09", "6362.28", "3797.75", "5157.57", "2194.03", "2416.11", "12583.96", "4247.58", "4186.21", "4190.52", "4465.27", "13561.56", "10621.29", "7777.35", "5173.07", "5774.49", "4017.38", "4612.20", "1905.32", "8401.02", "3690.94", "4724.65", "3507.14", "6707.89", "7114.33", "8479.65", "6112.54", "4146.75", "1876.78", "5676.19", "7103.63", "4986.51", "2440.69", "4130.98", "7409.46", "6340.76", "7735.22", "9187.06", "2282.59"

QSORT(array[1], QSRT_NATURALD, array[0], array[2])

PRINT "都道府県,人口,面積"

FOR i = 0 TO 46
	DIM str = ""
	FOR j = 0 TO 2
		str = str + array[j][i] + ","
	NEXT
	PRINT str
NEXT
  1. QSORT
結果
都道府県,人口,面積
東京都,14064696,2194.03,
神奈川県,9240411,2416.11,
大阪府,8842523,1905.32,
愛知県,7546192,5173.07,
埼玉県,7346836,3797.75,
千葉県,6287034,5157.57,
兵庫県,5469184,8401.02,
北海道,5228885,78421.39,
福岡県,5138891,4986.51,
静岡県,3635220,7777.35,
茨城県,2868554,6097.39,
広島県,2801388,8479.65,
京都府,2579921,4612.20,
宮城県,2303487,7282.29,
新潟県,2202358,12583.96,
長野県,2049683,13561.56,
岐阜県,1979781,10621.29,
群馬県,1940333,6362.28,
栃木県,1934016,6408.09,
岡山県,1889607,7114.33,
福島県,1834198,13784.14,
三重県,1771440,5774.49,
熊本県,1739211,7409.46,
鹿児島県,1589206,9187.06,
沖縄県,1468410,2282.59,
滋賀県,1414248,4017.38,
山口県,1342987,6112.54,
愛媛県,1335694,5676.19,
奈良県,1325437,3690.94,
長崎県,1313103,4130.98,
青森県,1238730,9645.64,
岩手県,1211206,15275.01,
石川県,1133294,4186.21,
大分県,1124597,6340.76,
宮崎県,1070213,7735.22,
山形県,1068696,9323.15,
富山県,1035612,4247.58,
秋田県,960113,11637.52,
香川県,951049,1876.78,
和歌山県,923033,4724.65,
佐賀県,812013,2440.69,
山梨県,810427,4465.27,
福井県,767433,4190.52,
徳島県,719704,4146.75,
高知県,692065,7103.63,
島根県,671602,6707.89,
鳥取県,553847,3507.14,

サービスをすべて取得し、そのサービスをユーザーが開始・停止できるかどうかをブール値で返す

DIM Shell = CREATEOLEOBJ("Shell.Application")
DIM str = DOSCMD("sc query state=all | findstr /B <#DBL>SERVICE_NAME:<#DBL>")
DIM Matches = reExecute(str, "SERVICE_NAME: (.*?)\r\n")
DIM services[Matches.Count]

FOR n = 0 TO Matches.Count - 1
	DIM service = Matches.Item(n).SubMatches(0)
	services[n] = service + ":" + Shell.CanStartStopService(service)
NEXT

QSORT(services, QSRT_UNICODEA)

FOR service IN services
	PRINT service
NEXT
  1. CREATEOLEOBJ
  2. DOSCMD
  3. reExecute
  4. Shell.CanStartStopService
  5. QSORT
結果
AarSvc_4de65:False
AdobeARMservice:False
AJRouter:False
ALG:False
ALUpdateService:False
(中略)
WwanSvc:False
XblAuthManager:False
XblGameSave:False
XboxGipSvc:False
XboxNetApiSvc:False

配列の中身を昇順で並び替える

DIM arr[] = 674, 8, 957, 254, 6014, 36, 378

QSORT(arr, QSRT_A)

FOR item IN arr
	PRINT item
NEXT
  1. qsort
結果
8
36
254
378
674
957
6014

配列の中身を降順で並び替える

DIM arr[] = 586, 36, 7528, 61, 872, 3695, 142

QSORT(arr, QSRT_D)

FOR item IN arr
	PRINT item
NEXT
  1. qsort
結果
7528
3695
872
586
142
61
36

多次元配列を一次元配列として昇順で並び替える

DIM arr[1][7]

arr[0][0] = 25;	arr[1][0] = 37;
arr[0][1] = 49;	arr[1][1] = 76;
arr[0][2] = 25;	arr[1][2] = 38;
arr[0][3] = 2;	arr[1][3] = 23;
arr[0][4] = 11;	arr[1][4] = 6;
arr[0][5] = 11;	arr[1][5] = 23;
arr[0][6] = 48;	arr[1][6] = 25;
arr[0][7] = 73;	arr[1][7] = 23;

QSORT(arr, 0)

FOR item IN arr
	PRINT item
NEXT
  1. qsort
結果
2
6
11
11
23
23
23
25
25
25
37
38
48
49
73
76

二次元配列を昇順で並び替える

DIM arr[1][7]

arr[0][0] = 25;	arr[1][0] = 37;
arr[0][1] = 49;	arr[1][1] = 76;
arr[0][2] = 25;	arr[1][2] = 38;
arr[0][3] = 2;	arr[1][3] = 23;
arr[0][4] = 11;	arr[1][4] = 6;
arr[0][5] = 11;	arr[1][5] = 23;
arr[0][6] = 48;	arr[1][6] = 25;
arr[0][7] = 73;	arr[1][7] = 23;

QSORT(arr[0], 0, arr[1])

FOR n = 0 TO UBound(arr[0])
	PRINT arr[0][n] + "," + arr[1][n]
NEXT
  1. qsort
結果
2,23
11,6
11,23
25,38
25,37
48,25
49,76
73,23

総段落数を取得

CONST wdDoNotSaveChanges = 0
CONST wdSaveChanges = -1

DIM arr[-1]

FOR n = 0 TO GETALLWIN() - 1
	arrayPush(arr, ALL_WIN_ID[n])
NEXT

arrayFilter(arr, "STATUS(%val%, ST_CLASS) = <#DBL>OpusApp<#DBL> AND STATUS(%val%, ST_VISIBLE)")
arrayMap("REPLACE(STATUS(%val%, ST_TITLE), <#DBL> - Microsoft Word<#DBL>, <#DBL><#DBL>)", arr)

QSORT(arr, QSRT_A)

TRY
	DIM Word = GETACTIVEOLEOBJ("Word.Application")
EXCEPT
	MSGBOX("操作する文書を開いてださい。")
	EXIT
ENDTRY

DIM res = SLCTBOX(SLCT_RDO OR SLCT_STR, 0, "操作する文書を選択", arr)
 
IFB res = -1 THEN
	MSGBOX("ファイル名が選択されなかったので終了します。")
	EXIT
ENDIF
 
Word.Documents(res).Activate

PRINT Word.ActiveDocument.Paragraphs.Count
  1. GETALLWIN
  2. arrayPush
  3. arrayFilter
  4. STATUS
  5. arrayMap
  6. REPLACE
  7. QSORT
  8. GETACTIVEOLEOBJ
  9. MSGBOX
  10. SLCTBOX
  11. Word.Documents
  12. Word.Documents.Item
  13. Word.Document.Activate
  14. Word.Application.ActiveDocument
  15. Word.Document.Paragraphs
  16. Word.Paragraphs.Count

指定したキーワードに下線を引く(Word)

CONST wdDoNotSaveChanges = 0			// 保留中の変更を保存しない
CONST wdSaveChanges = -1				// 保留中の変更をユーザーに確認しないで自動的に保存する
CONST wdPromptToSaveChanges = -2		// 保留中の変更を保存するかどうかをユーザーに確認する
CONST wdFindStop = 0
CONST wdCharacter = 1
CONST wdUnderlineSingle = 1
CONST wdCollapseEnd = 0

DIM arr[-1]

// すべてのIDをarr変数に格納
FOR n = 0 TO GETALLWIN() - 1
	arrayPush(arr, ALL_WIN_ID[n])
NEXT

// クラス名がOpusApp、通常の表示状態であるものを抽出
arrayFilter(arr, "STATUS(%val%, ST_CLASS) = <#DBL>OpusApp<#DBL> AND STATUS(%val%, ST_VISIBLE)")
// IDからタイトルを取得し、そのタイトルから「 - Microsoft Word」を削除
arrayMap("REPLACE(STATUS(%val%, ST_TITLE), <#DBL> - Microsoft Word<#DBL>, <#DBL><#DBL>)", arr)

QSORT(arr, QSRT_A)

TRY
	DIM Word = GETACTIVEOLEOBJ("Word.Application")
EXCEPT
	MSGBOX("操作する文書を開いてください。")
	EXIT
ENDTRY

DIM res = SLCTBOX(SLCT_RDO OR SLCT_STR, 0, "操作する文書を選択", arr)

IFB res = -1 THEN
	MSGBOX("ファイル名が選択されなかったので終了します。")
	EXIT
ENDIF

Word.Documents(res).Activate

DIM Document = Word.Application.ActiveDocument
DIM Range = Document.Content

// 下線を引くキーワード
DIM keywords[] = "ギャラリー", "オプション", "テーマ"

FOR item IN keywords
	Range.SetRange(0, 0)
	WITH Range.Find
		.Text = item
		.Forward = TRUE
		.Wrap = wdFindStop
		WHILE .Execute = TRUE
			WITH Range
				.Expand(wdCharacter)				// 範囲
				.Underline = wdUnderlineSingle		// 下線を引く
				.Collapse(wdCollapseEnd)		
			ENDWITH
		WEND
	ENDWITH
NEXT

//Word.Documents.Close(wdSaveChanges)
//Word.Quit
  1. GETALLWIN
  2. arrayPush
  3. arrayFilter
  4. arrayMap
  5. QSORT
  6. GETACTIVEOLEOBJ
  7. MSGBOX
  8. SLCTBOX
  9. Word.Documents.Item
  10. Word.Document.Activate
  11. Word.Application.ActiveDocument
  12. Word.Document.Content
  13. Word.Range.SetRange
  14. Word.Range.Find
  15. Word.Find.Text
  16. Word.Find.Forward
  17. Word.Find.Wrap
  18. Word.Find.Execute
  19. Word.Range.Expand
  20. Word.Range.Underline
  21. Word.Range.Collapse
  22. Word.Documents.Close
  23. Word.Application.Quit

文字数を出力

CONST wdStatisticWords = 0

DIM arr[-1]
 
// すべてのIDをarr変数に格納
FOR n = 0 TO GETALLWIN() - 1
	arrayPush(arr, ALL_WIN_ID[n])
NEXT
 
// クラス名がOpusApp、通常の表示状態であるものを抽出
arrayFilter(arr, "STATUS(%val%, ST_CLASS) = <#DBL>OpusApp<#DBL> AND STATUS(%val%, ST_VISIBLE)")
// IDか[]らタイトルを取得し、そのタイトルから「 - Microsoft Word」を削除
arrayMap("REPLACE(STATUS(%val%, ST_TITLE), <#DBL> - Microsoft Word<#DBL>, <#DBL><#DBL>)", arr)
 
QSORT(arr, QSRT_A)
 
TRY
	DIM Word = GETACTIVEOLEOBJ("Word.Application")
EXCEPT
	MSGBOX("操作する文書を開いてください。")
	EXIT
ENDTRY
 
DIM res = SLCTBOX(SLCT_RDO OR SLCT_STR, 0, "操作する文書を選択", arr)
 
IFB res = -1 THEN
	MSGBOX("ファイル名が選択されなかったので終了します。")
	EXIT
ENDIF

DIM Range = Word.ActiveDocument.Range
PRINT Range.ComputeStatistics(wdStatisticWords)
  1. arrayPush
  2. arrayFilter
  3. STATUS
  4. arrayMap
  5. QSORT
  6. GETACTIVEOLEOBJ
  7. MSGBOX
  8. SLCTBOX
  9. Word.Application.ActiveDocument
  10. Word.Range
  11. Word.Range.ComputeStatistics
結果
469

文章校正をする

CONST wdDoNotSaveChanges = 0			// 保留中の変更を保存しない
CONST wdSaveChanges = -1				// 保留中の変更をユーザーに確認しないで自動的に保存する
CONST wdPromptToSaveChanges = -2		// 保留中の変更を保存するかどうかをユーザーに確認する

DIM arr[-1]

// すべてのIDをarr変数に格納
FOR n = 0 TO GETALLWIN() - 1
	arrayPush(arr, ALL_WIN_ID[n])
NEXT

// クラス名がOpusApp、通常の表示状態であるものを抽出
arrayFilter(arr, "STATUS(%val%, ST_CLASS) = <#DBL>OpusApp<#DBL> AND STATUS(%val%, ST_VISIBLE)")
// IDからタイトルを取得し、そのタイトルから「 - Microsoft Word」を削除
arrayMap("REPLACE(STATUS(%val%, ST_TITLE), <#DBL> - Microsoft Word<#DBL>, <#DBL><#DBL>)", arr)

QSORT(arr, QSRT_A)

TRY
	DIM Word = GETACTIVEOLEOBJ("Word.Application")
EXCEPT
	MSGBOX("操作する文書を開いてください。")
	EXIT
ENDTRY

DIM res = SLCTBOX(SLCT_RDO OR SLCT_STR, 0, "操作する文書を選択", arr)

IFB res = -1 THEN
	MSGBOX("ファイル名が選択されなかったので終了します。")
	EXIT
ENDIF

DIM Document = Word.Application.ActiveDocument
Document.CheckGrammar

//Word.Documents.Close(wdSaveChanges)
//Word.Quit
  1. arrayPush
  2. arrayFilter
  3. STATUS
  4. arrayMap
  5. QSORT
  6. GETACTIVEOLEOBJ
  7. MSGBOX
  8. SLCTBOX
  9. Word.Application.ActiveDocument
  10. Word.Document.CheckGrammar

カーソル位置の文章を取得

DIM arr[-1]
 
FOR n = 0 TO GETALLWIN() - 1
	arrayPush(arr, ALL_WIN_ID[n])
NEXT
 
arrayFilter(arr, "STATUS(%val%, ST_CLASS) = <#DBL>OpusApp<#DBL> AND STATUS(%val%, ST_VISIBLE)")
arrayMap("REPLACE(STATUS(%val%, ST_TITLE), <#DBL> - Microsoft Word<#DBL>, <#DBL><#DBL>)", arr)
 
QSORT(arr, QSRT_A)
 
TRY
	DIM Word = GETACTIVEOLEOBJ("Word.Application")
EXCEPT
	MSGBOX("操作する文書を開いてださい。")
	EXIT
ENDTRY
 
DIM res = SLCTBOX(SLCT_RDO OR SLCT_STR, 0, "操作する文書を選択", arr)
 
IFB res = -1 THEN
	MSGBOX("ファイル名が選択されなかったので終了します。")
	EXIT
ENDIF

PRINT Word.Selection.Sentences(1).Text
  1. arrayPush
  2. arrayFilter
  3. STATUS
  4. arrayMap
  5. REPLACE
  6. QSORT
  7. GETACTIVEOLEOBJ
  8. MSGBOX
  9. SLCTBOX
  10. Word.Selection.Sentences.Text

カーソル位置の段落番号を取得

DIM arr[-1]
 
FOR n = 0 TO GETALLWIN() - 1
	arrayPush(arr, ALL_WIN_ID[n])
NEXT
 
arrayFilter(arr, "STATUS(%val%, ST_CLASS) = <#DBL>OpusApp<#DBL> AND STATUS(%val%, ST_VISIBLE)")
arrayMap("REPLACE(STATUS(%val%, ST_TITLE), <#DBL> - Microsoft Word<#DBL>, <#DBL><#DBL>)", arr)
 
QSORT(arr, QSRT_A)
 
TRY
	DIM Word = GETACTIVEOLEOBJ("Word.Application")
EXCEPT
	MSGBOX("操作する文書を開いてださい。")
	EXIT
ENDTRY
 
DIM res = SLCTBOX(SLCT_RDO OR SLCT_STR, 0, "操作する文書を選択", arr)
 
IFB res = -1 THEN
	MSGBOX("ファイル名が選択されなかったので終了します。")
	EXIT
ENDIF

DIM Range = Word.Selection.Range
Range.Start = 0

PRINT Range.Paragraphs.Count
  1. arrayPush
  2. arrayFilter
  3. STATUS
  4. arrayMap
  5. REPLACE
  6. QSORT
  7. GETACTIVEOLEOBJ
  8. MSGBOX
  9. SLCTBOX
  10. Word.Selection.Range
  11. Word.Range.Start
  12. Word.Range.Paragraphs.Count

Was this post helpful?

関連記事

heapSort
引数に指定された配列をヒープソートで並び替えます。
quickSort
問題を小さな部分問題に分割していく分割統治法を利用した手法で、データから適当に基準値を決めこれより大きいグループと小さいグループに分けるという手順を、分けた小さなグループに対しても再帰的に繰り返していきます。
oddEvenSort
奇偶転置ソートは、ソートのアルゴリズムの一つで、バブルソートを改良したもの。バブルソートではスキャンを一方向に順次行うのに対し、奇偶転置ソートでは組ごとに行います。
shearSort
シェアソートはソートアルゴリズムの一つで、データを長方形に並べた上で各行・各列ごとにソートを行ないます。
bogoSort
要素をランダムに並べ替えることで偶発的な一致を試みる整列アルゴリズムです。
bubbleSort
引数に指定した配列をバブルソートで並び替えます。
shakerSort
シェーカーソートは、ソートのアルゴリズムの一つです。バブルソートを改良したもの。双方向バブルソート、改良交換法とも言われます。バブルソートではスキャンを一方向にしか行わないのに対し、シェーカーソートでは交互に二方向に行います。
combSort
コムソートではソートの初期段階では離れた要素を比較交換します。そして徐々に2つの要素間の距離を縮めて、最後に直接隣接している要素どうしの比較交換を行います。
gnomeSort
ノームソートはソートアルゴリズムの一つです。挿入ソートに似ているが、要素の移動は挿入ではなくバブルソートのような一連の交換で行います。
selectionSort
選択ソートは、ソートのアルゴリズムの一つ。配列された要素から、最大値やまたは最小値を探索し配列最後の要素と入れ替えを行うことでソートします。
insertionSort
挿入ソートは、ソートのアルゴリズムの一つ。整列してある配列に追加要素を適切な場所に挿入します。
shellSort
シェルソートは挿入ソートが改良された整列アルゴリズムです。リストにおいてあらかじめ離れている要素を交換しておき、最終的に挿入ソートを実行します。
mergeSort
マージソートは整列されていないリストを2つのリストに分割して、それぞれを整列させた後、それらをマージして整列済みのひとつのリストを作ります。
arraySearch
配列の中から指定した要素が見つかった場合、その要素がある最初のインデックスを返します。
arrayReverse
引数に指定した配列を逆順にして返します。
FOR-IN-NEXT
配列やコレクションなどのグループの各要素に対して繰り返し処理を行います。
CALCARRAY
配列の合計値・最小値・最大値・平均値を求めます。
UBound
配列の最大インデックスを返します。
GETALLWIN
全ウィンドウのIDを取得します。
divisors
引数に指定した数値の約数をリストを配列で返します。
JOIN
引数に指定した配列を結合し文字列を返します。
Sort
POPUPMENU
ポップアップメニューを表示し、引数に指定した配列の中から選択された項目の要素番号を取得します。選択された項目を取得したい場合は、POPUPMENUの戻値を引数に指定した配列の要素番号として指定します。
RESIZE
配列のサイズを変更します。第二引数を省略した場合はサイズを取得します。
連想配列
連想配列とは、自動的に割り当てられる数字をキーとして持つかわりに、自由に任意の文字列を割り振ることができる配列のことです。添え字に番号の変わりに名前をつけることでわかりやすく管理することができます。
SETCLEAR
配列のすべての要素を任意の値で埋めます。
SHIFTARRAY
配列を指定した値だけシフトします。プラス値で後方、マイナス値で前方にシフトします。
SLICE
SLICE関数は、配列の中を指定範囲の配列で返す関数です。第一引数に配列を指定し、第二引数に開始位置、第三引数に終了位置を指定します。第二・第三引数は省略可能で、省略した場合は配列全体を返します。戻値はsafearray型です。
SPLIT
SPLIT関数は、引数に指定された文字列を区切文字列で区切り配列に格納します。区切文字列を省略した場合、スペースが区切文字列となります。戻値は配列でsafearray型です。
inArray