|
Modeling
VBA
High Frequency
Low Frequency
Multiphysics
Particles
加速空洞
|
CST StudioModeling: VBAVBA による計算モデルの作成
VBA を使い計算モデルの作成のテクニックをまとめます.筆者のメモです.
目次
CST Studio と VBA
CST Studio Suite のツールは,Visual Basic スクリプトから制御できます.内蔵の BASIC インタプリタの言語は、Visual Basic for Application 言語とほぼ 100 % 互換性があります.タスクの自動化に使うと便利です.OLE (Object Linking and Embedding Automation) オートメーションにも対応しています.
VBA の文法
基本
VBA の基本的なこと変数や演算子について説明します.
変数
変数の宣言は「Dim xxx As 型」とします.すると,変数 xxx が使えるようになります.表1と表2に,使用可能な型を示します.
よく使う型
| 型 | 内容 |
| Boolean | True/False |
| Integer | -32,768〜32,767 |
| Long | 32bit VBAの標準的な整数 |
| LongLong | 64bit整数 |
| Single | 単精度浮動小数 |
| Double | 倍精度浮動小数 |
| String | 文字列 |
あまり使わない型
| 型 | 内容 |
| Byte | 0〜255 |
| Currency | 固定小数点:通貨用かな |
| Decimal | 10進系の高精度 |
| Date | 日付・時刻 |
| Variant | 何でも入る.遅い・重いが便利 |
| Object | オブジェクト参照の汎用 |
| Any | Declare文で古い書き方。通常は非推奨 |
演算子
必要な演算子がそろっており,CST Studio のスクリプトに普通に使えます.
算術演算子
| 演算子 | 内容 |
| + | 加算 |
| - | 減算 / 単項マイナス |
| * | 乗算 |
| / | 除算 |
| \ | 整数除算(小数部を捨てた商) |
| Mod | 剰余(余り:例 7 Mod 3 = 1) |
| ^ | べき乗 |
文字列演算子
| 演算子 | 内容 |
| & | 連結(例 "a" & "b" = "ab") |
比較・論理演算子
| 演算子 | 内容 |
| = | 等しい |
| <> | 等しくない |
| < <= > >= | 大小比較 |
| Not | 否定 |
| And | 論理積 |
| Or | 論理和 |
| Xor | 排他的論理和 |
| Eqv | 両方同じなら True |
| Imp | Not A Or Bと同じ |
ビット演算 (整数型に対して)
| 演算子 | 内容 |
| a And b | ビットAND |
| a Or b | ビットOR |
| a Xor b | ビットXOR |
| Not a | ビット反転 |
組み込み関数
VBAの数学関数
| 関数 | 内容 |
| Abs(x) | 絶対値 |
| Sgn(x) | 符号 (負: -1、0: 0、正:1) |
| Int(x) | 負数も含めて下方向へ切り捨て |
| Fix(x) | 0方向へ丸め |
| Round(x[, digits]) | 四捨五入 |
| Sqr(x) | 平方根 |
| Exp(x) | $\exp(x)$ |
| Log(x) | 自然対数 $\log_e(x)$ |
| Sin/Cos/Tan(x) | 三角関数 |
| Atn(x) | 逆正接(arctan) |
| Rnd | 0以上1未満の乱数 (Single) |
| Randomize | 乱数の種を初期化 |
VBAの文字の操作関数
| 関数 | 内容 |
| Len(s) | 文字列 s の長さ(文字数)を返す |
| Left(s, n) | 左から n 文字を返す |
| Right(s, n) | 右から n 文字を返す |
| Mid(s, start[, n]) | start 文字目から (任意で n 文字) を返す.Mid(s, start) なら末尾まで. |
| InStr([start], s, find[, compare]) | s の中で find が最初に現れる位置(1始まり)を返す.見つからないと 0 |
| compare | vbBinaryCompare(大小区別) vbTextCompare(大小無視) |
| InStrRev(s, find[, start[, compare]]) | 後ろから検索し、見つかった位置を返す |
| Replace(s, find, repl[, start[, count[, compare]]]) | find を repl に置換した文字列を返す(元の s は変わらない) |
| Split(s[, delim[, limit[, compare]]]) | 区切り delim で分割し、0始まりの配列を返す |
| Join(arr[, delim]) | 配列 arr を delim で連結し文字列にする |
| Trim(s) | 前後の空白を削除(中の空白は残る) |
| LTrim(s), RTrim(s) | 左/右だけ削除 |
| UCase(s), LCase(s) | 大文字化/小文字化(アルファベット中心) |
| StrComp(a, b[, compare]) | 比較結果を返す(a<b なら -1、等しいなら 0、a>b なら 1).compare は InStr と同様 |
| Asc(ch), Chr(code) | ANSI系の1文字?コード変換(環境依存あり) |
| AscW(ch), ChrW(code) | Unicode(UTF-16)系.日本語を扱うなら W が安全寄り |
| Space(n) | 空白 n 個の文字列 |
| String(n, char) | char を n 回繰り返した文字列 |
| Format(expr[, fmt]) | 数値・日付などを書式 fmt で文字列化(例 "0.000", "yyyy/mm/dd").返り値は String. |
VBA の例
History List
- ■if 文を使う
- if 文を使うと,Parameter List の値に従い処理を変えることができます.
If BeamPipe_direction = 1 Then
With Transform
.Reset
.Name "component1:coupler"
.Origin "Free"
.Center "0", "0", "cpl_cell_z"
.Angle "0", "180", "0"
.MultipleObjects "False"
.GroupObjects "False"
.Repetitions "1"
.MultipleSelection "False"
.AutoDestination "True"
.Transform "Shape", "Rotate"
End With
End If
Parameter List の BeamPipe_direction が 1 の場合,with Transform が実行されます.VBA の比較は「=」で,「==」ではないです.もちろん,「If 条件 1 Then 実行文 1 ElseIf 条件 2 Then 実行文 2 Else 実行文 3 End If」を使うことができます.
- ■メッセージボックスを使い値の表示
- Parameter List 他の値を,メッセージボックスで表示できます.具体黄な方法は,次の通りです.
MsgBox "acc_2a" & vbTab & acc_2a & vbCrLf & _
"acc_2b" & vbTab & acc_2b & vbCrLf & _
"acc_Rb" & vbTab & acc_Rb
Paramter List の (acc_2a, acc_2b, acc_Rb) の値を表示します.表示される値は,Parameter List の Value です.vbTab は「\t」です.vbCrLfは改行「CR+LF」(Windows の改行) です(具体的なメッセージボックス).
- ■Boolean Add (+) を繰り返す
- Transform の copy で複数のコンポーネントを作成すると,作成されたコンポーネントの名称は「元の名称_整数」となります.これをまとめ,ひとつのコンポーネントにするには,以下の VBA で可能です.
Dim i As Integer
For i = 1 To Cell_N - 1
Solid.Add "component1:acc_cell", "component1:acc_cell_" & CStr(i)
Next i
コピーで作成されたコンポーネントは「acc_cell_1」,「acc_cell_2」,「acc_cell_3」…で,そこをブール演算の和でひとつにまとめています.Cell_N の値は Parameter List で与えられています.CStr() は数値を文字列に変換する関数です.
ページ作成情報
参考資料
- CST Online Help 2024 の Visial Basic (VBA)
更新履歴
|