【VBA】ExcelマクロのLeft,Right,Midで文字を切り取る方法

VBA
スポンサーリンク

今回解説するのは、文字の切り取りができる関数Left, Mid, Rightです。

Leftで文字を切り取る例

ファイルを開くプログラムでパスを取得する際によく使います。

Leftで左から切り取る

Sub test()

Text = "123456789"
MsgBox Left(Text, 5)

End Sub

変数Textが元々の文字列です。

Left(文字列, 文字数)で左から切り取ることができます。

Leftで文字を切り取る例

1~9の左から5文字なので”12345″が表示されますね。

Sub test()

Text = "123456789"
MsgBox Right(Text, 5)

End Sub

使い方はLeftと同じです。

右から切り取るので”56789″が表示されます。

Midで好きな位置から切り出す

Sub test()

Text = "123456789"
MsgBox Mid(Text, 3, 3)

End Sub

Mid(文字列, 開始位置, 文字数)で切り取ります。

上記コードなら左から3番目から3文字なので”345″ですね。

Midで途中から文字を切り取った図

名前を紐づけたファイルを開く

文字の切り取りを利用してファイルを開きましょう。

デスクトップに以下2つのファイルがあるとします。

デスクトップに2つファイルがある図
sampleA.xlsm       :プログラム実行ファイル
sampleA_data.xlsx:開きたいファイル

ファイル名”sampleA”が共通しているので、これを利用して開いてみましょう。

ファイルの開き方は以下の記事で解説しています。

ファイルを開くには、開きたいファイルのパス(保存先の文字列)が必要です。

例えば、デスクトップにある”sampleA_data.xlsx”のパスは以下の通り。

ファイルパスの例

これが作成できたらゴールです。

実行ファイルの名前を取り出す

Sub test()

MsgBox ThisWorkbook.Name

End Sub

ThisWorkbook.Nameで取得できます。

私と同じファイル名で実行しているなら”sampleA.xlsm”と表示されるはずです。

この文字列を加工して目的のファイル名を作りましょう。

開きたいファイルの名前を作る

Sub test()

Filename = ThisWorkbook.Name
sampleName = Left(Filename, 7)
MsgBox sampleName

targetName = sampleName & "_data.xlsx"
MsgBox targetName

End Sub

“sampleA.xlsm”の左から7文字を切り取ればサンプル名が手に入ります。

そして実際に開きたいファイル名”sampleA_data.xlsx”を作りましょう。

ファイル名を切り取って加工する図

ファイル名が手に入ったので、残りは保存しているフォルダのパスだけです。

開きたいファイルのパスを作る

Sub test()

Filename = ThisWorkbook.Name
sampleName = Left(Filename, 7)
targetName = sampleName & "_data.xlsx"

folderPath = "C:\Users\HTOM\Desktop"
Workbooks.Open (folderPath & "\" & targetName)

End Sub

例えば、デスクトップまでのパスは”C:\Users\[ユーザー名]\Desktop”です。

開きたいファイルのパス
フォルダのパスをコピーする図

上図のようにアドレスバーをクリックすれば保存先フォルダのパスをコピーできます。

当然、保存先のフォルダによってパスは変わります。

ドキュメントフォルダなら、”C:\Users\[ユーザー名]\Documents\[ファイル名]”
Cドライブ直下なら、”C:\[ファイル名]”

みたいな感じです。

フォルダのパスとファイル名をくっつけて、Open()の中に入れればファイルが開けます!

Left関数を使うコツ

上記のプログラムで”sampleA_data.xslx”を開くことができました。

しかし、仮にサンプル名が”sampleA1″だったらこのプログラムは失敗します。

Leftで左から7文字を切り出しているので、”sampleA1″ではなく”sampleA”までしか取得できないからです。

Leftで途中までしか文字を切り出せない

ファイル名を間違えたら当然パスも間違えるので、Openでエラーになります。

そこで以下のようにLeft関数の中身を変えましょう。

Sub test()

Filename = ThisWorkbook.Name
nameLength = Len(Filename)
sampleName = Left(Filename, nameLength - 5)
MsgBox sampleName

End Sub

変数nameLengthに元の文字の文字数が入ります。

例えば”sampleA1.xlsm”なら文字数が13です。

ここから拡張子”.xlsm”の5文字を引いた数字をLeftに使いましょう。

拡張子を除いた文字数だけLeftで切り取る

すると拡張子だけを除くことができるので結果的に”sampleA1″が取り出せます。

まとめ

今回は文字列を切り出す方法について解説しました。

痒い所に手が届く関数なのでぜひ使ってみましょう!!

コメント

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