はじめに
今回は、文字列中の特定文字(ここではアンダースコア「_」)以降を削除する方法について勉強しました。
使用環境は以下のとおりです。
- 使用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でも非常に基本かつ重要な技術なので、今後も着実に習得していきたいと思います。