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