App Script Basic
┌──┐
│目次│
├──┘
│☆VBA-EXCEL- vba
│ ◆マクロの記録 vrec
│ ◆Visual Basic Editor veditor
│ ◆マクロの呼び出し vcall
│ ◆VBE vbe
│ ◆PERSONAL.XLS vpersonal
│ ◆入力 vinput
│ ◆MsgBox vmsgbox
│ ◆セルの操作 vcell
│ ◆EXCEL95ダイアローグ vdiag
│ ◆文法 vgra
│ ◆変数宣言 vvar
│ ◆制御構文 vcont
│ ◆エラー回復 verror
│☆OpenOffice.org Basic o3b
│ ◆サブルーチン osub
│ ◆関数 ofunc
│ ◆変数 oval
│ ◆定数 oconst
│ ◆モジュール omod
│ ◆ライブラリ olib
│ ◆ダイアローグモジュール odiag
│ ◆Twip(トゥウィップ) otwip
│ ◆組み込み関数 oembfunc
│ ◆演算子 oopr
│ ◆実行制御ステートメント ocont
│ ◆オブジェクトの操作 oobj
│ ◆コメント orem
│ ◆CalcでのOOOBasicの利用 ouse
◆マクロの記録
│ ツール⇒マクロ⇒新しいマクロの記録⇒(マクロ名は自由に設定可、説明も何でも可)
│ ⇒OKボタンを押す⇒マクロの記録が始まる⇒覚えさせたいことを実際に操作する
│ ⇒終われば⇒ツール⇒マクロ⇒記録の終了
◆Visual Basic Editor
│ ※マクロの記録先を作業中のブックにした場合、標準モジュールの中の「Module1」に記録されている。
◆マクロの呼び出し
│ ①ツール→マクロ→マクロ
│ ②Alt+F8
│ ③VBAツールバーより
※マクロを呼び出すボタンの作成
│ ①VBAツールバーよりコントロールツールボックスを呼び出しボタンなどを配置する。
│ ②配置したボタンを右クリックして「コードの表示」。コードを記述する。
※マクロを呼び出すアイコンの作成
│ ①ツール→ユーザー設定で登録するツールバーを選ぶか、
│ 新たに作りコマンドタブからマクロを選んでマクロを登録する。
◆VBE
│ ①Help
│ VBEのコード上でキーワードを選択し、F1キーによってHELPを呼び出すことができる。
│ ②イミーディエイトウインドウ
│ ^Gでイミーディエイトウインドウを表示する。
│ ⇒このウインドウはVBAのコマンドを即実行してみれる
◆PERSONAL.XLS
│ 自動的に開かれるファイル
│ ユーザ固有でファイルに共用のマクロ定義などを入れて使う。
Sub セルに値を入れる() Range("A1").Value=1 Range("A2").Value=2 End Sub
②インプットボックス
Sub インプットボックス() Dim x As String Dim y As Variant x = Application.InputBox("座標を入力", "座標指定", "座標を入力", 100, 100, HelpFile, abc, 2) y = Application.InputBox(prompt:="数値を入力", Title:="数値入力", Type:=1) Range(x) = y End Sub
xの式:フル入力。(HelpFile・abcは、仮入力)
フル入力の場合は引数の順番を間違えるとエラーになる。
yの式:必要な引数だけ入力した場合
「:=」:必要な引数に情報を入力する場合に使用。順番は関係なし。
⇒エラー処理まで行う場合
Sub test() Dim x As String Dim y As Variant On Error Resume Next x = "" x = Application.InputBox(prompt:="座標を入力", Title:="座標指定", Type:=8).Address If x = "" Then GoTo TheRoutine 'If x = "False" Then GoTo TheRoutine y = Application.InputBox(prompt:="数値を入力", Title:="数値入力", Type:=1) If y = "False" Then GoTo TheRoutine Range(x) = y MsgBox x & "座標の値は" & y TheRoutine: End Sub
MsgBox(prompt[, buttons] [, title] [, helpfile, context])
①prompt
複数行を指定する場合は、キャリッジ リターン (Chr(13))、ライン フィード (Chr(10))、またはキャリッジ リターンとライン フィードの組み合わせ (Chr(13) & Chr(10)) を改行する位置に挿入する。
②buttons
以下のグループからひとつ選び、値の和を設定する。
vbOKOnly
vbOKCancel
vbAbortRetryIgnore
vbYesNoCancel
vbYesNo
vbRetryCancel
—
vbCritical
vbQuestion
vbExclammation
vbInformation
—
vbDefaultButton1
vbDefaultButton2
vbDefaultButton3
vbDefaultButton4
—
vbApplicationModal
vbSystemModal
—
vbMsgBoxHelpButton
vbMsgBoxSetForeground
vbMsgBoxRight
vbMsgBoxRtlReading
③戻り値
vbOK 1 [OK]
vbCancel 2 [キャンセル]
vbAbort 3 [中止]
vbRetry 4 [再試行]
vbIgnore 5 [無視]
vbYes 6 [はい]
vbNo 7 [いいえ]
◆セルの操作
※Cells表記とRange表記がある。
│ Cells(3,2).select
│ Range(“B3”).Select
→どちらもB3セルを選択する
→ForループなどではCells表記の方が扱いやすい。
①セルの値の参照
│ Cells(1,1).Value
│ Worksheets(“Sheet2”).Cells(1,1).Value
②セルへの値の代入
│ Cells(1,1).Value = 1
③選択されているセル全てに同様な操作を施す
例)
For Each c In ActiveWindow.RangeSelection.Cells If Abs(c.Value) < a_lim Then c.Value = 0 Next Cells(i,1).Value = xxx Worksheets("Page1").Cells(i, j).Value ActiveCell.FormulaR1C1 = 1 ActiveCell.FormulaR1C1 = "=TIMEVALUE(RC[-1])" ActiveCell.Offset(0,-4).Range("A1").Value=xxx For Each c In ActiveCell.CurrentRegion.Cells C.Value = xxx Next For Each myObject In Range("MYC") myObject.Value = xxx Next
◆EXCEL95ダイアローグ
│ シートタブを右クリックして挿入
│ EXCEL95ダイアローグを選択することでダイアローグシートが作られる。
①ドロップBOX
コントロールの書式設定よりコントロールの入力範囲を決定する。
│ 例)Sheet2のA1からA2にメニューItemリストをおく
│ Sheet2!$A$1:$A$4
※呼び出し
│ If DialogSheets(“Dialog1”).Show Then
│ a = DialogSheets(“Dialog1”.DropDowns(“ドロップ 4”).ListIndex
│ End If
「ドロップ 4」はダイアローグシートの名前BOXで定義されている名前。ListIndexにより、何番目のItemが選択されたかがaに代入される。
①継続行
文末に_を入力。
Dim 変数名 As 変数型
①バイト型 (Byte)
│ 0 ~ 255
②ブール型 (Boolean)(2バイト)
│ 真 (True) または偽 (False)
③整数型 (Integer)
│ -32,768 ~ 32,767
④長整数型 (Long)
│ -2,147,483,648 ~ 2,147,483,647
⑤単精度浮動小数点数型 (Single)
│ -3.402823E38 ~ -1.401298E-45 (負の値)。
│ 1.401298E-45 ~ 3.402823E38 (正の値)。
⑥倍精度浮動小数点数型 (Double)
│ -1.79769313486231E308 ~ -4.94065645841247E-324 (負の値)。
│ 4.94065645841247E-324 ~ 1.79769313486232E308 (正の値)。
⑦通貨型 (Currency)
│ -922,337,203,685,477.5808 ~ 922,337,203,685,477.5807
⑧10 進型 (Decimal)
│ -79,228,162,514,264,337,593,543,950,335 ~ 79,228,162,514,264,337,593,543,950,335
│ 小数点以下 28 桁の数値の場合、-7.9228162514264337593543950335 ~ 7.9228162514264337593543950335 の範囲の値
│ 絶対値の最小値は 0 を除いた場合、0.0000000000000000000000000001
⑨日付型 (Date)
│ 西暦 100 年 1 月 1 日~西暦 9999 年 12 月 31 日
⑩オブジェクト型 (Object)
│ オブジェクトを参照するデータ型
⑪文字列型 (String) (可変長)
│ 最大2GB
⑫文字列型 (固定長)
│ 1 ~ 2GB
⑬バリアント型 (Variant)
│ 倍精度浮動小数点数型もしくは可変長の文字列型
⑭ユーザー定義型
│ それぞれの要素の範囲はそのデータ型の範囲と同じ。
①if
If condition1 Then 「実行1」 ElseIf condition2 Then 「実行2」 Else 「実行n」 End If
①On Error GoTo line
│ エラーが発生したら、line: の後の命令を実行。
②On Error Resume Next
│ 実行時エラーが発生してもプログラムを中断しない
│ エラーが発生したステートメントの次のステートメントから実行
③On Error GoTo 0
│ 現在のプロシージャに含まれる使用可能なエラー処理ルーチンを無効化
☆OpenOffice.org Basic
コードは、サブルーチンおよび関数からなる。
◆サブルーチン
│ サブルーチンにはパラメータとして引数を渡せる
│ 呼び出し元のサブルーチンや関数に戻り値を返せない。
│ ⇒関数は戻り値を戻せる
_◇サブルーチン定義
SUB SubName(Parameter1 As Type, Parameter2 As Type,...) Program code END SUB
_◇呼び出し
SubName(Value1, Value2,…)
※完全修飾名
│ Library. Module. Macro()
※引数は通常参照渡し
※値渡しにするためには、「ByVal」キーワードをパラメータの直前に指定。
│ SubName(ByVal Parameter)
◆関数
│ 基本的な機能はサブルーチンと同じだが戻り値を返せる
_◇関数定義
FUNCTION FunctionName(Parameter1 As Type, Parameter2 As Type,...)As Type Program code FunctionName=Result End Function
_◇呼び出し
Variable=FunctionName(Parameter1, Parameter2,…)
_◇大域変数
│ モジュール内のすべてのサブルーチンや関数より前に記述する
※スコープ
DIM GLOBAL VarName As TYPENAME
│ OpenOffice.org セッションの終了時まで有効
DIM PUBLIC VarName As TYPENAME
│ すべてのモジュールで有効
DIM PRIVATE VarName As TYPENAME
│ 該当モジュールの内部だけで有効
DIM VarName As TYPENAME
│ 該当モジュールの内部だけで有効
_◇局所変数
│ 個々のサブルーチンや関数の中で宣言した変数は、該当するサブルーチンや関数の内部でのみ使用できる
※スコープ
DIM STATIC VarName As TYPENAME
│ ローカルだがスタティックな変数
_◇命名規則
│ 最大255文字。英文字先頭英数字とアンダースコア。
│ 大文字小文字の区別なし。
│ []で囲うことでのみスペースキャラクタを変数名に含められる。
_◇変数宣言
│ Dimステートメント。型宣言が省略された場合はデフォルトで単精度型。
Dim a As String
Dim b As Integer
Dim c As Boolean
_◇変数型
①数値
│ 整数
│ 変数名% もしくは as Integer. 16bit.
│ ロング整数
│ 変数名& もしくは as Long. 32bit.
│ 単精度
│ 変数名! もしくは as Single. 32bit.
│ 倍精度
│ 変数名# もしくは as Double. 64bit.
│ 通貨
│ 変数名@ もしくは as Currency. 64bit. 整数15,小数4の固定小数
②文字列
│ 変数名$ もしくは as String 最大64KバイトのUnicode文字列
③ブール型
│ as Boolean
│ TRUE, FALSE(0)
│ ※0はFALSE,他はTRUE
④オブジェクト型
│ テーブルやドキュメントなど、各種のオプジェクト
_◇配列
│ Dim 配列名(最大インデックス)
│ ※インデックスは0から始まるので、最大インデックス+1個確保される。
│ Dim 配列名(最小インデックス to 最大インデックス)
│ ※この形式の場合、負のインデックスも使える。
◆モジュール
│ SUB や FUNCTION を個別にグループ化したもの。
│ 変数宣言部も含む。最大64KBまで。
│ ※モジュールを新規作成すると、自動的に「Main」という名前のプロシージャが作成される。
◆ライブラリ
│ モジュールを分類して管理するためのツール。
│ ドキュメントやテンプレートに添付できる。
│ 1ライブラリには最大16000モジュールを格納できる。
_◇ライブラリを追加するオブジェクト
①soffice
│ ライブラリの登録先はOpenOffice.orgアプリケーションとなり全てのドキュメントで利用できる。
②ドキュメント
│ 単独のドキュメント内でのみ使用できる。
※デフォルトライブラリ。。。Standard
◆ダイアローグモジュール
│ 1つのダイアログボックスの構造、プロパティ、イベントを、単一のモジュールとして格納したもの。
◆Twip(トゥウィップ)
│ 画面上の表示要素のサイズと位置を指定するための単位。
│ 1/1440 インチ、1/20 ポイント、1 センチは約 567 twip。
_◇表示関数
│ MsgBox
│ Print
│ ダイアログBOXを作り、その中にプリントする。
│ ;でバッファし、;の無いプリント文で一気に表示する。
_◇ファイル
│ Open
│ Close
│ FreeFile
│ Reset
_◇日付時刻関数
_◇エラー処理関数
_◇数値関数
_◇変換関数
_◇文字列関数
_◇環境、外部アプリ制御など
_◇論理
│ And
│ Eqv
│ Imp
│ Not
│ Or
│ Xor
_◇算術
│ -
│ *
│ +
│ /
│ ^ べき乗
│ Mod
_◇比較演算子
│ =
│ <
│ >
│ <=
│ >=
│ <>
_◇If
If condition=true Then Statement block [ElseIf condition=true Then] Statement block [Else] Statement block End If
_◇select
Select Case condition Case expression Statement Block [Case expression2 Statement Block] [Case Else] Statement Block End Select
_◇IIf
IIf (Expression, ExpressionTrue, ExpressionFalse)
│ 評価論理値に基づいて、選択肢の 1 つを結果として返す
_◇Doループ
①
Do [{While | Until} condition = True] ステートメントブロック [Exit Do] ステートメントブロック Loop
②
Do ステートメントブロック [Exit Do] ステートメントブロック Loop [{While | Until} condition = True]
_◇Forループ
For counter=start To end [Step step] ステートメントブロック [Exit For] ステートメントブロック Next [counter]
_◇Whileループ
While Condition [Statement] Wend
│ ※WhileはExitできず、Gotoもエラーを引き起こす可能性ある
_◇Gosub
│ GoSubは、ラベルで指定するローカルサブルーチンを、サブルーチンや関数内で呼び出す。
ラベル: ステートメントブロック return
_◇GoTo
│ ブロック内でラベルにジャンプする。
_◇On … GoSub, On .. Goto
ブロック内で、数値によりラベルに分岐する。数値0なら実行されず、数値1から255で各ラベル。
_◇Call
│ サブルーチン、関数も呼び出せるが、Declare宣言されたDLL内のルーチンも呼び出せる。
_◇Stop
│ プログラムの実行を中止する
_◇デフォルトオブジェクト
With Object Statement block End With
│ ブロック内で明示されないオブジェクトは、With宣言されたオブジェクトであるとみなす。
_◇関数としての呼び出し
│ Basic-IDE で Function VOL(a, b, c) として定義した関数は、
│ セル内で =VOL(a; b; c) として他の組み込み関数と同じ方法で使用できる。
_◇マクロとしての呼び出し
_◇Sample: Cellの参照、書き換え
Sub Main Dim Doc As Object Dim Sheet As Object Dim CellRange As Object Dim Cell As Object Dim Dat As String Doc = StarDesktop.CurrentComponent Sheet = Doc.Sheets.getByName("TEMP") CellRange = Sheet.getCellRangeByName("A1:D4") Cell = CellRange.GetCellByPosition(0, 0) Dat = Cell.getFormula() Cell.setValue(1.234567) Print Dat End Sub
※セルの参照
│ =表.A1
※絶対参照は$がつく
※相対参照、絶対参照の切り替えキー。。。Shift+F4
_◇カーソル移動、CELL入力
sub Main enterCell("AHO") MD(2) MR(2) end sub sub enterCell(a as String) rem ----------------------- rem define variables dim document as object dim dispatcher as object rem ----------------------- rem get access to the document document = ThisComponent.CurrentController.Frame dispatcher = createUnoService("com.sun.star.frame.DispatchHelper") rem ----------------------- dim args1(0) as new com.sun.star.beans.PropertyValueargs1(0).Name = "StringName" args1(0).Value = a dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args1()) rem ----------------------- dispatcher.executeDispatch(document, ".uno:JumpToNextCell", "", 0, Array()) end sub sub MD(a as Integer) rem ----------------------- rem define variables dim document as object dim dispatcher as object rem ----------------------- rem get access to the document document = ThisComponent.CurrentController.Frame dispatcher = createUnoService("com.sun.star.frame.DispatchHelper") rem ----------------------- dim args1(1) as new com.sun.star.beans.PropertyValueargs1(0).Name = "By" args1(0).Value = a args1(1).Name = "Sel" args1(1).Value = false dispatcher.executeDispatch(document, ".uno:GoDown", "", 0, args1()) end sub sub MR(a as Integer) rem ----------------------- rem define variables dim document as object dim dispatcher as object rem ----------------------- rem get access to the document document = ThisComponent.CurrentController.Frame dispatcher = createUnoService("com.sun.star.frame.DispatchHelper") rem ----------------------- dim args1(1) as new com.sun.star.beans.PropertyValueargs1(0).Name = "By" args1(0).Value = a args1(1).Name = "Sel" args1(1).Value = false dispatcher.executeDispatch(document, ".uno:GoRight", "", 0, args1()) end sub