こんにちは。ECF Tech担当
Michiharu.Tです。
Excel VBA入門の第8回です。
今回から数回に分けてVBAで使用できる関数をご紹介します。関数を活用することで、ファイルやフォルダの操作をしたり、集計や検索などの複雑な処理を簡単に実現することができます。
本連載の目次は下記よりご覧頂けます。

[PR]
Excel VBAの実力を認定するVBAエキスパート試験の対策本です。

ファイル操作
マクロを使って、ファイルのコピー、削除する方法を確認します。前提として C:\Users\ecf_pc\Documents\work のフォルダ内に、data1.xlsxというExcelファイルが入っているものとします(下図)。

ファイルのコピー
ファイルをコピーするには、FileCopy関数を使います。文法を示します。
FileCopy コピー元ファイル名 コピー先ファイル名
プログラム例を示します。
Sub copy()
FileCopy "C:\Users\ecf_pc\Documents\work\data1.xlsx", "C:\Users\ecf_pc\Documents\work\data2.xlsx"
End Sub
data1.xlsxのファイルが、data2.xlsxという名前でコピーされます(下図)。

ファイルの削除
ファイルを削除するには、Kill関数を使います。文法を示します。
Kill ファイル名
プログラム例を示します。
Sub deleteFile()
Kill "C:\Users\ecf_pc\Documents\work\data2.xlsx"
End Sub
指定したフォルダのdata2.xlsxのファイルが削除されます。
フォルダの操作
フォルダの作成や削除などを行うための方法を確認します。
フォルダの作成
フォルダを作成するには、MkDirコマンドを使います。文法を示します。
MkDir フォルダ名
プログラム例を示します。
Sub MakeDirectory()
MkDir "C:\Users\ecf_pc\Documents\work\folder1"
End Sub
workのフォルダ内に、folder1という名前のフォルダを作成します(下図)。

info
Mkdirのdirはdirectory(ディレクトリ)の略です。フォルダのことをディレクトリとも言います。
フォルダの削除
フォルダを削除するには、RmDirコマンドを使います。文法を示します。
RmDir フォルダ名
プログラム例を示します。
Sub RemoveDirectory()
RmDir "C:\Users\ecf_pc\Documents\work\folder1"
End Sub
workフォルダ内のfolder1というフォルダが削除されます。
文字列の操作
次に文字列を操作する関数をいくつか紹介します。余計な文字を取り除いたり、書式の一括変換などに役立ちます。
空白の削除
文字列前後の空白を削除する関数に、Trim、LTrim、RTrimがあります。
| 関数名 | 使用例 | 意味 |
|---|---|---|
| Trim | Trim(文字列) | 引数で指定した文字列の前後の空白を除きます。 |
| LTrim | LTrim(文字列) | 引数で指定した文字列の左端の空白を除きます。 |
| RTrim | RTrim(文字列) | 引数で指定した文字列の右端の空白を除きます。 |
プログラム例を示します。
Sub TrimTest()
Dim str As String
str = " abcd " '空白を含む文字列
Range("A1").Value = Trim(str) & "|" '両端の空白を除去
Range("A2").Value = LTrim(str) & "|" '左端の空白を除去
Range("A3").Value = RTrim(str) & "|" '右端の空白を除去
End Sub
このプログラムでは空白を含む文字列を用意し、変数strに代入しています。次にTrim,LTrim,RTrimを実行した結果をそれぞれA1~A3のセルに代入しています。表示されたときに、右端の空白が除去できているかをわかりやすく見せるために、関数の処理結果の文字列に|をくっつけています。
実行すると下のようになります。

文字列の検索
文字列を検索するにはInStr関数を使います。文法は次のようになります。
InStr("元の文","探したい文字列")
元の文から、探したい文字列を見つけます。見つかったら何文字目に見つかったかを返します。なければ0を返します。
プログラム例を示します。
Sub InStrTest()
Dim pos As Integer
pos = InStr("私の趣味は読書です", "読書")
MsgBox pos & "文字目に見つかりました。"
End Sub
Instr関数を呼び出して、「私の趣味は読書です」の文字列中に「読書」の文字が含まれるかを探しています。見つかった場合、その位置が変数posに代入されます。最後に見つかった位置をメッセージボックスで表示しています。
結果は次のようになります。

文字数を数える
文字数を数えるにはLen関数を使います。文法を示します。
Len("文字列")
文字列部分の文字数を返します。プログラム例を示します。
Sub LenTest()
MsgBox Len("ABCDEFG")
End Sub
「ABCDEFG」が何文字かをメッセージボックスに表示します。7と表示されます。
文字列を置き換える
文字列を置き換えるにはReplace関数を使います。文法を示します。
Replace(対象文字列, 探す文字列, 置き換える文字列)
対象文字列から探す文字列を探し、置き換える文字列に変換します。
プログラム例を示します。
Sub replaceStr()
MsgBox Replace("今日は今日の風がふく", "今日", "明日")
End Sub
「今日は今日の風がふく」の中に見つかった「今日」を「明日」に置き換えて、メッセージボックスに表示しています(下図)。

実践的な使い方
文字列操作関数を使った、実践的なプログラム例をご紹介します。前提として、次のような商品番号の一覧があるものとします。

A2~A5セルまでが商品番号のデータですが、「-」があったり無かったり、空白文字が最初に含まれていたりします。これらのデータを下のように整えるプログラムです。
Sub cleanData()
Dim i As Integer
Dim str As String
For i = 2 To 5
str = Range("A" & i).Value
Range("A" & i).Value = Replace(Trim(str), "-", "")
Next
End Sub
Forステートメントでくり返し処理を行ない、A2~A5までの値をそれぞれ取得します。取得した各文字列について
- 前後の空白除去
-を``空文字に置き換える
の処理を行なったうえで、再度同じセルに文字列をセットしています。結果は次のようになります。

というわけで本日はここまでとさせて頂きたいと思います。最後までお読み頂き、ありがとうございました。ひきつづき、よろしくお願いいたします。

