【初心者向け】動かして学ぶExcel VBA入門(8)

Excel VBA

こんにちは。ECF Tech担当
Michiharu.Tです。

Excel VBA入門の第8回です。

今回から数回に分けてVBAで使用できる関数をご紹介します。関数を活用することで、ファイルやフォルダの操作をしたり、集計や検索などの複雑な処理を簡単に実現することができます。

本連載の目次は下記よりご覧頂けます。

【初心者向け】動かして学ぶExcel VBA入門
Excel VBAを動かしながら学べる連載をお送りしています。講座目次第1回Excel VBAとはExcelマクロを動かしてみようExcelマクロの保存第2回セルに値を設定セルの削除オブジェクト、プロパティ、メソッド第3回ワークシートの指定...

ファイル操作

マクロを使って、ファイルのコピー、削除する方法を確認します。前提として 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のセルに代入しています。表示されたときに、右端の空白が除去できているかをわかりやすく見せるために、関数の処理結果の文字列に|をくっつけています。

実行すると下のようになります。

Trimの結果

文字列の検索

文字列を検索するにはInStr関数を使います。文法は次のようになります。

InStr("元の文","探したい文字列")

元の文から、探したい文字列を見つけます。見つかったら何文字目に見つかったかを返します。なければ0を返します。

プログラム例を示します。

Sub InStrTest()
    Dim pos As Integer
    pos = InStr("私の趣味は読書です", "読書")
    MsgBox pos & "文字目に見つかりました。"
End Sub

Instr関数を呼び出して、「私の趣味は読書です」の文字列中に「読書」の文字が含まれるかを探しています。見つかった場合、その位置が変数posに代入されます。最後に見つかった位置をメッセージボックスで表示しています。

結果は次のようになります。

Instrの結果

文字数を数える

文字数を数えるにはLen関数を使います。文法を示します。

Len("文字列")

文字列部分の文字数を返します。プログラム例を示します。

Sub LenTest()
    MsgBox Len("ABCDEFG")
End Sub

「ABCDEFG」が何文字かをメッセージボックスに表示します。7と表示されます。

文字列を置き換える

文字列を置き換えるにはReplace関数を使います。文法を示します。

Replace(対象文字列, 探す文字列, 置き換える文字列)

対象文字列から探す文字列を探し、置き換える文字列に変換します。

プログラム例を示します。

Sub replaceStr()
    MsgBox Replace("今日は今日の風がふく", "今日", "明日")
End Sub

「今日は今日の風がふく」の中に見つかった「今日」を「明日」に置き換えて、メッセージボックスに表示しています(下図)。

Replaceの動作

実践的な使い方

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

実践的な文字列変換の元データ

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までの値をそれぞれ取得します。取得した各文字列について

  • 前後の空白除去
  • -を``空文字に置き換える

の処理を行なったうえで、再度同じセルに文字列をセットしています。結果は次のようになります。

実践例結果

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

タイトルとURLをコピーしました