目次
はじめに
今回は、VBAを使ってセルの中の一部の文字だけを削除する方法について勉強しました。
使用環境は以下のとおりです。
- 使用OS: Windows 10 Pro
- バージョン: 20H2
背景
VBAプログラムで、セル内に入力されている文字列から特定の範囲だけを抽出・削除したい場面がありました。
最初はReplace
関数を使って試行錯誤しましたが、思うように動作せず、
最終的に**Characters().Delete
メソッド**を使う方法にたどり着きました。
実際に行った処理
以下のコードで、狙った部分の文字を削除することができました。
Range("A1").Characters(0, 6).Delete
コードの解説
Range("A1")
操作対象となるセルを指定しています。ここでは「A1セル」です。.Characters(開始位置, 文字数)
セル内の文字列のうち、- 開始位置から
- 指定した文字数分だけ
を対象に操作することができます。
.Delete
指定した文字範囲を削除するメソッドです。
注意点
Characters(0, 6)
の「0」は、実際には先頭の1文字目を指します。
VBAのCharacters
オブジェクトは1ベース(1からカウント開始)ですが、ここでは0で先頭を指定しても動作しました。- 「6」は、削除したい文字数を意味します。ここでは先頭から6文字を削除しています。
結果として、A1セルに「12文字」が入っていた場合、7文字目以降だけが残ります。
苦労した点
当初は、Replace
関数を使って不要な文字列を削除しようと試みました。
しかし、Replace
関数では「位置」ではなく「文字列の一致」をベースに処理するため、
位置指定で削除したい今回のようなケースには適していませんでした。
結果的に、Characters().Delete
メソッドを使用することで、狙った位置の文字を的確に削除することができました。
まとめ
- セル内の一部文字だけを削除したい場合は、**
Characters().Delete
**を使用するとよい。 Characters(開始位置, 文字数)
で、対象の範囲を細かく指定できる。Replace
関数は文字列一致で置換・削除するものであり、位置ベースの操作には向かない。
今回の作業を通じて、セルの中身を部分的に操作するテクニックを習得することができました。
今後も、用途に応じた適切な関数・メソッドの使い分けを意識して、VBAスキルを磨いていきたいと思います。