3
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【VBA】小ネタ

Last updated at Posted at 2016-08-12

小ネタ

プロシージャを書く場所

シート内で完結するものはシートの中に書く。
シートをまたぐ場合などはモジュールに書く。

定数の書き方

Const HOGE As Integer = 1000

配列番号の始まりを1にする

Option Base 1

参照渡しと値渡し

【参考】
プロシージャへの変数の渡し方は二通りある。

参照渡し(ByRef)

デフォルトはこっち。
変数を渡されたプロシージャ側で引数の値を変更すると、呼び出し元のプロシージャーの変数の値も変わる。

値渡し(ByVal)

プロシージャに値を提供するだけで、ByRef のように呼び出し元のプロシージャーに影響することはない。

改行コードはvbLf

【参考】

Range("A1").Value = "一行目" & vbLf & "二行目"

alt

オブジェクト変数に代入するときはSetを使う

【参考】

一般的な変数の場合

Sub Sample13()
    Dim tmp As String
    tmp = "tanaka"
    MsgBox tmp
End Sub

オブジェクト変数の場合

Sub Sample14()
    Dim ws As Worksheet
    Set ws = Sheets("Sheet1")
    MsgBox ws.Name
End Sub

With ~ End Withステートメント

【参考】

With オブジェクト名
     処理1
     処理2
     処理3
End With

同じオブジェクトに対して複数の処理を実行する。

テキストファイルから読み込む

※CSVファイルはテキストファイルとして開く!

【参考】

Sub Sample2()
    Dim buf As String
    Open "C:\Sample\Data.txt" For Input As #1
        Do 読み取りポイントが終端に達するまで
            Line Input #1, buf
            セル = buf
        Loop
    Close #1
End Sub

簡単な流れ

  1. ファイルを開く
  2. ファイルの読み書きをする
  3. ファイルを閉じる

ファイルを開く

Open ファイル名 For 開き方 As #ファイル番号

開き方は次のとおり。

キーワード モード 処理
Input 入力 読み込み
OutPut 出力 書き込み
Append 追加 書き込み

複数ファイルを開くことはほとんどないので、ファイル番号は「#1」でOK。

ファイルから読み込む

テキストファイルから一行ずつ読み込むには

Line Input #番号, 変数

を用いる。
Line Inputステートメントは、1行分のデータを読み込むと、読み込みポイントを次の行に移す。
つまり、Line Inputステートメントを繰り返すことで、テキストファイルの中を、1行ずつ、すべて読み込むことができる。

ファイルを閉じる

Close #1    ''1番のファイルを閉じる
Close       ''現在開いているすべてのファイルを閉じる

アクティブシート以外のシートのセルを参照する

// = 取得したい値
WorksheetFunction.Index(Range("Sheet1!A:B"), WorksheetFunction.Match(検索値, Range("Sheet1!A:A"), 0), 2)

sheet1↓

A B
... ...
検索値 取得したい値
... ...

配列

【参考】

配列のインデックスの最小値/最大値を取得する

arraynameは配列の名前。

For i = LBound(名前) To UBound(名前)
  Cells(i + 2, 2) = 名前(i)
Next

最小値

LBound(arrayname,dimension)

最大値

UBound(arrayname,dimension)

文字列から配列を生成する

Split(expression,delimiter)
  • expression
    • 配列にしたい文字列。
  • delimiter
    • 省略可。expressionに含まれる区切り文字。

For Each~Nextで指定したフォルダ内のファイルを全てを参照する

【参考リンク】

'folderFullPathは指定したフォルダのフルパス
'例) USersフォルダの場合、C:\Users
Sub Hoge(folderFullPath As String)
    Dim objFSO As Object
    Dim objFile As Object
    Dim filePath As String
    
    Set objFSO = CreateObject("Scripting.FileSystemObject")
 
    filePath = folderFullPath & "\"
    
    For Each objFile In objFSO.getfolder(filePath).Files
        'ファイルに対する処理を記述
    Next objFile
End Sub

csvファイルのデータをシートにコピーする

Function csvToSheet(csvPath As String, objSheet As Worksheet) As Worksheet
    With Workbooks.Open(fileName:=csvPath)
        With .Worksheets(1)
            .Cells.Copy objSheet.Cells
        End With
        
        .Close SaveChanges:=False
    End With
    
    Set csvToSheet = objSheet
End Function
3
8
2

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
3
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?