本ページには広告が含まれています。
目次
- 1 順列
- 2 使い方
- 3 プログラム実行例
- 3.1 サービスをすべて取得し、そのサービスをユーザーが開始・停止できるかどうかをブール値で返す
- 3.2 フォルダ内のファイルを更新日時でソートする
- 3.3 テキストファイルの内容を行毎にソートして出力する
- 3.4 テキストファイルの内容を行毎にソートして書き換える
- 3.5 配列の中身を昇順で並び替える
- 3.6 配列の中身を降順で並び替える
- 3.7 多次元配列を一次元配列として昇順で並び替える
- 3.8 二次元配列を昇順で並び替える
- 3.9 シートを昇順に並び替える(Excel)*
- 3.10 シートを降順に並び替える(Excel)*
- 3.11 UWSC.INIのDefaultFontを変更する
- 3.12 都道府県別の人口・面積を人口降順で連動してソート
- 3.13 都道府県別の人口・面積を人口降順で連動してソート(多次元配列)
配列の中身をソートします。キー配列と連動させる配列は次元の違う同じ配列名を指定することできます。
- 構文
- void = QSORT( var キー配列, 順列, var 配列, var 配列, ... )
- 引数
- キー配列 (Array)必須
- ソートされる配列変数名
- 順列 (#qsort = QSRT_A)省略可
- QSRT_A(0)
- 昇順 (デフォルト)
- QSRT_D(1)
- 降順
- QSRT_UNICODEA(2)
- UNICODE文字比較 昇順
- QSRT_UNICODED(3)
- UNICODE文字比較 降順
- QSRT_NATURALA(4)
- 自然順ソート 昇順
- QSRT_NATURALD(5)
- 自然順ソート 降順
- 配列 (Array)省略可
- 配列変数名、キー配列のソートと連動
- 戻り値
順列
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 ア ン- 半角数字
- 半角英字(大文字)
- 半角英字(小文字)
- ひらがな
- カタカナ
- 漢字
- 全角数字
- 全角英字(大文字)
- 全角英字(小文字)
- 半角カタカナ
降順(QSRT_D)
値が大きい順に並べます。
ン ア z a Z A 9 0 亜 ン ア ん あ z a Z A 9 0- 半角カタカナ
- 全角英字(小文字)
- 全角英字(大文字)
- 全角数字
- 漢字
- カタカナ
- ひらがな
- 半角英字(小文字)
- 半角英字(大文字)
- 半角数字
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文字ずつ大きさを比較し並び替え、1文字目が同じ場合2文字目の大きさを比較し並び替えるという手順でソートされます。
6 12 34 15 1 27 171文字目を比較し、小さい順に並び替える
12 15 1 17 27 34 62文字目を比較し、小さい順に並び替える。
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,
プログラム実行例
サービスをすべて取得し、そのサービスをユーザーが開始・停止できるかどうかをブール値で返す
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
//////////////////////////////////////////////////
// 【引数】
// str : 正規表現による検索の対象となる文字列
// Pattern : 正規表現で使用するパターンを設定
// IgnoreCase : 大文字・小文字を区別しない場合はTrue、区別する場合はFalse
// Global : 文字列全体を検索する場合はTrue、しない場合はFalse
// 【戻り値】
// 正規表現で検索した結果をMatchesコレクションとして返します。
//////////////////////////////////////////////////
FUNCTION reExecute(str, Pattern, IgnoreCase = TRUE, Global = TRUE)
DIM re = CREATEOLEOBJ("VBScript.RegExp")
re.Pattern = Pattern
re.IgnoreCase = IgnoreCase
re.Global = Global
RESULT = re.Execute(str)
FEND結果
AarSvc_6b8fd:False AdobeARMservice:False AJRouter:False ALG:False ALUpdateService:False AppHostSvc:False AppIDSvc:False Appinfo:False AppReadiness:False AppXSvc:False aspnet_state:False AudioEndpointBuilder:False Audiosrv:False autotimesvc:False AxInstSV:False BcastDVRUserService_6b8fd:False BDESVC:False BFE:False BITS:False BluetoothUserService_6b8fd:False Bonjour Service:False BootRacerServ:False BrokerInfrastructure:False BTAGService:False BthAvctpSvc:False bthserv:False camsvc:False CaptureService_6b8fd:False cbdhsvc_6b8fd:False CDPSvc:False CDPUserSvc_6b8fd:False CertPropSvc:False chromoting:False CLHNService:False ClipSVC:False COMSysApp:False ConsentUxUserSvc_6b8fd:False CoreMessagingRegistrar:False cphs:False CredentialEnrollmentManagerUserSvc_6b8fd:False CryptSvc:False CypherGuard cguard Service 32bit Edition:False CypherGuard cguard Service 64bit Edition:False CypherGuard Info Service:False dbupdate:False dbupdatem:False DbxSvc:False DcomLaunch:False dcsvc:False defragsvc:False DeviceAssociationBrokerSvc_6b8fd:False DeviceAssociationService:False DeviceInstall:False DevicePickerUserSvc_6b8fd:False DevicesFlowUserSvc_6b8fd:False DevQueryBroker:False Dhcp:False diagnosticshub.standardcollector.service:False diagsvc:False DiagTrack:False DispBrokerDesktopSvc:False DisplayEnhancementService:False DmEnrollmentSvc:False dmwappushservice:False Dnscache:False DoSvc:False dot3svc:False DPS:False DSDFunctionKeyCtlService:False DSDTabletControlService:False DSDWirelessLEDCtlService:False DsmSvc:False DsSvc:False DusmSvc:False dynabookSettingService:False Eaphost:False edgeupdate:False edgeupdatem:False EFS:False embeddedmode:False EntAppSvc:False EventLog:False EventSystem:False Everything:False Fax:False fdPHost:False FDResPub:False fhsvc:False FolderSize:False FontCache:False FontCache3.0.0.0:False FrameServer:False Freemake Improver:False FreemakeVideoCapture:False GoogleChromeElevationService:False GoogleIMEJaCacheService:False gpsvc:False GraphicsPerfSvc:False gupdate:False gupdatem:False hidserv:False HvHost:False icssvc:False IDriverT:False IKEEXT:False ImeDictUpdateService:False InstallService:False iphlpsvc:False IpxlatCfgSvc:False KeyIso:False KtmRm:False LanmanServer:False LanmanWorkstation:False lfsvc:False LicenseManager:False LLHDClient:False LLHDCloader:False lltdsvc:False lmhosts:False LMS:False LSM:False LxpSvc:False MapsBroker:False McpManagementService:False MessagingService_6b8fd:False MicrosoftEdgeElevationService:False MixedRealityOpenXRSvc:False MozillaMaintenance:False mpssvc:False MSDTC:False MSiSCSI:False msiserver:False MSMQ:False MSSQL$SQLEXPRESS:False MSSQLServerADHelper100:False NaturalAuthentication:False NcaSvc:False NcbService:False NcdAutoSetup:False Netlogon:False Netman:False NetMsmqActivator:False NetPipeActivator:False netprofm:False NetSetupSvc:False NetTcpActivator:False NetTcpPortSharing:False NgcCtnrSvc:False NgcSvc:False NielsenUpdate:True NlaSvc:False nsi:False nurago InstallUpdate:False nurago NetworkMeter:False nurago Reporting Service:False OneSyncSvc_6b8fd:False ose64:False osppsvc:False p2pimsvc:False p2psvc:False PcaSvc:False perceptionsimulation:False PerfHost:False PhoneSvc:False PimIndexMaintenanceSvc_6b8fd:False pla:False PlugPlay:False PNRPAutoReg:False PNRPsvc:False PolicyAgent:False Power:False PrintNotify:False PrintWorkflowUserSvc_6b8fd:False ProfSvc:False PushToInstall:False QWAVE:False RasAuto:False RasMan:False RemoteAccess:False RemoteRegistry:False RetailDemo:False RmSvc:False RpcEptMapper:False RpcLocator:False RpcSs:False SamSs:False SCardSvr:False ScDeviceEnum:False Schedule:False SCPolicySvc:False SDRSVC:False seclogon:False SecurityHealthService:False SEMgrSvc:False SENS:False SensorDataService:False SensorService:False SensrSvc:False SessionEnv:False SgrmBroker:False SharedAccess:False SharedRealitySvc:False ShellHWDetection:False shpamsvc:False smphost:False SmsRouter:False SNMPTRAP:False spectrum:False Spooler:False sppsvc:False SQLAgent$SQLEXPRESS:False SQLBrowser:False SQLWriter:False SSDPSRV:False ssh-agent:False SstpSvc:False StateRepository:False stisvc:False StorSvc:False svsvc:False swprv:False SynTPEnhService:False SysMain:False SystemEventsBroker:False SystemExplorerHelpService:False TabletInputService:False TapiSrv:False TermService:False Themes:False TieringEngineService:False TimeBrokerSvc:False TMachInfo:False TODDSrv:False TokenBroker:False TosCoSrv:False TOSHIBA HDD SSD Alert Service:False TPCHSrv:False TrkWks:False TroubleshootingSvc:False TrustedInstaller:False tzautoupdate:False UdkUserSvc_6b8fd:False uhssvc:False UmRdpService:False UnistoreSvc_6b8fd:False UNS:False upnphost:False UserDataSvc_6b8fd:False UserManager:False UsoSvc:False VacSvc:False VaultSvc:False vds:False vmicguestinterface:False vmicheartbeat:False vmickvpexchange:False vmicrdv:False vmicshutdown:False vmictimesync:False vmicvmsession:False vmicvss:False vncserver:False VSS:False VSStandardCollectorService150:False W32Time:False w3logsvc:False W3SVC:False WaaSMedicSvc:False WalletService:False WarpJITSvc:False WAS:False wbengine:False WbioSrvc:False Wcmsvc:False wcncsvc:False WdiServiceHost:False WdiSystemHost:False WdNisSvc:False WebClient:False Wecsvc:False WEPHOSTSVC:False wercplsupport:False WerSvc:False WFDSConMgrSvc:False WiaRpc:False WinDefend:False WinHttpAutoProxySvc:False Winmgmt:False WinRM:False wisvc:False WlanSvc:False wlidsvc:False wlpasvc:False WManSvc:False wmiApSrv:False WMPNetworkSvc:False workfolderssvc:False WpcMonSvc:False WPDBusEnum:False WpnService:False WpnUserService_6b8fd:False wscsvc:False WSearch:False wuauserv:False WwanSvc:False XblAuthManager:False XblGameSave:False XboxGipSvc:False XboxNetApiSvc:False
使用関数
フォルダ内のファイルを更新日時でソートする
DIM Shell = CREATEOLEOBJ("Shell.Application") DIM Folder = Shell.NameSpace("C:\Program Files (x86)\UWSC") DIM FolderItems = Folder.Items HASHTBL iColumn FOR i = 0 TO 350 iColumn[Folder.GetDetailsOf(EMPTYPARAM, i)] = i NEXT DIM filename[-1] DIM datetime[-1] FOR i = 0 TO FolderItems.Count - 1 DIM FolderItem = FolderItems.Item(i) IF FolderItem.isFolder THEN CONTINUE arrayPush(filename, Folder.GetDetailsOf(FolderItem,iColumn["名前"])) arrayPush(datetime, Folder.GetDetailsOf(FolderItem, iColumn["更新日時"])) NEXT QSORT(datetime, QSRT_NATURALA, filename) FOR i = 0 TO UBound(filename) PRINT filename[i] + "<#TAB>" + datetime[i] NEXT ////////////////////////////////////////////////// // 【引数】 // array : 要素を追加する配列(参照引数) // values : 追加する要素をvalue1から指定 // 【戻り値】 // 処理後の配列の要素の数 ////////////////////////////////////////////////// FUNCTION arrayPush(var array[], value1 = EMPTY, value2 = EMPTY, value3 = EMPTY, value4 = EMPTY, value5 = EMPTY, value6 = EMPTY, value7 = EMPTY, value8 = EMPTY, value9 = EMPTY, value10 = EMPTY, value11 = EMPTY, value12 = EMPTY, value13 = EMPTY, value14 = EMPTY, value15 = EMPTY, value16 = EMPTY) DIM i = 1 WHILE EVAL("value" + i) <> EMPTY DIM res = RESIZE(array, UBound(array) + 1) array[res] = EVAL("value" + i) i = i + 1 WEND RESULT = LENGTH(array) FEND ////////////////////////////////////////////////// // 【引数】 // inputs : 繰り返す文字列 // multiplier : inputsを繰り返す回数 // 【戻り値】 // inputsをmultiplier回を繰り返した文字列を返します ////////////////////////////////////////////////// FUNCTION strRepeat(inputs, multiplier) DIM res = "" FOR n = 1 TO multiplier res = res + inputs NEXT RESULT = res FEND ////////////////////////////////////////////////// // 【引数】 // arrayname : 上限値を求める配列の名前 // dimension : 返す次元を示す整数 // 【戻り値】 // 配列の上限値 ////////////////////////////////////////////////// FUNCTION UBound(arrayname[], dimension = 1) RESULT = EVAL("RESIZE(arrayname" + strRepeat("[0]", dimension - 1) + ")") FEND
結果
UDebug.chm 2014/05/11 1:58 RecIE.chm 2014/05/11 1:58 Uws2Exe.chm 2015/08/13 16:12 RecUws.dll 2016/03/25 4:57 UWSC.exe 2016/10/15 13:33 Uws2Exe.exe 2016/10/15 13:34 RecIE.exe 2016/10/15 13:35 UDebug.exe 2016/10/15 13:37 XRef.exe 2016/10/15 13:38 Readme.txt 2016/10/15 13:39 uwsc.chm 2016/10/15 13:41 unins000.exe 2018/06/27 12:48 unins000.dat 2018/06/27 12:49
使用関数
テキストファイルの内容を行毎にソートして出力する
DIM FID = FOPEN("D:\Documents\sample.txt", F_READ) DIM array[-1] FOR i = 1 TO FGET(FID, F_LINECOUNT) arrayPush(array, FGET(FiD, i)) NEXT FCLOSE(FID) QSORT(array, QSRT_A) FOR i = 0 TO UBound(array) PRINT array[i] NEXT ////////////////////////////////////////////////// // 【引数】 // array : 要素を追加する配列(参照引数) // values : 追加する要素をvalue1から指定 // 【戻り値】 // 処理後の配列の要素の数 ////////////////////////////////////////////////// FUNCTION arrayPush(var array[], value1 = EMPTY, value2 = EMPTY, value3 = EMPTY, value4 = EMPTY, value5 = EMPTY, value6 = EMPTY, value7 = EMPTY, value8 = EMPTY, value9 = EMPTY, value10 = EMPTY, value11 = EMPTY, value12 = EMPTY, value13 = EMPTY, value14 = EMPTY, value15 = EMPTY, value16 = EMPTY) DIM i = 1 WHILE EVAL("value" + i) <> EMPTY DIM res = RESIZE(array, UBound(array) + 1) array[res] = EVAL("value" + i) i = i + 1 WEND RESULT = LENGTH(array) FEND ////////////////////////////////////////////////// // 【引数】 // inputs : 繰り返す文字列 // multiplier : inputsを繰り返す回数 // 【戻り値】 // inputsをmultiplier回を繰り返した文字列を返します ////////////////////////////////////////////////// FUNCTION strRepeat(inputs, multiplier) DIM res = "" FOR n = 1 TO multiplier res = res + inputs NEXT RESULT = res FEND ////////////////////////////////////////////////// // 【引数】 // arrayname : 上限値を求める配列の名前 // dimension : 返す次元を示す整数 // 【戻り値】 // 配列の上限値 ////////////////////////////////////////////////// FUNCTION UBound(arrayname[], dimension = 1) RESULT = EVAL("RESIZE(arrayname" + strRepeat("[0]", dimension - 1) + ")") FEND
使用関数
テキストファイルの内容を行毎にソートして書き換える
DIM FID = FOPEN("D:\Documents\sample.txt", F_READ OR F_WRITE) DIM array[-1] FOR i = 1 TO FGET(FID, F_LINECOUNT) arrayPush(array, FGET(FiD, i)) NEXT QSORT(array, QSRT_A) FPUT(FID, "", F_ALLTEXT) FOR i = 0 TO UBound(array) FPUT(FID, array[i], i + 1) NEXT FCLOSE(FID) ////////////////////////////////////////////////// // 【引数】 // array : 要素を追加する配列(参照引数) // values : 追加する要素をvalue1から指定 // 【戻り値】 // 処理後の配列の要素の数 ////////////////////////////////////////////////// FUNCTION arrayPush(var array[], value1 = EMPTY, value2 = EMPTY, value3 = EMPTY, value4 = EMPTY, value5 = EMPTY, value6 = EMPTY, value7 = EMPTY, value8 = EMPTY, value9 = EMPTY, value10 = EMPTY, value11 = EMPTY, value12 = EMPTY, value13 = EMPTY, value14 = EMPTY, value15 = EMPTY, value16 = EMPTY) DIM i = 1 WHILE EVAL("value" + i) <> EMPTY DIM res = RESIZE(array, UBound(array) + 1) array[res] = EVAL("value" + i) i = i + 1 WEND RESULT = LENGTH(array) FEND ////////////////////////////////////////////////// // 【引数】 // inputs : 繰り返す文字列 // multiplier : inputsを繰り返す回数 // 【戻り値】 // inputsをmultiplier回を繰り返した文字列を返します ////////////////////////////////////////////////// FUNCTION strRepeat(inputs, multiplier) DIM res = "" FOR n = 1 TO multiplier res = res + inputs NEXT RESULT = res FEND ////////////////////////////////////////////////// // 【引数】 // arrayname : 上限値を求める配列の名前 // dimension : 返す次元を示す整数 // 【戻り値】 // 配列の上限値 ////////////////////////////////////////////////// FUNCTION UBound(arrayname[], dimension = 1) RESULT = EVAL("RESIZE(arrayname" + strRepeat("[0]", dimension - 1) + ")") FEND
使用関数
配列の中身を昇順で並び替える
DIM arr[] = 674, 8, 957, 254, 6014, 36, 378
QSORT(arr, QSRT_A)
FOR item IN arr
PRINT item
NEXT結果
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結果
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結果
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
//////////////////////////////////////////////////
// 【引数】
// inputs : 繰り返す文字列
// multiplier : inputsを繰り返す回数
// 【戻り値】
// inputsをmultiplier回を繰り返した文字列を返します
//////////////////////////////////////////////////
FUNCTION strRepeat(inputs, multiplier)
DIM res = ""
FOR n = 1 TO multiplier
res = res + inputs
NEXT
RESULT = res
FEND
//////////////////////////////////////////////////
// 【引数】
// arrayname : 上限値を求める配列の名前
// dimension : 返す次元を示す整数
// 【戻り値】
// 配列の上限値
//////////////////////////////////////////////////
FUNCTION UBound(arrayname[], dimension = 1)
RESULT = EVAL("RESIZE(arrayname" + strRepeat("[0]", dimension - 1) + ")")
FEND結果
2, 23
11, 6
11, 23
25, 38
25, 37
48, 25
49, 76
73, 23使用関数
シートを昇順に並び替える(Excel)*
WITH Excel
DIM cnt = .Sheets.Count
DIM SheetsList[cnt]
FOR i = 0 TO cnt - 1
SheetsList[i] = .Sheets(i+1).Name
NEXT
QSORT(SheetsList, QSRT_A)
FOR i = 0 TO cnt - 1
.Sheets(SheetsList[i]).Move(, .Sheets(i+1))
NEXT
ENDWITH使用関数
シートを降順に並び替える(Excel)*
WITH Excel
DIM cnt = .Sheets.Count
DIM SheetsList[cnt]
FOR i = 0 TO cnt - 1
SheetsList[i] = .Sheets(i+1).Name
NEXT
QSORT(SheetsList, QSRT_A)
FOR i = 0 TO cnt - 1
.Sheets(SheetsList[i]).Move(, .Sheets(i+1))
NEXT
ENDWITH使用関数
UWSC.INIのDefaultFontを変更する
CONST ssfFONTS = 20 DIM Shell = CREATEOLEOBJ("Shell.Application") DIM Folder = Shell.NameSpace(ssfFONTS) DIM FolderItems = Folder.Items DIM array[-1] FOR FolderItem IN FolderItems arrayPush(array, FolderItem.Name) NEXT QSORT(array, QSRT_UNICODEA) SHIFTARRAY(array, 1) array[0] = "(なし)" DIM filename = "C:\Users\" + BETWEENSTR(DOSCMD("SET"), "USERNAME=", "<#CR>") + "\AppData\Roaming\UWSC\UWSC.INI" DIM str = SPLIT(READINI("SET", "DefaultFont", filename), ",")[0] DIM font = SLCTBOX(SLCT_CMB OR SLCT_STR, 0, "フォントを選択してください。(現在:" + str + ")", array) IF font = "(なし)" THEN font = "" IF font <> -1 THEN WRITEINI("SET", "DefaultFont", font + ",", filename) ////////////////////////////////////////////////// // 【引数】 // array : 要素を追加する配列(参照引数) // values : 追加する要素をvalue1から指定 // 【戻り値】 // 処理後の配列の要素の数 ////////////////////////////////////////////////// FUNCTION arrayPush(var array[], value1 = EMPTY, value2 = EMPTY, value3 = EMPTY, value4 = EMPTY, value5 = EMPTY, value6 = EMPTY, value7 = EMPTY, value8 = EMPTY, value9 = EMPTY, value10 = EMPTY, value11 = EMPTY, value12 = EMPTY, value13 = EMPTY, value14 = EMPTY, value15 = EMPTY, value16 = EMPTY) DIM i = 1 WHILE EVAL("value" + i) <> EMPTY DIM res = RESIZE(array, UBound(array) + 1) array[res] = EVAL("value" + i) i = i + 1 WEND RESULT = LENGTH(array) FEND ////////////////////////////////////////////////// // 【引数】 // section : セクション // key : キー(Delete関数は省略可) // value : 値 // path : INIファイルのパス // default : セクションとキーが存在しなかった場合に返す値 // 【戻り値】 // ////////////////////////////////////////////////// MODULE INI DEF_DLL GetPrivateProfileStringW(wstring,wstring,wstring,var pwchar,dword,wstring):dword:kernel32 DEF_DLL WritePrivateProfileStringW(wstring,wstring,wstring,wstring):bool:kernel32 FUNCTION Read(section = NULL, key = NULL, path = NULL, default = EMPTY) DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject") IFB path = NULL THEN path = FSO.GetAbsolutePathName(FSO.GetBaseName(GET_UWSC_NAME) + ".INI") ELSE path = FSO.GetAbsolutePathName(path) ENDIF DIM n = 1024 DIM buffer = FORMAT(CHR(0), n) IFB GetPrivateProfileStringW(section, key, default, buffer, n, path) = 0 THEN RESULT = default ELSE RESULT = SLICE(SPLIT(buffer, CHR(0), TRUE)) IF section <> NULL AND key <> NULL THEN RESULT = RESULT[0] ENDIF FEND FUNCTION Write(section, key, value, path = NULL) DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject") IFB path = NULL THEN path = FSO.GetAbsolutePathName(FSO.GetBaseName(GET_UWSC_NAME) + ".INI") ELSE path = FSO.GetAbsolutePathName(path) ENDIF RESULT = WritePrivateProfileStringW(section, key, value, path) FEND PROCEDURE Delete(section, key = NULL, path = NULL) DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject") IFB path = NULL THEN path = FSO.GetAbsolutePathName(FSO.GetBaseName(GET_UWSC_NAME) + ".INI") ELSE path = FSO.GetAbsolutePathName(path) ENDIF PRINT WritePrivateProfileStringW(section, key, NULL, path) FEND FUNCTION escape(value) DIM esc = ";#=:" FOR i = 1 TO LENGTH(esc) DIM s = COPY(esc, i, 1) value = REPLACE(value, s, "\" + s) NEXT RESULT = value FEND FUNCTION unescape(value) DIM esc = ";#=:" FOR i = 1 TO LENGTH(esc) DIM s = COPY(esc, i, 1) value = REPLACE(value, "\" + s, s) NEXT RESULT = value FEND ENDMODULE ////////////////////////////////////////////////// // 【引数】 // inputs : 繰り返す文字列 // multiplier : inputsを繰り返す回数 // 【戻り値】 // inputsをmultiplier回を繰り返した文字列を返します ////////////////////////////////////////////////// FUNCTION strRepeat(inputs, multiplier) DIM res = "" FOR n = 1 TO multiplier res = res + inputs NEXT RESULT = res FEND ////////////////////////////////////////////////// // 【引数】 // arrayname : 上限値を求める配列の名前 // dimension : 返す次元を示す整数 // 【戻り値】 // 配列の上限値 ////////////////////////////////////////////////// FUNCTION UBound(arrayname[], dimension = 1) RESULT = EVAL("RESIZE(arrayname" + strRepeat("[0]", dimension - 1) + ")") FEND
使用関数
都道府県別の人口・面積を人口降順で連動してソート
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
//////////////////////////////////////////////////
// 【引数】
// inputs : 繰り返す文字列
// multiplier : inputsを繰り返す回数
// 【戻り値】
// inputsをmultiplier回を繰り返した文字列を返します
//////////////////////////////////////////////////
FUNCTION strRepeat(inputs, multiplier)
DIM res = ""
FOR n = 1 TO multiplier
res = res + inputs
NEXT
RESULT = res
FEND
//////////////////////////////////////////////////
// 【引数】
// arrayname : 上限値を求める配列の名前
// dimension : 返す次元を示す整数
// 【戻り値】
// 配列の上限値
//////////////////////////////////////////////////
FUNCTION UBound(arrayname[], dimension = 1)
RESULT = EVAL("RESIZE(arrayname" + strRepeat("[0]", dimension - 1) + ")")
FEND結果
都道府県,人口,面積
東京都,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結果
都道府県,人口,面積
東京都,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,使用関数
関連記事
- bubbleSort関数 (自作関数)
- 引数に指定された配列を バブルソート で並び替えます。
- shakerSort関数 (自作関数)
- 引数に指定された配列を シェーカーソート で並び替えます。
- gnomeSort関数 (自作関数)
- 引数に指定された配列を ノームソート で並び替えます。
- small関数 (自作関数)
- 配列の中で小さい方から数えた順位の値を求めます。
- insertionSort関数 (自作関数)
- 引数に指定された配列を 挿入ソート で並び替えます。
- shellSort関数 (自作関数)
- 引数に指定された配列を シェルソート で並び替えます。
- heapSort関数 (自作関数)
- 引数に指定された配列を ヒープソート で並び替えます。
- quickSort関数 (自作関数)
- 引数に指定された配列を クイックソート で並び替えます。
- shearSort関数 (自作関数)
- 引数に指定された配列を シェアソート で並び替えます。
- Items.Sort メソッド (Outlook)
- 指定されたプロパティのコレクションを並べ替えます。
