LoginSignup
2
8

More than 1 year has passed since last update.

VBAチートシート

Last updated at Posted at 2021-12-09

自分用メモ

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
2
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
8