【エクセルVBA】指定文字列に対して右から特性の文字までを切り取る方法

こんにちは、ヒガシです。

 

このページでは、指定した文字列に対して、右から特定の文字を順番に探索していき、見つけたところまでの文字列を右から切り取る方法をご紹介していきます。

 

例えば以下のようになんらかのファイルのフルパスが記載されているとします。

こんなときに¥を特定も文字として指定することで、ファイル名だけを取り出すことができます。

右から文字列探索する際の処理イメージ

 

以降ではこの例をベースに実演していきます。

それではさっそくやっていきましょう!

 

スポンサーリンク

InStrRev関数の紹介

そもそも今回紹介した内容を実施するうえで、非常に便利な関数がVBA上にはあらかじめ備わっています。

それがここで紹介するInStrRev関数です。

 

この関数は文字列と探索文字を指定することで、探索文字を全体の文字列に対して右から順番に探索していき、見つけたところの文字数を返してくれるというものです。

ここで注意が必要なのは、見つけたところの文字数というのは右からではなく左から数えた時の結果になります。

 

先ほどのファイルのフルパスを例にとると以下のような感じです。

InStrRev関数の処理内容を図解した結果

 

そしてこのInStrRev関数の使い方は以下の通りです。

文字数 = InStrRev (全体の文字列, 探索する文字列)

実際の使用例は以降のサンプルコードで紹介します。

 

スポンサーリンク

右から特性の文字までを切り取るサンプルコード

それでは本題である右から特定の文字までを切り取るVBAプログラムをご紹介します。

冒頭にも紹介した通り、今回は以下の文字列から¥以降の文字を切り取ってみようと思います。

サンプルコードで実施することのイメージ共有

 

以下がそのサンプルコードです。

Sub Get_Right()
    Dim all_string As String
    Dim split_char As String
    '探索する文字列が書いてあるセルを指定
    all_string = Cells(2, 1)
    '探索文字列の長さを取得しておく
    all_string_num = Len(all_string)
    '探索する文字列を指定する
    split_char = "\"
    '指定した文字列を右から探索した際に、それが左から何番目にあるか確認
    split_point = InStrRev(all_string, split_char)
    '指定した文字列よりも右側だけを取り出す
    Right_string = Right(all_string, all_string_num - split_point)
    '結果を出力する
    MsgBox Right_string
End Sub

 

コード中にコメントをつけていますので、やっていることはだいたいイメージできるのではないかと思います。

いずれにせよ、InStrRev関数の中身をよく理解することが非常に重要ですね。

スポンサーリンク

サンプルコードの実行結果確認

それでは先ほどのプログラムを実際に実行してみます。

以下の結果が得られました。

サンプルコードを実行し、¥よりも右側の文字列だけを取り出した結果

問題なく¥よりも右側だけを切り取ることができていますね。

 

スポンサーリンク

おわりに

ということで今回は指定した文字列から特定の文字列よりも右側だけを取り出す方法をご紹介しました。

 

このように、私のブログではエクセルスキルはもちろん、様々なプログラミングスキルを紹介しています。

ぜひ他の記事ものぞいてみてください。

 

それではまた!

コメント

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