本ページには広告が含まれています。
数値を表示書式に基づいて変換した文字列を返します。
GETTIMEで取得する時間はシリアル値でないため、uwscToSerial関数 (自作関数)などでシリアル値に変換します。
ExcelのTEXT関数と同じような使い方ができます。
表示形式の書き方によっては無限ループになることがありますのでご注意ください。分数への変換はまだ不具合があります。
- 構文
- String = text( serial, format )
- 引数
- serial 必須
- シリアル値
- format 必須
- フォーマット
- 戻り値
- 数値を表示書式に基づいて変換した文字列
プログラム
解説
- 48-59行目
- 2-7行目
- それぞれの元号の開始日を格納した連想配列。
- 9行目
- シリアル値が「0」となる基準日。GETTIME関数でこの基準日にserialを加算し日時を求め、特殊変数から指定された書式記号に対応する日時を文字列で取得します。
- 11,219行目
- formatを各要素に分解し適用していく。
- 12-15行目
- formatが[ ](角括弧)で囲まれた1文字以上連続するhならば以下の処理を実行。
【表示形式例】[h]、[hh]、[hhh]、…
hの文字数を取得するための正規表現を実行しMatchesコレクションを取得。hour12がTrueならserialの時間部分を12で割った余り、Falseなら時間部分をそのまま返し、hourに代入。hourをhの文字数に合わせてゼロ埋めするため、textを再帰呼び出し。 - 16-19行目
- formatが1文字以上連続するhならば以下の処理を実行。
【表示形式例】h、hh、hhh、…
- 20-22行目
- formatが[ ]で囲まれた1文字以上連続するmならば、以下の処理を実行。
【表示形式例】[m]、[mm]、[mmm]、…
- 23-25行目
- formatがmならば以下の処理を実行。
baseDateにserial日加算した日付を求め、特殊変数から月を取得。G_TIME_MMは数値のため数字に変換。 - 26-28行目
- formatがmmならば以下の処理を実行。
baseDateにserial日加算した日付を求め、特殊変数から月を取得。G_TIME_MM2で有効数字2桁の文字列を返す。 - 29-31行目
- formatがnならば以下の処理を実行。
baseDateにserial日加算した日付を求め、特殊変数から分を取得。 - 32-34行目
- formatがnnならば以下の処理を実行。
baseDateにserial日加算した日付を求め、特殊変数から分を取得。G_TIME_NN2で有効数字2桁の文字列を返す。 - 35-37行目
- formatがsならば以下の処理を実行。
baseDateにserial日加算した日付を求め、特殊変数から秒を取得。 - 38-40行目
- formatがssならば以下の処理を実行。
baseDateにserial日加算した日付を求め、特殊変数から秒を取得。G_TIME_SS2で有効数字2桁の文字列を返す。 - 41-43行目
- formatがyyyyならば以下の処理を実行。
baseDateにserial日加算した日付を求め、特殊変数から年を取得。 - 44-46行目
- formatがyyならば以下の処理を実行。
baseDateにserial日加算した日付を求め、特殊変数から年を取得。その年から下2桁を取得し返す。 - 47-59行目
- formatがeならば以下の処理を実行。
- 60-72行目
- formatがeeならば以下の処理を実行。
- 73-80行目
- formatがgならば以下の処理を実行。
- 81-82行目
- formatがggならば以下の処理を実行。
83行目>>>を実行し指定日の元号を取得し、令和なら「令」、平成なら「平」のように元号の1文字目だけを返す。 - 83-90行目
- formatがgggならば以下の処理を実行。
- 91-92行目
- formatがmmmmmならば以下の処理を実行。
93行目>>>を実行し指定月の英語名を求め、1月ならJanuaryの「J」のように先頭の文字列だけを返す。 - 93-95行目
- formatがmmmmならば以下の処理を実行。23行目>>>で月を数値で求め、1月なら0番目、2月なら1番目のようにmonthの「月-1」番目の要素を返す。
- 96-97行目
- formatがmmmならば以下の処理を実行。
93行目>>>で月の英語名を求め、1月ならJanuaryの「Jan」のように先頭から3文字を返す。 - 98-100行目
- formatがddならば以下の処理を実行。
baseDateにserial日加算した日付を求め、特殊変数から日を取得。G_TIME_DD2で有効数字2桁の文字列を返す。 - 101-103行目
- formatがdならば以下の処理を実行。
serial日加算した日付を求め、特殊変数から日を取得。 - 104-107行目
- formatが3文字以上4文字以下の連続する「a」または「d」ならば以下の処理を実行。
【表示形式例】aaa、aaaa、ddd、dddd
- 108-110行目
- 111-152行目
- 153-162行目
- 163-173行目
- 書式記号を各要素に分割する。書式記号が複数使われている場合は、まず最初にここが実行されます。シリアル値から変換が必要な書式記号とそのまま出力される文字列部分に分解し、serialと書式記号部分をtext関数に再帰呼び出しで渡し文字列を構成していきます。SubMatchesの引数が0・3の部分は時間の「:」や日付の区切りを表す「/」など変換が必要のない文字列で、1は「yyyy」、「dd」など変換が必要な文字列です。
- 174-208行目
- positionに小数点の位置を代入。 既約分数 にするための 最大公約数 を代入するgを宣言。serialの文字数をketaに代入。keta-positionで小数点以下の桁数が求められるので、\(10^{keta-position}\)をshiftに代入。shiftが\(10^{15}\)以上の値の場合は 無限小数 と考え、無限等比級数を使い分数化する手順を行う。
- 182-215行目
循環小数の循環節を見つけるための処理。
例えばserial=\(0.\dot{3}\)のときの結果は以下のようになります。
\[\begin{array}\\\quad&10x&=&3&.&33333\\-\big{)}\quad&x&=&0&.&33333\\\hline \quad&9x&=&3\end{array}\]i serial * POWER(10, i) - serial 桁数(小数点含む) 1 3 1 2 33 2 3 333 3 4 3333 4 5 33333 5 6 333333 6 7 3333333 7 8 33333333 8 9 333333333 9 10 3333333333 10 11 33333333333 11 12 333333333333 12 13 3333333333333 13 14 33333333333333 14 15 333333333333333 15 serial=\(0.\dot{1}2\dot{3}\)のときは以下のようになります。
\[\begin{array}\\\quad&1000x&=&123&.&123123\\-\big{)}\quad&x&=&0&.&123123\\\hline \quad&999x&=&123\end{array}\]i serial * POWER(10, i) - serial 桁数(小数点含む) 1 1.10810810810811 16 2 12.1891891891892 16 3 123 3 4 1231.10810810811 16 5 12312.1891891892 16 6 123123 6 7 1231231.10810811 16 8 12312312.1891892 16 9 123123123 9 10 1231231231.10811 16 11 12312312312.1892 16 12 123123123123 12 13 1231231231231.11 16 14 12312312312312.2 16 15 123123123123123 15 桁数が一番小さい値になるところが循環節をきれいに打ち消し合っているので、これを循環小数の桁数とします。
- 209-218行目
書式記号
数値の書式記号
| 書式記号 | 説明 |
|---|---|
| 0 | 書式設定で指定した0の桁数よりも入力した数値の桁数が少ない場合、0が表示されます。 |
| # | |
| / | 分数を表す。 |
日付の書式記号
年
| 書式記号 | 説明 |
|---|---|
| yy | 西暦の下2桁を表示します。 |
| yyyy | 西暦を4桁で表示します。 |
| e | 年を年号を元に表示します。 |
| ee | 年を年号を元に2桁の数値で表示します。 |
| g | 元号をアルファベットの頭文字(M、T、S、H、R)で表示します。 |
| gg | 元号を漢字の頭文字(明、大、昭、平、令)で表示します。 |
| ggg | 元号を漢字(明治、大正、昭和、平成、令和)で表示します。 |
月
| 書式記号 | 説明 |
|---|---|
| m | 月を表示します。 |
| mm | 1桁の月には0をつけて2桁で表示します。 |
| mmm | 英語の月の頭文字3文字(Jan~Dec)を表示します。 |
| mmmm | 英語の月(January~December)を表示します。 |
| mmmmm | 英語の月の頭文字(J~D)で表示します。 |
日
| 書式記号 | 説明 |
|---|---|
| d | 日にちを表示します。 |
| dd | 1桁の日にちには0をつけて2桁で表示します。 |
曜日
| 書式記号 | 説明 |
|---|---|
| ddd | 英語の曜日の頭文字から3文字(Sun~Sat)を表示します。 |
| dddd | 英語の曜日(Sunday~Saturday)を表示します。 |
| aaa | 漢字で曜日の頭文字(日~土)を表示します。 |
| aaaa | 漢字で曜日(日曜日~土曜日)を表示します。 |
時間の書式記号
| 書式記号 | 説明 |
|---|---|
| h | 時刻(0~23)を表示します。 |
| hh | 1桁の時刻には0を付けて時刻(00~23)を表示します。 |
| n | 分(0~59)を表示します。 |
| nn | 1桁の分は、0を付けて分(00~59)を表示します。 |
| s | 秒(0~59)を表示します。 |
| ss | 1桁の秒は0を付けて秒(00~59)を表示します。 |
| [ ] | 経過時間を表します。例:[m]:ss |
AM/PM
| 書式記号 | 説明 |
|---|---|
| h AM/PM | 12時間表示で時刻の後にAMまたはPMを表示します。 |
| h:nn am/pm | 12時間表示で時刻の後にamまたはpmを表示します。 |
| hh:nn:ss A/P | 12時間表示で時刻の後にAまたはPを表示します。 |
| hh:nn:ss a/p | 12時間表示で時刻の後にaまたはpを表示します。 |
| 24時間 表記 |
日本式 | 英米式 |
|---|---|---|
| 0:00 | 午前0時(午後12時) | AM12:00(AM0:00) |
| 1:00 | 午前1時 | AM1:00 |
| 2:00 | 午前2時 | AM2:00 |
| 3:00 | 午前3時 | AM3:00 |
| 4:00 | 午前4時 | AM4:00 |
| 5:00 | 午前5時 | AM5:00 |
| 6:00 | 午前6時 | AM6:00 |
| 7:00 | 午前7時 | AM7:00 |
| 8:00 | 午前8時 | AM8:00 |
| 9:00 | 午前9時 | AM9:00 |
| 10:00 | 午前10時 | AM10:00 |
| 11:00 | 午前11時 | AM11:00 |
| 12:00 | 午前12時(午後0時) | PM12:00(PM0:00) |
| 13:00 | 午後1時 | PM1:00 |
| 14:00 | 午後2時 | PM2:00 |
| 15:00 | 午後3時 | PM3:00 |
| 16:00 | 午後4時 | PM4:00 |
| 17:00 | 午後5時 | PM5:00 |
| 18:00 | 午後6時 | PM6:00 |
| 19:00 | 午後7時 | PM7:00 |
| 20:00 | 午後8時 | PM8:00 |
| 21:00 | 午後9時 | PM9:00 |
| 22:00 | 午後10時 | PM10:00 |
| 23:00 | 午後11時 | PM11:00 |
文字列の書式記号
| 書式記号 | 説明 |
|---|---|
| @ |
全角
他の書式設定の先頭に記述します。
| 書式記号 | 説明 |
|---|---|
| [DBNum1] | 半角数値を漢数字で表示します。 一二三四五六七八九十百千万億兆 |
| [DBNum2] | 半角数値を漢数字(大字)で表示します。 壱弐参四伍六七八九拾百阡萬億兆 |
| [DBNum3] | 半角数値を全角数字で表示します。 |
| [DBNum4] | 半角数値を半角数字で表示します。 |
分数
| 書式記号 | 説明 |
|---|---|
| 0/0 | 分数表記にします。結果は 既約分数 で返されます。 |
プログラム実行例
表示形式を適用する
- Main
- FUNCTIONS
DIM uwscTime = GETTIME()
DIM array[] = "yyyy/mm/dd(aaa) hh:nn:ss", + _
"ggge年m月d日", + _
"mmmm dd yyyy", + _
"dd mmmm, yyyy", + _
"hh:nn:ss AM/PM", + _
"AM/PMh:n:s", + _
"[DBNum1]0.000", + _
"[DBNum2]0.000", + _
"[DBNum3]0.000"
FOR item IN array
PRINT text(uwscToSerial(uwscTime), item)
NEXT//////////////////////////////////////////////////
// 【引数】
// interval : 加算する時間間隔を表す文字列式(yyyy:年、m:月、d:日、ww:週、h:時、n:分、s:秒)
// num : dateに加算する値。未来は正、過去は負で指定
// date : 時間間隔を加算する日付
// 【戻り値】
// 日時(date)に、指定した単位(interval)の時間(num)を加算して返します
//////////////////////////////////////////////////
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
// 【戻り値】
// date2からdate1を引いた時間間隔を求めます。
//////////////////////////////////////////////////
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月とする
// 【戻り値】
// dateから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
//////////////////////////////////////////////////
// 【引数】
// 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で追加された値で、互換性を保つために重複した値があります。
// 【戻り値】
// typeで指定した種類によって以下の値を返します。 : (0 : 0(日曜)〜6(土曜)、1 : 1(日曜)~7(土曜)、2 : 1(月曜)~7(日曜)、3 : 0(月曜)〜6(日曜)、11 : 1(月曜)~7(日曜)、12 : 1(火曜)~7(月曜)、13 : 1(水曜)~7(火曜)、14 : 1(木曜)~7(水曜)、15 : 1(金曜)~7(木曜)、16 : 1(土曜)~7(金曜)、17 : 1(日曜)~7(土曜))
//////////////////////////////////////////////////
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) + 17 - type) MOD 7) + 1
SELEND
FEND
//////////////////////////////////////////////////
// 【引数】
// serial : シリアル値もしくは時刻文字列
// 【戻り値】
// 時刻から時間を表す0〜23の範囲の値
//////////////////////////////////////////////////
FUNCTION Hour(serial)
IF VARTYPE(serial) = 258 THEN serial = timeValue(serial)
RESULT = INT(serial * 24) MOD 24
FEND
//////////////////////////////////////////////////
// 【引数】
// expr : 評価する式
// truepart : 評価した式がTrueのときに返す値
// falsepart : 評価した式がFalseのときに返す値
// 【戻り値】
// 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のいずれかの形式。
// 【戻り値】
// TRUE : 日付として認識できる、FALSE : 日付として認識できない
//////////////////////////////////////////////////
FUNCTION isDate(date)
TRY
GETTIME(0, date)
RESULT = TRUE
EXCEPT
RESULT = FALSE
ENDTRY
FEND
//////////////////////////////////////////////////
// 【引数】
// 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
//////////////////////////////////////////////////
// 【引数】
// 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を繰り返す回数
// 【戻り値】
// inputsをmultiplier回を繰り返した文字列を返します
//////////////////////////////////////////////////
FUNCTION strRepeat(inputs, multiplier)
DIM res = ""
FOR n = 1 TO multiplier
res = res + inputs
NEXT
RESULT = res
FEND
//////////////////////////////////////////////////
// 【引数】
// 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"
serial = VAL(serial)
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
//////////////////////////////////////////////////
// 【引数】
// str : 時刻文字列。hh:nn:ss AM/PM、hh:nn AM/PM、hh AM/PM、hh:nn:ss、hh:nn、hh時nn分ss秒、hh時nn分のいずれかの形式を指定。
// 【戻り値】
// シリアル値 (例)0…00:00:00、0.5…12:00:00、0.999988425925926…23:59:59
//////////////////////////////////////////////////
FUNCTION timeValue(str)
DIM serial = 0
DIM Matches
DIM pattern = "(\d+)"
DIM hh = "(0?[0-9]|1[0-2])"
DIM ampm = "([AP]M|[ap]m)"
SELECT TRUE
CASE reTest(str, "\b" + hh + ":" + pattern + ":" + pattern + " " + ampm + "\b")
Matches = reExecute(str, "\b" + hh + ":" + pattern + ":" + pattern + " " + ampm + "\b")
WITH Matches.Item(0)
serial = timeValue(.SubMatches(0) + " " + .SubMatches(3)) + VAL(.SubMatches(1)) / 1440 + VAL(.SubMatches(2)) / 86400
ENDWITH
CASE reTest(str, "\b" + hh + ":" + pattern + " " + ampm + "\b")
Matches = reExecute(str, "\b" + hh + ":" + pattern + " " + ampm + "\b")
WITH Matches.Item(0)
serial = timeValue(.SubMatches(0) + " " + .SubMatches(2)) + VAL(.SubMatches(1)) / 1440
ENDWITH
CASE reTest(str, "\b" + hh + " " + ampm + "\b")
Matches = reExecute(str, "\b" + hh + " " + ampm + "\b")
WITH Matches.Item(0)
serial = VAL(.SubMatches(0) MOD 12) + IIF(reTest(.SubMatches(1), "AM|am"), 0, 12)
serial = serial / 24
ENDWITH
CASE reTest(str, "\b" + pattern + ":" + pattern + ":" + pattern + "\b")
Matches = reExecute(str, "\b" + pattern + ":" + pattern + ":" + pattern + "\b")
WITH Matches.Item(0)
serial = VAL(.SubMatches(0)) / 24 + VAL(.SubMatches(1)) / 1440 + VAL(.SubMatches(2)) / 86400
ENDWITH
CASE reTest(str, "\b" + pattern + ":" + pattern + "\b")
Matches = reExecute(str, "\b" + pattern + ":" + pattern + "\b")
WITH Matches.Item(0)
serial = VAL(.SubMatches(0)) / 24 + VAL(.SubMatches(1)) / 1440
ENDWITH
CASE reTest(str, "\b" + pattern + "時" + pattern + "分" + pattern + "秒")
Matches = reExecute(str, "\b" + pattern + "時" + pattern + "分" + pattern + "秒")
WITH Matches.Item(0)
serial = VAL(.SubMatches(0)) / 24 + VAL(.SubMatches(1)) / 1440 + VAL(.SubMatches(2)) / 86400
ENDWITH
CASE reTest(str, "\b" + pattern + "時" + pattern + "分")
Matches = reExecute(str, "\b" + pattern + "時" + pattern + "分")
WITH Matches.Item(0)
serial = VAL(.SubMatches(0)) / 24 + VAL(.SubMatches(1)) / 1440
ENDWITH
DEFAULT
serial = ERR_VALUE
SELEND
RESULT = serial - INT(serial)
FEND
//////////////////////////////////////////////////
// 【引数】
// arrayname : 上限値を求める配列の名前
// dimension : 返す次元を示す整数
// 【戻り値】
// 配列の上限値
//////////////////////////////////////////////////
FUNCTION UBound(arrayname[], dimension = 1)
RESULT = EVAL("RESIZE(arrayname" + strRepeat("[0]", dimension - 1) + ")")
FEND
//////////////////////////////////////////////////
// 【引数】
// uwscTime : UWSC時間
// 【戻り値】
// シリアル値
//////////////////////////////////////////////////
FUNCTION uwscToSerial(uwscTime)
uwscDate = uwscTime / 86400
RESULT = 36526 + uwscDate
FEND結果
使用関数
写真の撮影日時毎に枚数を取得
選択したフォルダにある写真の撮影日時を取得・カウントします。
- Main
- FUNCTIONS
結果
使用関数
Windowsの稼働時間を取得
Windowsシステムの起動時間から稼働時間を求めます。
結果はd:hh:nn:ssの形式で出力されます。
- Main
- FUNCTIONS
結果
使用関数
UWSCの実行日時をINIファイルに書き込み・読み込み
- Main
- FUNCTIONS
結果
使用関数
yyyy/mm/dd 形式の日付を mm/dd/yyyy 形式に変換
- Main
- FUNCTIONS
PRINT text(dateValue("2022/07/14"), "mm/dd/yyyy")結果
使用関数
メールの受信を検知(Outlook)
メールを受信したら日時を出力する。日時はメールの受信日時ではなくOutlookが受信を検知した日時。
- Main
- FUNCTIONS
使用関数
月齢計算
- Main
- FUNCTIONS
結果
使用関数
都道府県フォルダを作成
名前順にしたとき都道府県コード順になるよう、先頭には01_北海道のように2桁で都道府県コードを記載。
都道府県コードはJIS X 0401都道府県コード - CyberLibrarianを参照。
- Main
- FUNCTIONS
使用関数
ビットマップ画像を補色に変換(24ビット)
- Main
- FUNCTIONS
使用関数
今年何パーセント終わった?
現在時刻時点で今年の何%が終わったのかをリアルタイムで確認できます。現在時刻、経過割合、残り日数を吹き出しに表示します。更新間隔は1秒です。
- Main
- FUNCTIONS
結果
使用関数
「クロネコヤマトの荷物お問い合わせシステム」より荷物の詳細情報を取得しcsv形式でファイルに保存
- Main
- FUNCTIONS
使用関数
東京オリンピックまでのカウントダウンタイマーを表示
- Main
- FUNCTIONS
使用関数
Windowsの稼働時間を取得(コマンドプロンプト)
- Main
- FUNCTIONS
結果
使用関数
公開日:
更新日:
