Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
LibreOfficeBASIC概要まとめ
===============================================================================================
LibreOffice BASIC 要約
2011.08.06 Ogaaaan
===============================================================================================
■構造
【セクション】
サブルーチン
Sub...End Sub
※メインルーチンは Sub Main...End Sub が自動で生成される
関数
Function...End Function
【スコープ】
大域変数(グローバル変数)
すべての関数、サブルーチンより前に宣言しておく
局所変数(ローカル変数)
関数、サブルーチン内での宣言で使用可能。
大域変数と同名の場合局所変数が優先される
【ファイル】
モジュール
個別にファイルに保存されたサブルーチン、関数など
1つのモジュールには64KBまでしか記述ができない
ライブラリ
複数のモジュールをまとめたもの
1つのライブラリには16,000個のモジュールを収めることが可能
ダイアログ
1つのダイアログの構造、各要素のプロパティ、Subルーチンに
割り当てるイベントなどを1つのモジュールとしたもので、
正確にはダイアログモジュールと呼ばれる
※サブルーチン、関数、モジュール、ライブラリは、
ダイアログマクロを使ってファイル間でコピーや移動が可能
■変数
【命名】
・大文字小文字何れかのアルファベットで始まる必要がある
・記号はアンダースコアのみ可能
・スペース使用可能(大括弧[と]で囲う必要がある)
[My Number]=12
【宣言】
明示的に宣言する必要はないがDIMで宣言することが可能
Dim a$
Dim a As String
文字列aを宣言
Dim a$, b As Integer
文字列aを宣言
整数bを宣言
Dim c As Boolean
論理値cを宣言
複数の宣言を1行で行うことができる。
Dim MyVal1 As Integer, MyVal2 As Integer
MyVal1を整数型、MyVal2も整数型となる
Dim MyVal1, MyVal2
MyVal1、MyVal2ともにバリアント型となる
Dim MyVal1, MyVal2 As Integer
MyVal1をバリアント型、MyVal2を整数型となる
初期値として以下の値が代入させる
数値:0
日付:0
文字列:null
各モジュールの先頭で以下のステートメントを記述することにより、
明示的に変数を宣言しない場合にエラーを出すことが可能。
Option Explicit
【型クラス】
以下の4つの型クラスが存在する
・数値
・文字列
・ブール
・オブジェクト
以下の型が使用可能
整数
-32768〜32767
DIM a%
DIM a As Integer
ロング整数
-2147483648〜2147483647
DIM a&
DIM a As Long
10進数
正の数、負の数、0、29桁まで
単精度
3.402823x10E38 〜 1.401298x10E-45
DIM a!
DIM a As Single
倍精度
1.79769313486232x10E308 〜 4.94065645841247x10E-324
DIM a#
DIM a As Double
通貨
-922337203685477.5808 〜 +922337203685477.5807
DIM a@
DIM a As Currency
文字列
〜65535文字(Unicode値として保存)
DIM a$
DIM a As String
ブール
TRUE、FALSE。0はFALSE。
DIM a As Boolean
日付
日付と時刻を代入化。
DIM a As Date
Dateserial、Datevalue、
Timeserial、Timevalueなどで内部変数として保管。
Day、Month、Year、
Hour、Minute、Secondで内部変数から取り出す。
内部変数とすることで比較などが容易にできるようになる
■配列
多次元配列が可能。
基本的に数値によるインデックスを使用。
※配列は必ず宣言する必要がある。
DIM text$(20)
0〜20の21個の要素が生成
DIM text$(5, 4)
0〜5の6個、0〜4の5個、つまり5x6の30個の要素が生成
DIM text$(5 to 25)
5〜25までの21個の要素が生成
DIM text$(-15 to 5)
-15〜5まで、0を含めて21個の要素が生成
※配列オブジェクトを使用する場合
MyArr = Array(10, 20, 30, 40)
の様に宣言が可能
■定数
全プログラム内で1度だけ宣言することが可能。
CONST FAX=0.05
■型参照
以下は無効
DIM a$
a="TestString"
以下は有効
DIM a$
a$="TestString"
※型宣言されている場合は型の再定義は不可
■型キャスト
CStr(Var)
任意の型のデータを文字列に変換
CInt(Var)
任意の型のデータを整数値に変換
CLng(Var)
任意の型のデータをロング整数値に変換
CSng(Var)
任意の型のデータを単精度値に変換
CDbl(Var)
任意の型のデータを倍精度値に変換
CBool(Var)
任意の型のデータをブール値に変換
CDate(Var)
任意の型のデータを日付データに変換
A = CStr(B + C)
整数型のBとCを足した結果を文字列としてAに代入
強制的に型キャストを行う場合、
OPTION EXPLICIT
コマンドを使用する。
※モジュールの1行目に記載する必要がある
※配列を使用する場合に必要になるケースが多い
■書式
【折り返し】
長い行は折り返せる。
その場合行末にアンダースコアを使用する。
TheUltimateStatus = MyFavoritesArtists + MyFavoritesMusics _
+ MyFavoritesMovies + MyFavoritesGames _
+ MyFamily
※アンダースコアは必ず行末である必要がある。
【複数ステートメント】
コロンで区切り、複数のステートメントを1行に記述することが可能。
a = 1 : a = a + 1 : a = a - 1
【コメント】
シングルクオート(アポストロフィ)かREMで、その行がコメントアウトされる
' This is test
REM This is test
■サブルーチン
定義
Sub SubName(param1 As Type, Pram2 As Type ...)
...
End Sub
呼び出し
SubName(val, val2 ...)
※完全修飾も可能
Library.Module.SubName()
■関数
【定義】
Function FuncName(param1 As Type, Pram2 As Type ...) As Type
...
End Function
【呼び出し】
value = FuncName(val1, val2 ...)
※完全修飾も可能
Library.Module.FuncName()
【戻り値の型】
Function FuncName(Keyword As String) as Integer
などとした場合、関数FuncNameはInteger型となるので、
Result = FuncName()を実行した場合、
ResultはIntergerであることが期待される。
■値の渡し方
【参照渡し】
指定がない場合はこの参照渡しになる
Result = FuncName(val1)
【値渡し】
ByValキーワードを変数の前に付与
Result = FuncName(ByVal val1)
値渡しなのでval1が書き換えられることはない
■大域変数と局所変数
【グローバル変数】
全セッションで使用可能
GLOBAL a As Type
【パブリック変数】
全モジュールで使用可能
PUBLIC a As Type
【プライベート変数】
該当モジュールの内部のみ使用可能
PRIVATE a As Type
DIM a As Type
【スタティック変数】
サブルーチンや関数が終了しても値を維持する
次のサブルーチン、関数が呼ばれると無効となる
STATIC a As Type
■演算子
【算術】
+ 足し算
- 引き算
* 掛け算
/ 割り算
\ 整数による割り算(結果を丸める)
^ 指数演算
MOD 割り算の余り
【論理】
AND 論理積
OR 論理和
XOR 排他的論理和
NOT 論理否定
EQV 等価性検査
IMP 論理包含
【比較】
= 等しい
<> 等しくない
> 左辺が右辺より大きい
>= 左辺が右辺以上
< 右辺が左辺より大きい
<= 右辺が左辺以上
■条件分岐処理
【IF】
書式 If...Then...Else...End If
Dim A As Integer : A = 1
If A > 1 Then
MsgBox "Aは1より大きい"
Else
MsgBox "Aは1以下"
End If
※Aが1なので、"Aは1以下"と表示される
Dim A As Integer : A = 1
If A = 0 Then
B = 0
ElseIf A < 3 Then
B = 1
Else
B = 2
End If
※Aが1なのでBは1となる
【Select】
書式 Select...Case...End Select
Dim MyAnswer As Integer : MyAnswer = 3
Select Case MyAnswer
Case 1:
MsgBox "1と答えました"
Case 2:
MsgBox "2と答えました"
Case 3:
MsgBox "3と答えました"
End Select
※MyAnswerが3なので"3と答えました"と表示される
Dim A As Integer : A = 3
Select Case A
Case 1 To 5
MsgBox "1〜5です"
Case 6, 7, 8
MsgBox "6か7か8です"
Case A>8 And A<11
MsgBox "8より大きく11より小さいです"
Case Else
MsgBox "値が不明です"
End Select
※Case式に条件判定や比較演算子が使える
■反復処理
【For】
書式 For I=1 To 10 ... Next I
Dim I As Integer
For I=1 To 10
MsgBox I
Next I
※1から10までをMsgBoxで表示
Dim I As Single
For I=1 To 10 Step 0.5
MsgBox I
Next I
※1から10までを0.5刻みで表示
※Exit Forでループを抜け出せる
【For Each】
書式 For Each i In a() ... Next i
' 配列オブジェクト生成
MyArr = Array(10, 20, 30)
For Each I In MyArr
MsgBox I
Next I
※10、20、30と表示
【Do Loop】
書式 Do While ... Loop
Do Until ... Loop
Do ... Loop While
Do ... Loop Until
条件がtrueの場合に処理を実行してループ
Dim a As Integer : a = 10
Do While a > 5
MsgBox a
a = a - 1
Loop
※10から6まで表示
条件がfalseの場合に処理を実行してループ
Dim a As Integer : a = 10
Do Until a < 5
MsgBox a
a = a - 1
Loop
※10から5まで表示
処理を実行したあと条件がtrueならループ
Dim a As Integer : a = 10
Do
MsgBox a
a = a - 1
Loop While a > 5
※10から6まで表示
処理を実行したあと条件がfalseならループ
Dim a As Integer : a = 10
Do
MsgBox a
a = a - 1
Loop Until a < 5
※10から5まで表示
※Exit Doでループを抜け出せる
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment