こんにちは。ECF Tech担当
Michiharu.Tです。
Excel VBA入門の第8回です。
今回から数回に分けて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までの値をそれぞれ取得します。取得した各文字列について
- 前後の空白除去
-
を``空文字に置き換える
の処理を行なったうえで、再度同じセルに文字列をセットしています。結果は次のようになります。
というわけで本日はここまでとさせて頂きたいと思います。最後までお読み頂き、ありがとうございました。ひきつづき、よろしくお願いいたします。