INPUTインプット関数

本ページには広告が含まれています。

インプットボックスにメッセージを表示し、ユーザーが入力したテキストを取得することができます。

構文
  1. return = INPUT( 表示メッセージ, デフォルト値, パスワードフラグ, X, Y )
引数
表示メッセージ (String)必須
インプットボックスに表示するメッセージ
デフォルト値 (String = "")省略可
デフォルトの値 として表示
パスワードフラグ (Boolean = False)省略可
TRUEにすると文字は全てアスタリスク表示 (デフォルトFALSE
X, Y (Integer)省略可
表示位置(デフォルトは中央、-1,-1にて前回位置)
戻り値

入力されたデータ(キャンセル時はEMPTY

ファイルドロップによりファイル名の設定可(複数選択時はタブにて結合される)

  1. ANSI文字列(AnsiString
  2. UNICODE文字列(UString

使い方

文字列を入力

名前を入力するインプットボックスを表示します。入力された名前はstrに代入され文字列として使用することができ、MSGBOX関数で入力された名前を使ってメッセージを表示します。

UWSC
DIM str = INPUT("名前を入力してください。")
MSGBOX(str + " さん、こんにちは。")
.png

何も入力せずにOKを押した場合は空文字列が返り、Cancelまたはを押したときはEmptyが戻り値として返ります。

以下はインプットボックスに田中と入力したときの例です。

入力.png

インプットボックスに入力した文字列をstrで取得し、その名前をMSGBOX関数に表示しています。

結果.png

ドロップしたファイルパスを取得

ファイルをドロップすることでそのファイルのパスを入力することができます。複数のファイルをドロップした場合は、タブで結合されます。

以下はドロップで入力されたファイル名をタブで分割しarrayで各要素に格納・出力するプログラムです。

UWSC
DIM str = INPUT("ファイルをドロップしてください。(複数可)")
DIM array = SPLIT(str, "<#TAB>")

FOR path IN array
	PRINT path
NEXT

入力形式の指定

入力された文字列を正規表現でチェックし、形式が合わない場合は再入力させます。reTest関数 (自作関数)で入力形式のチェックを行っています。

以下は入力値を数値で取得したいので、正規表現は\d+です。

キャンセル時は終了します。

UWSC
REPEAT
	DIM str = INPUT("数値を入力してください。")
	IF str = EMPTY THEN EXIT
UNTIL reTest(str, "\d+")

PRINT str

//////////////////////////////////////////////////
// 【引数】
//   str : 正規表現による検索の対象となる文字列 
//   Pattern : 正規表現で使用するパターンを設定 
//   IgnoreCase : 大文字・小文字を区別しない場合はTrue、区別する場合はFalse 
//   Global : 文字列全体を検索する場合はTrue、しない場合はFalse 
// 【戻り値】
//   
//////////////////////////////////////////////////
FUNCTION reTest(str, Pattern, IgnoreCase = TRUE, Global = TRUE)
	DIM re = CREATEOLEOBJ("VBScript.RegExp")
	re.Pattern = Pattern
	re.IgnoreCase = IgnoreCase
	re.Global = Global
	RESULT = re.Test(str)
FEND

郵便番号のチェックを行う場合000-0000(3桁-4桁)の形式になるので、正規表現に\d{3}-\d{4}を指定します。

UWSC
REPEAT
	DIM str = INPUT("郵便番号を入力してください。")
	IF str = EMPTY THEN EXIT
UNTIL reTest(str, "\d{3}-\d{4}")

PRINT str

//////////////////////////////////////////////////
// 【引数】
//   str : 正規表現による検索の対象となる文字列 
//   Pattern : 正規表現で使用するパターンを設定 
//   IgnoreCase : 大文字・小文字を区別しない場合はTrue、区別する場合はFalse 
//   Global : 文字列全体を検索する場合はTrue、しない場合はFalse 
// 【戻り値】
//   
//////////////////////////////////////////////////
FUNCTION reTest(str, Pattern, IgnoreCase = TRUE, Global = TRUE)
	DIM re = CREATEOLEOBJ("VBScript.RegExp")
	re.Pattern = Pattern
	re.IgnoreCase = IgnoreCase
	re.Global = Global
	RESULT = re.Test(str)
FEND

デフォルト値

第二引数のデフォルト値を指定すると、インプットボックスを表示したときにデフォルト値を表示することができます。以下のプログラムでは今日の日付をデフォルト値として表示しています。

UWSC
DIM date = INPUT("日付を入力してください。", today())
PRINT date

//////////////////////////////////////////////////
// 【引数】
//   
// 【戻り値】
//   
//////////////////////////////////////////////////

パスワードフラグ

第三引数のパスワードフラグにTrueを指定すると、入力した文字列が伏せ字になりセキュリティ向上に繋がります。

UWSC
DIM str = INPUT("パスワードを入力",, TRUE)
PRINT str

パスワードフラグがTrueになっているときは半角文字しか入力することができません。メモ帳などで入力した全角の文字列をペーストすることはできます。

パスワード.png

伏せ字にはなっていますがGETITEM関数GETSTR関数では取得することができます。

座標

インプットボックスは基本的に画面中央に表示させるものですが、引数X,Yにインプットボックスを表示する座標を指定することもできます。引数を省略した場合は画面中央に表示されます。両引数に-1を指定した場合のみ前回インプットボックスを表示した位置に表示されます。

以下のプログラムで2回目のインプットボックスは1回目と同じ(x,y)=(10,20)の位置に表示されます。

UWSC
INPUT("1回目",,, 10, 20)
INPUT("2回目",,, -1, -1)

インプットボックスの座標をx座標,y座標の片方のみを 前回と同じ位置にすることはできません。

以下のように1回目を(x,y)=(10,20)の位置、2回目はx座標にだけ-1を指定し前回値を使うということはできません。以下はx座標の-1が画面外になるので0となり(x,y)=(0,100)の位置に表示されます。

UWSC
INPUT("1回目",,, 10, 20)
INPUT("2回目",,, -1, 100)

片方のみ前回と同じ位置にしたい場合は、変数を使います。

UWSC
DIM x = 10
INPUT("1回目",,, x, 20)
INPUT("2回目",,, x, 100)

入力データの型

INPUT関数の戻り値の型は入力されたデータによってANSI文字列、もしくはUNICODE文字列の型で返されます。

半角数字32文字以内であればANSI文字列、それ以外のデータはUNICODE文字列の型となります。

以下は入力されたデータがANSI文字列型かUNICODE文字列型かを調べるプログラムです。キャンセルボタンが押されるまで型を調べ続けます。

UWSC
HASHTBL type
type[256] = "ANSI"
type[258] = "Unicode"

WHILE TRUE
	DIM str = INPUT("入力")
	IF str = EMPTY THEN BREAK
	PRINT str
	PRINT type[VARTYPE(str)]
	PRINT "-----"
WEND
結果
プレーンテキスト
INPUT:6>123
ANSI
-----
INPUT:6>12345678901234567890123456789012
ANSI
-----
INPUT:6>123456789012345678901234567890123
Unicode
-----
INPUT:6>@
Unicode
-----
INPUT:6>UWSC
Unicode
-----
INPUT:6>UWSC
Unicode
-----
INPUT:6>文字列
Unicode
-----

プログラム実行例

入力された文字列の計算をする

UWSC
HASHTBL variable
DIM array[-1]
DIM res = EMPTY

WHILE TRUE
	DIM %val% = ""
	FOR i = 0 TO LENGTH(variable) - 1
		%val% = %val% + variable[i, HASH_KEY] + "=" + variable[i, HASH_VAL] + " "
	NEXT
	DIM str = INPUT("計算式を入力してください。<#CR><#CR>変数<#TAB>" + %val% + "<#CR>結果<#TAB>" + res)
	IFB POS("=", str)  THEN
		DIM arr = SPLIT(str, "=")
		TRY
			variable[arr[0]] = EVAL(arr[1])
		EXCEPT
			FUKIDASI(TRY_ERRMSG)
			CONTINUE
		ENDTRY
	ENDIF
	FUKIDASI()
	res = EVAL(REPLACE(str, "=", ":="))
	IF res = EMPTY THEN BREAK
WEND
結果
プレーンテキスト
INPUT:10>a=2
INPUT:10>b=3
INPUT:10>a*b
6

パスワードを生成

パスワードを10個生成します。

結果は実行する度に変わります。

UWSC
REPEAT
	res = INPUT("何桁のパスワード?")
	IF res = EMPTY THEN EXIT
UNTIL CHKNUM(res)

FOR num = 0 TO 10
	DIM password = ""
	FOR n = 0 TO res
		SELECT RANDOM(3)
			CASE 0
				password = password + CHR(RANDOM(10) + 48)
			CASE 1
				password = password + CHR(RANDOM(26) + 65)
			CASE 2
				password = password + CHR(RANDOM(26) + 97)
		SELEND
	NEXT
	PRINT password
NEXT
結果
プレーンテキスト
D659nv9Z6Q1t1MXjXfPUMMe35r012a639
XsQg7139wsUWF2q764f9AiopT451aULBC
A8a2t7Iq0Tl7Ij3W4p5RmQ97ElwvkWeG4
u8RTBF1aDt365Y436XC09Uo5X9kWHc4dS
AeCg2uNoUrCR9FsjYHtdhHg2bB6S92NhY
3eR4l89x7WGf1SZTlpDcIbBc25IbEgk4a
nuT94OR530poRBt9s0wF1b275qAfGDOHa
KTRa7wmEHjab2MopiT8u3aPwI6ntWmMt5
Bz626hGf9GS6yeZQyHrIAbEk1N0fs1ZL5
6Nze7rld3Rmd0tU0Y6kgP1AUwab0bjQlR
11C0x8862eOP1AVjVlXz7rEl4nKkR91Hf
使用関数

数値から月の異名を求める

UWSC
DIM month[12] = "睦月", "如月", "弥生",  "卯月",  "皐月", "水無月", "文月",  "葉月",  "長月",  "神無月", "霜月", "師走"

DIM str = INPUT("1〜12の数値を入力してください。")

IFB reTest(str, "[1-9]|1[0-2]") THEN
	PRINT month[str- 1]
ELSE
	PRINT "1〜12の数値を入力してください。"
ENDIF

//////////////////////////////////////////////////
// 【引数】
//   str : 正規表現による検索の対象となる文字列 
//   Pattern : 正規表現で使用するパターンを設定 
//   IgnoreCase : 大文字・小文字を区別しない場合はTrue、区別する場合はFalse 
//   Global : 文字列全体を検索する場合はTrue、しない場合はFalse 
// 【戻り値】
//   
//////////////////////////////////////////////////
FUNCTION reTest(str, Pattern, IgnoreCase = TRUE, Global = TRUE)
	DIM re = CREATEOLEOBJ("VBScript.RegExp")
	re.Pattern = Pattern
	re.IgnoreCase = IgnoreCase
	re.Global = Global
	RESULT = re.Test(str)
FEND
結果
プレーンテキスト
INPUT:3>7
文月
使用関数
解説

入力した文字列をANSIでエンコードする

UWSC
PRINT ENCODE(ENCODE(INPUT("エンコードする文字列を入力してください。"), CODE_ANSI), CODE_URL)
使用関数

デスクトップにフォルダを作成

UWSC
CONST ssfDesktop = 0

DIM Shell = CREATEOLEOBJ("Shell.Application")
DIM Folder = Shell.NameSpace(ssfDesktop)
DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject")

WITH FSO
	.CreateFolder(.BuildPath(Folder.Self.Path, INPUT("デスクトップにフォルダを作成します。<#CR>フォルダ名を入力してください。")))
ENDWITH
使用関数

パス文字列を生成します

UWSC
CONST ssfDesktop = 0

DIM Shell = CREATEOLEOBJ("Shell.Application")
DIM Folder = Shell.NameSpace(ssfDesktop)
DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject")

PRINT FSO.BuildPath(Folder.Self.Path, INPUT("フォルダ名もしくはファイル名を入力してください。"))
使用関数

指定したフォルダが存在するか

UWSC
DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject")
DIM FolderName = INPUT("フォルダ名を入力してください。")

IFB FSO.FolderExists(FolderName) THEN
	MSGBOX("「" + FolderName + "」フォルダは存在します。")
ELSE
	MSGBOX("「" + FolderName + "」フォルダは存在しません。")
ENDIF
使用関数

指定したファイルが存在するか

UWSC
DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject")
DIM path = INPUT("ファイルパスを入力してください。")

IFB FSO.FileExists(path) = TRUE THEN
	MSGBOX("「" + path + "」は存在します。")
ELSE
	MSGBOX("「" + path + "」は存在しませn。")
ENDIF
使用関数

Googleでの検索結果を取得

UWSC
DIM IE = CREATEOLEOBJ("InternetExplorer.Application")
IE.Visible = TRUE
IE.Navigate("http://google.com")
BusyWait(IE)

IESETDATA(IE, INPUT("検索ワードを入力"), "q")
IESETDATA(IE, TRUE, "btnK")
BusyWait(IE)

DIM elements = IE.document.getElementsByClassName("rc")

FOR element IN elements
	PRINT element.getElementsByClassName("LC20lb").Item(0).textContent
	PRINT element.getElementsByClassName("s").Item(0).textContent
	PRINT "----------"
NEXT

IE.Quit

//////////////////////////////////////////////////
// 【引数】
//   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

//////////////////////////////////////////////////
// 【引数】
//   needle : 検索する値 
//   haystack : 配列 
// 【戻り値】
//   
//////////////////////////////////////////////////
FUNCTION arraySearch(needle, haystack[])
	DIM i = 0
	FOR item IN haystack
		IFB item = needle THEN
			RESULT = i
			EXIT
		ENDIF
		i = i + 1
	NEXT
FEND

//////////////////////////////////////////////////
// 【引数】
//   IE : IEオブジェクト 
// 【戻り値】
//   
//////////////////////////////////////////////////
PROCEDURE BusyWait(Var IE)
	SLEEP(0.500)
	DIM t = GETTIME()
	TRY
		REPEAT
			DIM tm = GETTIME() - t
			FUKIDASI("BusyWait:" + tm)
			SLEEP(0.010)
			IF tm >= 60 THEN BREAK
		UNTIL !IE.Busy AND IE.readyState = 4
	EXCEPT
		IE = getIEObj(-1)
		PRINT IE.document.URL + " のIEオブジェクトを取得しました。"
		BusyWait(IE)
	ENDTRY
	FUKIDASI()
FEND

//////////////////////////////////////////////////
// 【引数】
//   interval : 加算する時間間隔を表す文字列式(yyyy:年、m:月、d:日、ww:週、h:時、n:分、s:秒) 
//   num : dateに加算する値。未来は正、過去は負で指定 
//   date : 時間間隔を加算する日付 
// 【戻り値】
//   
//////////////////////////////////////////////////
FUNCTION dateAdd(interval, num, date)
	DIM year, month, day, d
	GETTIME(0, date)
	DIM time = G_TIME_HH2 + ":" + G_TIME_NN2 + ":" + G_TIME_SS2
	SELECT interval
		CASE "yyyy"
			d = (G_TIME_YY + num) + "/" + G_TIME_MM2 + "/" + G_TIME_DD2
			IF time <> "00:00:00" THEN d = d + " " + time
		CASE "m"
			IFB num > 0 THEN
				year = G_TIME_YY + INT((G_TIME_MM + num) / 12)
				month = REPLACE(FORMAT(((G_TIME_MM + num) MOD 12), 2), " ", "0")
			ELSE
				year = G_TIME_YY + CEIL((G_TIME_MM + num) / 12 - 1)
				month = REPLACE(FORMAT(G_TIME_MM - (ABS(num) MOD 12), 2), " ", "0")
			ENDIF
			IF month = "00" THEN month = 12
			day = G_TIME_DD2
			d = "" + year + month + day
			IFB !isDate(d) THEN
				d = year + "/" + month + "/" + "01"
				d = getEndOfMonth(d)
			ELSE
				d = year + "/" + month + "/" + day
			ENDIF
			IF time <> "00:00:00" THEN d = d + " " + time
		CASE "d"
			t = GETTIME(num, date)
			d = G_TIME_YY4 + "/" + G_TIME_MM2 + "/" + G_TIME_DD2 + IIF(t MOD 86400, " " + G_TIME_HH2 + ":" + G_TIME_NN2 + ":" + G_TIME_SS2, "")
		CASE "ww"
			t = GETTIME(num * 7, date)
			d = G_TIME_YY4 + "/" + G_TIME_MM2 + "/" + G_TIME_DD2 + IIF(t MOD 86400, " " + G_TIME_HH2 + ":" + G_TIME_NN2 + ":" + G_TIME_SS2, "")
		CASE "h"
			t = GETTIME(num / 24, date)
			d = G_TIME_YY4 + "/" + G_TIME_MM2 + "/" + G_TIME_DD2 + IIF(t MOD 86400, " " + G_TIME_HH2 + ":" + G_TIME_NN2 + ":" + G_TIME_SS2, "")
		CASE "n"
			t = GETTIME(num / 1440, date)
			d = G_TIME_YY4 + "/" + G_TIME_MM2 + "/" + G_TIME_DD2 + IIF(t MOD 86400, " " + G_TIME_HH2 + ":" + G_TIME_NN2 + ":" + G_TIME_SS2, "")
		CASE "s"
			t = GETTIME(num / 86400, date)
			d = G_TIME_YY4 + "/" + G_TIME_MM2 + "/" + G_TIME_DD2 + IIF(t MOD 86400, " " + G_TIME_HH2 + ":" + G_TIME_NN2 + ":" + G_TIME_SS2, "")
	SELEND
	RESULT = d
FEND

//////////////////////////////////////////////////
// 【引数】
//   interval : 時間単位(yyyy︰年、q:四半期、m︰月、d︰日、w:週日、ww:週、h:時、n:分、s:秒) 
//   date1 : 日時1 
//   date2 : 日時2 
// 【戻り値】
//   
//////////////////////////////////////////////////
FUNCTION dateDiff(interval, date1, date2)
	DIM y1, y2, m1, m2, d1, d2, d
	SELECT interval
		CASE "yyyy"
			GETTIME(0, date1)
			y1 = G_TIME_YY
			GETTIME(0, date2)
			y2 = G_TIME_YY
			d = y2 - y1
		CASE "q"
			GETTIME(0, date1)
			y1 = G_TIME_YY
			m1 = G_TIME_MM
			GETTIME(0, date2)
			y2 = G_TIME_YY
			m2 = G_TIME_MM
			d = y2 * 4 + CEIL(m2/3) - (y1 * 4 + CEIL(m1/3))
		CASE "m"
			GETTIME(0, date1)
			y1 = G_TIME_YY
			m1 = G_TIME_MM
			GETTIME(0, date2)
			y2 = G_TIME_YY
			m2 = G_TIME_MM
			d = (y2 - y1) * 12 + m2 - m1
		CASE "d"
			d1 = GETTIME(0, date1)
			d2 = GETTIME(0, date2)
			d = (d2 - d1) / 86400
		CASE "w"
			d = INT(dateDiff("d", date1, date2) / 7)
		CASE "ww"
			date1 = dateAdd("d", -1 * getWeekday(date1), date1)
			d = INT(dateDiff("d", date1, date2) / 7)
		CASE "h"
			d = dateDiff("d", date1, date2) * 24
		CASE "n"
			d = dateDiff("d", date1, date2) * 1440
		CASE "s"
			d = dateDiff("d", date1, date2) * 86400
	SELEND
	RESULT = d
FEND

//////////////////////////////////////////////////
// 【引数】
//   array : 最大公約数を求める数値を格納した配列 
// 【戻り値】
//   
//////////////////////////////////////////////////
FUNCTION GCD(array[])
	DIM c = LENGTH(array)
	DIM rem = array[c-1] MOD array[c-2]
	IFB rem = 0 THEN
		IFB LENGTH(array) = 2 THEN
			RESULT = array[c-2]
			EXIT
		ENDIF
		RESIZE(array, c-2)
		RESULT = GCD(array)
		EXIT
	ENDIF
	array[c-1] = array[c-2]
	array[c-2] = rem
	RESULT = GCD(array)
FEND

//////////////////////////////////////////////////
// 【引数】
//   date : 日付(”YYYYMMDD” or “YYYY/MM/DD” or “YYYY-MM-DD” or “YYYYMMDDHHNNSS” or “YYYY/MM/DD HH:NN:SS”) 
//   m : 第一引数の指定日からプラスマイナスm月とする 
// 【戻り値】
//   
//////////////////////////////////////////////////
FUNCTION getEndOfMonth(date, m = 0)
	date = dateAdd("m", m + 1, date)
	GETTIME(0, date)
	GETTIME(-G_TIME_DD, date)
	RESULT = G_TIME_YY4 + "/" + G_TIME_MM2 + "/" + G_TIME_DD2
FEND

//////////////////////////////////////////////////
// 【引数】
//   文字列 or 数値 : 取得したい<a href="https://uwsc.jp/com/ie/" >InternetExplorer オブジェクト</a>のタイトル・URLもしくは数値を指定 
//   完全一致フラグ : (TRUE : 文字列が完全一致したものを取得、FALSE : 文字列の一部を含むものを取得) 
// 【戻り値】
//   
//////////////////////////////////////////////////
FUNCTION getIEObj(str, flg = FALSE)
	DIM Shell = CREATEOLEOBJ("Shell.Application")
	DIM ShellWindows = Shell.Windows
	DIM IE[-1]
	FOR i = 0 TO ShellWindows.Count - 1
		TRY
			IFB ShellWindows.Item(i).Name = "Internet Explorer" THEN
				arrayPush(IE, ShellWindows.Item(i))
			ENDIF
		EXCEPT
		ENDTRY
	NEXT
	SELECT CHKNUM(str)
		CASE TRUE
			IFB str = 0 THEN
				RESULT = LENGTH(IE)
			ELSE
				IF str < 0 THEN str = str + LENGTH(IE) + 1
				TRY
					RESULT = IE[str-1]
				EXCEPT
					RESULT = ERR_VALUE
				ENDTRY
			ENDIF
		CASE FALSE
			DIM pattern = IIF(flg, "^" + str + "$", str)
			DIM titleList = SLICE(IE)
			FOR i = 0 TO UBound(titleList)
				titleList[i] = titleList[i].Document.title
			NEXT
			DIM urlList = SLICE(IE)
			FOR i = 0 TO UBound(urlList)
				urlList[i] = urlList[i].Document.URL
			NEXT
			DIM num = ERR_VALUE
			SELECT TRUE
				CASE pregGrep(pattern, titleList) <> FALSE;	num = arraySearch(pregGrep(pattern, titleList)[0], titleList)
				CASE pregGrep(pattern, urlList) <> FALSE;		num = arraySearch(pregGrep(pattern, urlList)[0], urlList)
			SELEND
			TRY
				RESULT = IE[num]
			EXCEPT
				RESULT = ERR_VALUE
			ENDTRY
	SELEND
FEND

//////////////////////////////////////////////////
// 【引数】
//   date : 日付文字列(”YYYYMMDD” or “YYYY/MM/DD” or “YYYY-MM-DD” or “YYYYMMDDHHNNSS” or “YYYY/MM/DD HH:NN:SS”)もしくはシリアル値 
//   type : 取得する曜日番号の種類を示す0〜3または11〜17の値。1と17は日曜日を1、2と11は月曜日を1とカウントします。11以降はExcel2010で追加された値で、互換性を保つために重複した値があります。 
// 【戻り値】
//   
//////////////////////////////////////////////////
FUNCTION getWeekday(date, type = 1)
	IF VARTYPE(date) <> 258 THEN date = text(date, "yyyy/mm/dd")
	GETTIME(0, date)
	DIM w = G_TIME_WW
	SELECT TRUE
		CASE type = 0
			RESULT = w
		CASE type = 1
			RESULT = w + 1
		CASE type = 2
			RESULT = IIF(w=0, 7, w)
		CASE type = 3
			RESULT = (w+6) MOD 7
		CASE type = 11
			RESULT = getWeekday(date, 2)
		CASE type >= 12
			RESULT = ((getWeekday(date, 2) + 17 - type) MOD 7) + 1
	SELEND
FEND

//////////////////////////////////////////////////
// 【引数】
//   serial : 時間を表すシリアル値を指定 
// 【戻り値】
//   
//////////////////////////////////////////////////
FUNCTION Hour(serial)
	RESULT = INT(serial * 24) MOD 24
FEND

//////////////////////////////////////////////////
// 【引数】
//   expr : 評価する式 
//   truepart : 評価した式がTrueのときに返す値 
//   falsepart : 評価した式がFalseのときに返す値 
// 【戻り値】
//   
//////////////////////////////////////////////////
FUNCTION IIF(expr, truepart, falsepart)
	IFB EVAL(expr) THEN
		RESULT = truepart
	ELSE
		RESULT = falsepart
	ENDIF
FEND

//////////////////////////////////////////////////
// 【引数】
//   date : 存在するかを調べる日付文字列。YYYYMMDD or YYYY/MM/DD or YYYY-MM-DDのいずれかの形式。 
// 【戻り値】
//   
//////////////////////////////////////////////////
FUNCTION isDate(date)
	TRY
		GETTIME(0, date)
		RESULT = TRUE
	EXCEPT
		RESULT = FALSE
	ENDTRY
FEND

//////////////////////////////////////////////////
// 【引数】
//   pattern : 検索するパターンを表す文字列 
//   array : 検索される配列 
// 【戻り値】
//   
//////////////////////////////////////////////////
FUNCTION pregGrep(pattern, array[], flags = 0)
	DIM res[-1]
	FOR item IN array
		IF reTest(item, pattern) THEN arrayPush(res, item)
	NEXT
	RESULT = SLICE(res)
FEND

//////////////////////////////////////////////////
// 【引数】
//   str : 正規表現による検索の対象となる文字列 
//   Pattern : 正規表現で使用するパターンを設定 
//   IgnoreCase : 大文字・小文字を区別しない場合はTrue、区別する場合はFalse 
//   Global : 文字列全体を検索する場合はTrue、しない場合はFalse 
// 【戻り値】
//   
//////////////////////////////////////////////////
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

//////////////////////////////////////////////////
// 【引数】
//   str : 正規表現による検索の対象となる文字列 
//   Pattern : 正規表現で使用するパターンを設定 
//   IgnoreCase : 大文字・小文字を区別しない場合はTrue、区別する場合はFalse 
//   Global : 文字列全体を検索する場合はTrue、しない場合はFalse 
// 【戻り値】
//   
//////////////////////////////////////////////////
FUNCTION reTest(str, Pattern, IgnoreCase = TRUE, Global = TRUE)
	DIM re = CREATEOLEOBJ("VBScript.RegExp")
	re.Pattern = Pattern
	re.IgnoreCase = IgnoreCase
	re.Global = Global
	RESULT = re.Test(str)
FEND

//////////////////////////////////////////////////
// 【引数】
//   inputs : 繰り返す文字列 
//   multiplier : inputsを繰り返す回数 
// 【戻り値】
//   
//////////////////////////////////////////////////
FUNCTION strRepeat(inputs, multiplier)
	DIM res = ""
	FOR n = 1 TO multiplier
		res = res + inputs
	NEXT
	RESULT = res
FEND

//////////////////////////////////////////////////
// 【引数】
//   serial : シリアル値 
//   format : フォーマット 
// 【戻り値】
//   
//////////////////////////////////////////////////
//////////////////////////////////////////////////
// 【引数】
//   serial : シリアル値 
//   format : フォーマット 
// 【戻り値】
//   
//////////////////////////////////////////////////
FUNCTION text(serial, format, hour12 = FALSE)
	HASHTBL startDate
	startDate["明治"] = "1868/01/25"
	startDate["大正"] = "1912/07/30"
	startDate["昭和"] = "1926/12/25"
	startDate["平成"] = "1989/01/08"
	startDate["令和"] = "2019/05/01"
	
	DIM baseDate = "1899/12/30"
	
	SELECT TRUE
		CASE reTest(format, "\[h+\]")
			Matches = reExecute(format, "\[(h+)\]")
			DIM hour = iif(hour12, Hour(serial) MOD 12, Hour(serial))
			RESULT = text(hour, strRepeat("0", LENGTH(Matches.Item(0).SubMatches(0))))
		CASE reTest(format, "^h+$")
			Matches = reExecute(format, "^(h+)$")
			hour = iif(hour12, Hour(serial) MOD 12, Hour(serial))
			RESULT = text(hour MOD 24, strRepeat("0", LENGTH(Matches.Item(0).SubMatches(0))))
		CASE reTest(format, "\[m+\]")
			Matches = reExecute(format, "\[(m+)\]")
			RESULT = text(serial * 1440, strRepeat("0", LENGTH(Matches.Item(0).SubMatches(0))))
		CASE format = "m"
			GETTIME(serial, baseDate)
			RESULT = text(G_TIME_MM, "0")
		CASE format = "mm"
			GETTIME(serial, baseDate)
			RESULT = G_TIME_MM2
		CASE format = "n"
			GETTIME(serial, baseDate)
			RESULT = G_TIME_NN
		CASE format = "nn"
			GETTIME(serial, baseDate)
			RESULT = G_TIME_NN2
		CASE format = "s"
			GETTIME(serial, baseDate)
			RESULT = text(G_TIME_SS, "0")
		CASE format = "ss"
			GETTIME(serial, baseDate)
			RESULT = G_TIME_SS2
		CASE format = "yyyy"
			GETTIME(serial, baseDate)
			RESULT = G_TIME_YY4
		CASE format = "yy"
			GETTIME(serial, baseDate)
			RESULT = COPY(G_TIME_YY4, 3, 2)
		CASE format = "e"
			SELECT TRUE
				CASE dateDiff("d", startDate["令和"], text(serial, "yyyy/mm/dd")) >= 0
					RESULT = text(serial, "yyyy") - 2018
				CASE dateDiff("d", startDate["平成"], text(serial, "yyyy/mm/dd")) >= 0
					RESULT = text(serial, "yyyy") - 1988
				CASE dateDiff("d", startDate["昭和"], text(serial, "yyyy/mm/dd")) >= 0
					RESULT = text(serial, "yyyy") - 1925
				CASE dateDiff("d", startDate["大正"], text(serial, "yyyy/mm/dd")) >= 0
					RESULT = text(serial, "yyyy") - 1911
				CASE dateDiff("d", startDate["明治"], text(serial, "yyyy/mm/dd")) >= 0
					RESULT = text(serial, "yyyy") - 1867
			SELEND
		CASE format = "ee"
			SELECT TRUE
				CASE dateDiff("d", startDate["令和"], text(serial, "yyyy/mm/dd")) >= 0
					RESULT = text(text(serial, "yyyy") - 2018, "00")
				CASE dateDiff("d", startDate["平成"], text(serial, "yyyy/mm/dd")) >= 0
					RESULT = text(text(serial, "yyyy") - 1988, "00")
				CASE dateDiff("d", startDate["昭和"], text(serial, "yyyy/mm/dd")) >= 0
					RESULT = text(text(serial, "yyyy") - 1925, "00")
				CASE dateDiff("d", startDate["大正"], text(serial, "yyyy/mm/dd")) >= 0
					RESULT = text(text(serial, "yyyy") - 1911, "00")
				CASE dateDiff("d", startDate["明治"], text(serial, "yyyy/mm/dd")) >= 0
					RESULT = text(text(serial, "yyyy") - 1867, "00")
			SELEND
		CASE format = "g"
			SELECT TRUE
				CASE dateDiff("d", startDate["令和"], text(serial, "yyyy/mm/dd")) >= 0;		RESULT = "R"
				CASE dateDiff("d", startDate["平成"], text(serial, "yyyy/mm/dd")) >= 0;		RESULT = "H"
				CASE dateDiff("d", startDate["昭和"], text(serial, "yyyy/mm/dd")) >= 0;		RESULT = "S"
				CASE dateDiff("d", startDate["大正"], text(serial, "yyyy/mm/dd")) >= 0;		RESULT = "T"
				CASE dateDiff("d", startDate["明治"], text(serial, "yyyy/mm/dd")) >= 0;		RESULT = "M"
			SELEND
		CASE format = "gg"
			RESULT = COPY(text(serial, "ggg"), 1, 1)
		CASE format = "ggg"
			SELECT TRUE
				CASE dateDiff("d", startDate["令和"], text(serial, "yyyy/mm/dd")) >= 0;		RESULT = "令和"
				CASE dateDiff("d", startDate["平成"], text(serial, "yyyy/mm/dd")) >= 0;		RESULT = "平成"
				CASE dateDiff("d", startDate["昭和"], text(serial, "yyyy/mm/dd")) >= 0;		RESULT = "昭和"
				CASE dateDiff("d", startDate["大正"], text(serial, "yyyy/mm/dd")) >= 0;		RESULT = "大正"
				CASE dateDiff("d", startDate["明治"], text(serial, "yyyy/mm/dd")) >= 0;		RESULT = "明治"
			SELEND
		CASE format = "mmmmm"
			RESULT = COPY(text(serial, "mmmm"), 1, 1)
		CASE format = "mmmm"
			DIM month[] = "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"
			RESULT = month[text(serial, "m") - 1]
		CASE format = "mmm"
			RESULT = COPY(text(serial, "mmmm"), 1, 3)
		CASE format = "dd"
			GETTIME(serial, baseDate)
			RESULT = text(G_TIME_DD2, "00")
		CASE format = "d"
			GETTIME(serial, baseDate)
			RESULT = text(G_TIME_DD, "0")
		CASE reTest(format, "^[ad]{3,4}$")
			Matches = reExecute(format, "([ad]{3,4})")
			GETTIME(serial, baseDate)
			DIM aaa[] = "日", "月", "火", "水", "木", "金", "土"
			DIM aaaa[] = "日曜日", "月曜日", "火曜日", "水曜日", "木曜日", "金曜日", "土曜日"
			DIM ddd[] = "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"
			DIM dddd[] = "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday";
			RESULT = EVAL(Matches.Item(0).SubMatches(0) + "[" + getWeekday(G_TIME_WW, 1) + "]")
		CASE reTest(format, "(0+\.?0+)?%")
			Matches = reExecute(format, "(0+\.?0+)?%")
			RESULT = text(serial * 100, Matches.Item(0).SubMatches(0)) + "%"
		CASE reTest(format, "^\[DBNum\d{1,4}\](.*?)$")
			Matches = reExecute(format, "^\[DBNum(\d{1,4})\](.*?)$")
			DIM value = VAL(Matches.Item(0).SubMatches(0))
			DIM sss = text(serial, Matches.Item(0).SubMatches(1))
			Matches = reExecute(sss, "(\D+)?(\d+)(\D+)?")
			DIM res = ""
			FOR m = 0 TO Matches.Count - 1
				serial = Matches.Item(m).SubMatches(1)
				SELECT value
					CASE 1, 2
						DIM n[][9] = "〇", "一", "二", "三", "四", "五", "六", "七", "八", "九", + _
										"", "壱", "弐", "参", "四", "伍", "六", "七", "八", "九"
						DIM a[][3] = "", "十", "百", "千", + _
										"", "拾", "百", "阡"
						DIM b[][3] = "", "万", "億", "兆", + _
										"", "萬", "億", "兆"
						DIM r = ""
						DIM j = 0
						type = value - 1
						REPEAT
							DIM str = ""
							DIM n4 = serial MOD 10000
							FOR i = LENGTH(n4) TO 1 STEP -1
								s = COPY(n4, i, 1)
								IFB s = 1 AND a[type][LENGTH(n4)-i] <> "" THEN
									str = IIF(s, a[type][LENGTH(n4)-i], "") + str
								ELSE	
									str = n[type][s] + IIF(s, a[type][LENGTH(n4)-i], "") + str
								ENDIF
							NEXT
							IF str <> "" THEN r = str + b[type][j] + r
							j = j + 1
							serial = INT(serial / 10000)
						UNTIL serial = 0
						res = res + Matches.Item(m).SubMatches(0) + r + Matches.Item(m).SubMatches(2)
					CASE 3
						res = res + Matches.Item(m).SubMatches(0) + STRCONV(serial, SC_FULLWIDTH) + Matches.Item(m).SubMatches(2)
					CASE 4
						res = res + Matches.Item(m).SubMatches(0) + STRCONV(serial, SC_HALFWIDTH) + Matches.Item(m).SubMatches(2)
				SELEND
			NEXT
			RESULT = res
		CASE reTest(format, "^(.*?)(AM\/PM|am\/pm|A\/P|a\/p)(.*?)$")
			Matches = reExecute(format, "^(.*?)(AM\/PM|am\/pm|A\/P|a\/p)(.*?)$")
			DIM array = SPLIT(Matches.Item(0).SubMatches(1), "/")
			ampm = array[IIF(serial - INT(serial) >= 0.5, 1, 0)]
			hour12 = TRUE
			res = ""
			WITH Matches.Item(0)
				res = text(serial, .SubMatches(0), hour12) + ampm + text(serial, .SubMatches(2), hour12)
			ENDWITH
			RESULT = res
		CASE reTest(format, "([^ymdagehns]{0,})?(([ymdagehns])\3{0,})([^ymdagehns]+)?")
			Matches = reExecute(format, "([^ymdagehns]{0,})?(([ymdagehns])\3{0,})([^ymdagehns]+)?")
			FOR n = 0 TO Matches.Count - 1
				IF n = 0 THEN res = Matches.Item(n).SubMatches(0)
			NEXT
			FOR n = 0 TO Matches.Count - 1
				WITH Matches.Item(n)
					res = res + text(serial, .SubMatches(1), hour12) + .SubMatches(3)
				ENDWITH
			NEXT
			RESULT = res
		CASE format = "0/0"
			DIM separator = POS(".", serial)
			DIM g = 0
			IFB separator <> 0 THEN
				DIM keta = LENGTH(serial)
				DIM shift = POWER(10, keta - separator)
				IFB shift >= POWER(10, 15) THEN
					DIM position = 0
					FOR i = 0 TO 14
						IFB serial * POWER(10, i) - serial >= 1 THEN
							position = i
							BREAK
						ENDIF
					NEXT
					tmp = serial * POWER(10, position)
					FOR i = 1 TO 15
						r = (tmp * POWER(10, i)) / serial - (tmp / serial)
						a1 = tmp * POWER(10, i) - tmp
						IF a1 = INT(a1) THEN BREAK 
					NEXT
					DIM frac[] = a1, r
					g = GCD(frac)
					RESULT = (a1/g) + "/" + (r/g)
				ELSE
					DIM molecule = serial * shift	// 分子
					DIM denominator = shift		// 分母
					DIM nums[] = molecule, denominator
					g = GCD(nums)
					molecule = molecule / g
					denominator = denominator / g
					RESULT = molecule + "/" + denominator
				ENDIF
			ELSE
				RESULT = serial + "/1"
			ENDIF
		CASE reTest(format, "(0+)\.?(0+)?") AND UBound(SPLIT(format, ".")) <= 1 
			Matches = reExecute(format, "(0+)\.?(0+)?")
			len1 = LENGTH(Matches.Item(0).SubMatches(0))
			len2 = LENGTH(Matches.Item(0).SubMatches(1))
			DIM arr[] = LENGTH(INT(serial)), len1
			IFB POS(".", format) THEN
				RESULT = REPLACE(FORMAT(serial, CALCARRAY(arr, CALC_MAX) + len2 + 1, len2), " ", "0")
			ELSE
				RESULT = REPLACE(FORMAT(serial, CALCARRAY(arr, CALC_MAX)), " ", "0")
			ENDIF
	SELEND
FEND

//////////////////////////////////////////////////
// 【引数】
//   arrayname : 上限値を求める配列の名前 
//   dimension : 返す次元を示す整数 
// 【戻り値】
//   
//////////////////////////////////////////////////
FUNCTION UBound(arrayname[], dimension = 1)
	RESULT = EVAL("RESIZE(arrayname" + strRepeat("[0]", dimension - 1) + ")")
FEND
使用関数

入力した文字列をUTF8でURLエンコードする

UWSC
PRINT ENCODE(ENCODE(INPUT("エンコードする文字列を入力してください。"), CODE_UTF8), CODE_URL)
使用関数

アラビア数字をローマ数字に変換

UWSC
HASHTBL Roman

Roman[1] = "I"
Roman[2] = "II"
Roman[3] = "III"
Roman[4] = "IV"
Roman[5] = "V"
Roman[6] = "VI"
Roman[7] = "VII"
Roman[8] = "VIII"
Roman[9] = "IX"
Roman[10] = "X"
Roman[40] = "XL"
Roman[50] = "L"
Roman[90] = "XC"
Roman[100] = "C"
Roman[400] = "CD"
Roman[500] = "D"
Roman[900] = "CM"
Roman[1000] = "M"

DIM arr[] = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 40, 50, 90, 100, 400, 500, 900, 1000

DIM num = INPUT("アラビア数字を入力して下さい。")

// 0以下4000以上の数字は無理
IF num <= 0 OR num >= 4000 THEN EXIT

DIM res = ""

n = UBound(arr)
REPEAT
	SELECT TRUE
		CASE num / Roman[n, HASH_KEY] >= 1
			res = res + Roman[n, HASH_VAL]
			num = num - Roman[n, HASH_KEY]
		DEFAULT
			n = n - 1
	SELEND
UNTIL num = 0

PRINT res

//////////////////////////////////////////////////
// 【引数】
//   inputs : 繰り返す文字列 
//   multiplier : inputsを繰り返す回数 
// 【戻り値】
//   
//////////////////////////////////////////////////
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
使用関数

MSGBOXの種別の数値から表示されるボタンを取得

UWSC
HASHTBL type

type[BTN_YES] = "はい"
type[BTN_NO] = "いいえ"
type[BTN_OK] = "OK"
type[BTN_CANCEL] = "キャンセル"
type[BTN_ABORT] = "中止"
type[BTN_RETRY] = "再試行"
type[BTN_IGNORE] = "無視"

DIM num = INPUT("数値を入力してください。")

IF VAL(num) = ERR_VALUE THEN EXIT

PRINT num
PRINT "----------"

FOR n = 0 TO 6
	IF (num AND POWER(2, n)) <> 0 THEN PRINT type[POWER(2, n)]
NEXT

MSGBOX("以下のボタンが表示されます", num)
結果
プレーンテキスト
22
----------
キャンセル
はい
中止

関連記事

MSGBOX関数 (スクリプト関数)
メッセージボックスを表示します。第一引数に表示するメッセージ、第二引数に表示するボタンの種類を指定します。押されたボタンをInteger型で返します。
ChooseColorA(Comdlg32.dll)