Yamamoto's Laboratory
 
 
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に,使用可能な型を示します.

よく使う型
内容
BooleanTrue/False
Integer-32,768〜32,767
Long32bit VBAの標準的な整数
LongLong64bit整数
Single単精度浮動小数
Double倍精度浮動小数
String文字列
あまり使わない型
内容
Byte0〜255
Currency固定小数点:通貨用かな
Decimal10進系の高精度
Date日付・時刻
Variant何でも入る.遅い・重いが便利
Objectオブジェクト参照の汎用
AnyDeclare文で古い書き方。通常は非推奨

演算子

必要な演算子がそろっており,CST Studio のスクリプトに普通に使えます.

算術演算子
演算子内容
+加算
-減算 / 単項マイナス
*乗算
/除算
\整数除算(小数部を捨てた商)
Mod剰余(余り:例 7 Mod 3 = 1)
^べき乗
文字列演算子
演算子内容
&連結(例 "a" & "b" = "ab")
比較・論理演算子
演算子内容
=等しい
<>等しくない
<  <=  >  >=大小比較
Not否定
And論理積
Or論理和
Xor排他的論理和
Eqv両方同じなら True
ImpNot 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)
Rnd0以上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
comparevbBinaryCompare(大小区別)
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() は数値を文字列に変換する関数です.

ページ作成情報

参考資料

  1. CST Online Help 2024 の Visial Basic (VBA)

更新履歴

2024月11月30日 ページの新規作成


no counter