【VBA】文字を識別して文字列の一部を取り出す方法

目次

はじめに

今回は、文字列中の特定文字(ここではアンダースコア「_」)以降を削除する方法について勉強しました。
使用環境は以下のとおりです。

  • 使用OS: Windows 10 Pro
  • バージョン: 20H2

背景

VBAでファイル名やシート名を取得した際、
名前の途中に「」が含まれていて、その以降の文字列が不要なケースがありました。
そこで、「
」より前の部分だけを取り出す方法を試行錯誤しました。

実際のコード

以下のようにして実現できました。

vbaコピーする編集する

Dim sheetname As String
Dim t As Long

sheetname = "morino_kabu"
t = InStr(sheetname, "_")
sheetname = Left(sheetname, t - 1)

コードの解説

1行目:変数sheetnameを宣言します。文字列型(String)です。

2行目:変数tを宣言します。数値型(Long)で、アンダースコア「_」の位置を記録します。

3行目:空白行(読みやすさのため)

4行目:sheetnameに文字列「morino_kabu」を代入します。この文字列中の「_」以降を取り除きたいと考えています。

5行目:InStr関数を使い、「」が何文字目にあるかを調べ、tに代入します。この場合、「morino****kabu」の7文字目にアンダースコアが存在します。

6行目:Left関数を使って、sheetnameの左からt - 1文字(つまり6文字分)だけを取得し、再びsheetnameに代入します。これにより、sheetnameは「morino」だけになります。

注意点として、元のコード例に

t = Left(sheetname, t, -1)

という記述がありましたが、これは構文エラーとなります。
正しくは、

sheetname = Left(sheetname, t - 1)

のように記述する必要があります。

その後の処理例

この後、たとえば次のようにすれば、A1セルに取得した文字列を出力できます。

Range("A1") = sheetname

これで、セルA1には「morino」と表示されます。

まとめ

  • InStr関数で特定の文字(ここでは「_」)の位置を取得する
  • Left関数でその手前までの文字列を取り出す

この2つを組み合わせることで、特定の区切り文字以降を削除する処理が簡単に実現できました。

文字列操作はVBAでも非常に基本かつ重要な技術なので、今後も着実に習得していきたいと思います。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次