自分用メモ
SubとFunctionの違い
'処理しておしまい
Sub 値を返さないよ()
End Sub
'処理して値を返す
Function 値を返すよ(str As String) As String '戻り値のデータ型の指定ができるがなくても可
値を返すよ = str 'Functionの名前に値を入れて返す
End Function
'参照範囲の設定ができる
'記述がなければPublicになる
Private Sub 同一のモジュール内からしか見れないよ()
End Sub
変数の宣言
Dim 変数名 As データ型
'動的配列を再定義する。Preserveは省略可能
'Preserveがあることで既存データを保持したまま要素数を変更できる
Dim 文字の配列() As String
ReDim Preserve 文字の配列(3)
プロシージャの呼び出し
Module1とかなくてもいいけどあるとわかりやすい
'引数が一つorなし
Call Module1.testSub(char)
Module1.testSub(char)
'引数が複数だと括弧が省略できる
Call Module1.testSub(char, key)
Module1.testSub char, key
if
If isA Then
MsgBox foo
ElseIf isB
MsgBox bar
Else
MsgBox baz
End If
for
For i = 0 To 10
~~~
If isA Then
Exit For
End If
Next i
Subから抜ける
Exit Sub
ファイルを開くモーダルを出す
ここで選択して実際に受け取っているのはファイルのパス
Application.GetOpenFilename("表示名,*.拡張子")
' 例としてCSVを指定
Application.GetOpenFilename("CSVファイル(*.csv),*.csv")
'例としてExcelを指定
Application.GetOpenFilename("Excelブック(*.xlsx),*.xlsx")
' ついでに選択がなかった時の処理(コピペ用)
' ファイルのパスを受け取る
filePath = Application.GetOpenFilename("表示名,*.拡張子")
If Dir(filePath) = "" Then
MsgBox "指定ファイルがありません。"
Exit Sub
End If
' 追記
' Dir関数は、引数で指定したファイル名と一致した最初のファイル名を返します
' 一致しない場合は空なので、ファイルやフォルダの存在チェックなどで使用する
Excelファイルを開き、閉じる
'例としてモーダルで開いたファイルを扱う
filePath = Application.GetOpenFilename("Excelブック(*.xlsx),*.xlsx")
Workbooks.Open (filePath)
fileName = ActiveWorkbook.Name
'開いたアクティブなExcelファイルを保存
ActiveWorkbook.Save
Windows(fileName).Close
テキストファイルを開く
'Input(読み込み専用), Output(書き込み、元データは消える), Append(元データの最後に追記), Binaryなどある
Open filePath For Input As #1 '任意の使用していない数字
Do Until EOF(1) 'ファイルの最後まで読める
Line Input #1, buf '1行の読込
Loop
Close #1
配列に関するメモ
なんとワークシートではなくただ配列として扱う場合、二次元配列として扱うとき、行で取り出せない。
ワークシート上で操作する場合はこの限りでないので値を自由に扱い人向け↓
Public Sub Test()
' 2次元配列
Dim strArray(1, 1) As String
strArray(0, 0) = "縦1横1"
strArray(0, 1) = "縦1横2"
strArray(1, 0) = "縦2横1"
strArray(1, 1) = "縦2横2"
' 配列から取り出す
' これはOK
Debug.Print strArray(0, 0) ' "縦1横1"
'("縦1横1", "縦1横2") を取り出したいが、
' これはエラー
Dim str As String
' str = strArray(0)
' 表から1行を取り出すような操作がしたいときはジャグ配列を作る
Dim jagArray As Variant
jagArray = Array(Array("縦1横1", "縦1横2"), Array("縦2横1", "縦2横2"))
' 配列から取り出せる
Dim row As Variant
row = jagArray(0) '("縦1横1", "縦1横2") が入っていて1行だけ扱える
Debug.Print jagArray(0)(0) '"縦1横1" が入っていてもちろんく値も取り出せる
End Sub