本ページには広告が含まれています。
目次 [非表示]
Excelを終了します。
- 構文
- Boolean = XLCLOSE( Excel, ファイル名 )
- 引数
- Excel (Object)必須
- Excel(またはOOoのCalc)のCOMオブジェクト
- ファイル名 (String)省略可
- 保存するファイル名
ファイル名が付いている場合は省略可
TRUEを指定した場合は保存せずに終了
- 戻り値
- TRUE
- 正常
- FALSE
- 処理不能
自作のXLCLOSE関数
Pro版でしか使えないXLCLOSE関数をFree版でも使えるように自作しました。
FUNCTION XLCLOSE(Excel, filename = EMPTY) DIM flg = TRUE IFB filename <> EMPTY AND filename <> TRUE THEN TRY Excel.ActiveWorkbook.SaveAs(filename) EXCEPT flg = FALSE ENDTRY ENDIF Excel.Application.DisplayAlerts = FALSE Excel.Quit RESULT = flg FEND
使い方
保存して終了
ブックを保存してExcelを終了します。新規ブックで変更が加えられている場合、'ブック名' への変更を保存しますか?というダイアログが表示されます。変更が加えられていない場合は、保存せずに終了します。
XLCLOSE(Excel)
保存せずに終了
ブックを保存せずにExcelを終了します。
XLCLOSE(Excel, TRUE)
プログラム実行例
Excelを起動
DIM Excel = XLOPEN() //XLCLOSE(Excel, TRUE)
使用関数
LibreOffice Calcを起動
DIM Excel = XLOPEN(, XL_OOOC) //XLCLOSE(Excel, TRUE)
使用関数
Excelでセルに値を代入
DIM Excel = XLOPEN() FOR row = 1 TO 5 FOR col = 1 TO 5 XLSETDATA(Excel, row + ", " + col, row, col) NEXT NEXT //XLCLOSE(Excel, TRUE)
使用関数
セルに配列の値を代入
配列の場合、セル位置は必須。
DIM Excel = XLOPEN() DIM arr[2][1] = 12, 45, 78, 2417, 51, 478 XLSETDATA(Excel, arr, "A1") //XLCLOSE(Excel, TRUE)
使用関数
指定したシートをアクティブにする
DIM Excel = XLOPEN() XLACTIVATE(Excel, "Sheet2") //XLCLOSE(Excel, TRUE)
使用関数
指定したセルから値を取得します
DIM Excel = XLOPEN() XLSETDATA(Excel, RANDOM(), "A1") PRINT XLGETDATA(Excel, "A1") //XLCLOSE(Excel, TRUE)
使用関数
楽天銀行定期預金の金利をExcelに保存
DIM IE = CREATEOLEOBJ("InternetExplorer.Application") IE.Visible = TRUE IE.Navigate("https://rbweb.rakuten-bank.co.jp/REF/main/fis/BasicTimeDepositInterestRate.html?PageID=BasicTimeDepositInterestRatePresentationLogicBean") BusyWait(IE) DIM elements = IE.document.getElementsByTagName("table") DIM element = elements.Item(0) DIM arr[-1][-1] getTableData(element, arr) IE.Quit DIM Excel = XLOPEN() XLSETDATA(Excel, arr, "A1") DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject") DIM path = uniqueFilename(FSO.BuildPath(GET_CUR_DIR, "楽天銀行定期預金金利.xlsx")) XLCLOSE(Excel, path) ////////////////////////////////////////////////// // 【引数】 // 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 : 配列 // 【戻り値】 // needleが見つかった場合に配列のキー ////////////////////////////////////////////////// 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 ////////////////////////////////////////////////// // 【引数】 // 文字列 or 数値 : 取得したい<a href="https://uwsc.jp/com/ie/" >InternetExplorer オブジェクト</a>のタイトル・URLもしくは数値を指定 // 完全一致フラグ : (TRUE : 文字列が完全一致したものを取得、FALSE : 文字列の一部を含むものを取得) // 【戻り値】 // 条件に一致する<a href="https://uwsc.jp/com/ie" >InternetExplorer</a> ////////////////////////////////////////////////// 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 ////////////////////////////////////////////////// // 【引数】 // table : tableエレメント // arr : 取得したデータを格納する配列(参照引数) // 【戻り値】 // ////////////////////////////////////////////////// PROCEDURE getTableData(table, Var arr[][]) rowMax = table.rows.length - 1 colMax = 0 FOR row = 0 TO table.rows.length - 1 IFB table.rows(row).cells.length - 1 > colMax THEN colMax = table.rows(row).cells.length - 1 ENDIF NEXT DIM arr[rowMax][colMax] FOR row = 0 TO table.rows.length - 1 FOR col = 0 TO table.rows(row).cells.length - 1 n = 0 WHILE arr[row][col + n] <> "" n = n + 1 WEND arr[row][col + n] = table.rows(row).cells(col).innerText IFB table.rows(row).cells(col).rowSpan > 1 AND table.rows(row).cells(col).colSpan > 1 THEN rmax = table.rows(row).cells(col).rowSpan - 1 cmax = table.rows(row).cells(col).colSpan - 1 FOR r = 1 TO rmax FOR c = 1 TO cmax arr[row + r][col + c] = "←" NEXT NEXT ENDIF IFB table.rows(row).cells(col).rowSpan > 1 THEN n = table.rows(row).cells(col).rowSpan - 1 WHILE n arr[row + n][col] = "↑" n = n - 1 WEND ENDIF IFB table.rows(row).cells(col).colSpan > 1 THEN n = table.rows(row).cells(col).colSpan - 1 WHILE n arr[row][col + n] = "←" n = n - 1 WEND ENDIF NEXT NEXT 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 ////////////////////////////////////////////////// // 【引数】 // 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 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 ////////////////////////////////////////////////// // 【引数】 // arrayname : 上限値を求める配列の名前 // dimension : 返す次元を示す整数 // 【戻り値】 // 配列の上限値 ////////////////////////////////////////////////// FUNCTION UBound(arrayname[], dimension = 1) RESULT = EVAL("RESIZE(arrayname" + strRepeat("[0]", dimension - 1) + ")") FEND ////////////////////////////////////////////////// // 【引数】 // path : ファイルのパス // 【戻り値】 // 重複しないファイル名 ////////////////////////////////////////////////// FUNCTION uniqueFilename(path) DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject") IFB FSO.FileExists(path) THEN DIM fol = FSO.GetParentFolderName(path) DIM filename = FSO.GetBaseName(path) DIM extension = FSO.GetExtensionName(path) DIM i = 2 WHILE FSO.FileExists(FSO.BuildPath(fol, filename + " (" + i + ")." + extension)) i = i + 1 WEND RESULT = FSO.BuildPath(fol, filename + " (" + i + ")." + extension) ELSE RESULT = path ENDIF FEND
使用関数