目次
前
Tips
spreadsheetでマクロを定義したときに
BASICコードでの記述という条件で便利
なデバッグ手法を紹介しておきます。
MsgBox活用
デバッグモードでトレースするときには
ブレークポイントを指定したり、参照で
見たい変数値を選択してやらないと駄目。
こういうのは面倒と感じたなら、MsgBoxを
利用して、変数値を表示させます。
マクロのコードは、次のように定義します。
Dim xidx As String
Dim yidx As String
Dim zidx As String
Dim xstr As String
Dim i As Byte
Dim i0 As Byte
Dim i1 As Byte
Dim i2 As Byte
Dim xcar As String
Dim xcdr As String
Sub MySplit()
' set pointer
sidx = 2
' clear cells
Sheets(sidx).Range("B2:I3").Value = ""
' loop
For i=0 to 7
' set pointer
Select Case i
Case 1 : xidx = "B3"
yidx = "B3"
zidx = "C3"
Case 2 : xidx = "C2"
yidx = "D2"
zidx = "E2"
Case 3 : xidx = "C3"
yidx = "D3"
zidx = "E3"
Case 4 : xidx = "D2"
yidx = "F2"
zidx = "G2"
Case 5 : xidx = "D3"
yidx = "F3"
zidx = "G3"
Case 6 : xidx = "E2"
yidx = "H2"
zidx = "I2"
Case 7 : xidx = "E3"
yidx = "H3"
zidx = "I3"
Case Else : xidx = "B2"
yidx = "B2"
zidx = "C2"
End Case
' get context
xstr = Range(xidx).Value
' split
i0 = InStr(xstr,"rpm")
i1 = InStr(xstr,"/")
i2 = InStr(xstr,"deg")
xcar = Left(xstr,i0-1)
xcdr = Left(xstr,i1+1,i2-i1-1)
' debug
MsgBox( xcar & chr(32) & xcdr )
' store
Sheets(sidx).Range(yidx).Value = xcar
Sheets(sidx).Range(zidx).Value = xcdr
Next i
End Sub
プロパティ活用
セルには、数値、文字列、数式等のプロパティが
用意されています。
文字列をアクセスしたいとき、次のようにプロパティを
指定すると、間違いなく処理できます。(Calcの場合)
Dim xstr As String
' set pointer
ptr0 = ThisComponent.Sheets(0).getCellByPosition(1,1)
' get context
xstr = ptr0.String
Excelでは、Valueを利用。
Dim xidx As String
Dim xstr As String
' set pointer
xidx = "B2"
' get context
xstr = Range(xidx).Value
文字列分離
spreadsheetのセルに文字列が入っているときに
特定文字列を利用して分離したい場合があります。
関数のLeft、Mid、Right、InStrを利用して
文字列を分離するのが定石。
InStrは、便利な関数で、文字列の中に特定文字列が
含まれているか否かを判定して、結果を整数で返す
仕様になっています。
パラメータ構成は、以下。
InStr(start,string1,string2)
start 検索開始位置(省略可能)
string1 検索対象文字列
string2 検索文字列
関数InStrでは、検索文字列が存在しないときは
0が返ってきます。存在すれば開始位置が返る
ことになっていますが、それは1から。
検索文字列の開始位置がわかれば、Left、Mid、Right
の各関数を使い、必要な長さの文字列を切出しできる
ようにできます。
例えば、コンマを使った区切りでは
次のコードで分離できます。
Dim xstr As String
Dim xcar As String
Dim xcdr As String
Dim xidx As Byte
Dim xlen As Byte
' store
xstr = "Hello,World!"
' which space
xidx = InStr(xstr,",")
xlen = len(xstr)
' split
xcar = Left(xstr,xidx-1)
xcdr = Mid(xstr,xidx+1,xlen-xidx-1)
' debug
MsgBox( xcar & Chr(32) & xcdr )
検索文字列は、1文字でも2文字以上でもよいので
InStr関数とlen関数を組み合わせて、分離するため
の位置を求めればよいでしょう。
文字列結合
文字列を結合するには、「&」を利用。
注意しないとならないのは、スペースが追加
されることがあります。
つぎのコードで調べるとよいでしょう。
Dim xstr As String
Dim xcar As String
Dim xcdr As String
' store
xcar = "Hello"
xcdr = "World !"
' debug
MsgBox( xcar & Chr(32) & xcdr )
' concatenate
xstr = xcar & Chr(32) & xcdr
' debug
MsgBox( xstr )
英文字生成
BASICでは、数値から文字を生成するには、2つの
関数を利用できます。
asc関数は、文字列を扱うと、先頭の1文字だけを
chr関数は、1文字を生成。
chr関数では、65から90を与えると、英大文字の'A'から'Z'を生成。
48から57では、数字の'0'から'9'を生成。
英小文字の場合、97から122を与えます。
スペースは32、ダブルクオートは34のように
数値を与えると対応する文字を出力します。
区切り文字
同じCalcでも、OpenOfficeとLibreOfficeでは
区切り文字が異なります。
OpenOffice -> =IF(B2=1;0;1)
LibreOffice -> =IF(B2=1,0,1)
LibreOfficeは、Exelと同じで、コンマを区切り
文字に使っています。
マクロ変換
CalcとExcelでは、利用しているBASICの仕様が異なります。
また、関数のパラメータの区切り文字が異なります。
どうやって、置き換えするのかを考えると、次のように
すれば簡単。
BASICコードだけを取り出して、テキストエディタで
区切り文字を置換機能を使って置換後、クリップボード
経由で書き戻します。
(under construction)
目次
前