「エクセルvba characters() insert string」
といった検索キーワードによるアクセスに気づきました。
詳細は不明ですが、CharactersオブジェクトのInsertメソッドについて、
調べていた方による検索です。
ですが実際には、Range.Charactersプロパティなどによって取得できるCharactersオブジェクトが、
どのようなものなのか理解し辛い、ということが課題なのではないかと、推測しています。
CharactersオブジェクトのInsertメソッドを使ったサンプルマクロ
以下のSubプロシージャの、Range.Charactersプロパティの引数を変えながら何度か実行してみると、ヒントが得られるでしょう。
ActiveCell.Value = "イロハ"
ActiveCell.Characters(Start:=1, Length:=0).Insert "★"
End Sub
サンプルマクロで試して欲しいこと
VBE(Visual Basic Editor)のショートカットキー[F8]を使った、ステップ実行を行うほうが、よりCharacters.InsertメソッドやCharactersオブジェクトの仕様がよく見えてくると思います。
まず、
ActiveCell.Value = "イロハ"
が実行されると、下図のようにアクティブなセルに「イロハ」と入力されます。
つづく、
ActiveCell.Characters(Start:=1, Length:=0).Insert "★"
が実行されると、下図のように1文字目の位置に「★」が挿入されます。
RangeオブジェクトのCharactersプロパティの、引数・Startに「1」、Lengthに「0」が指定されているので、
ActiveCell.Characters(Start:=1, Length:=0).Insert "★"
1文字目の、0文字分の長さを持つCharactersオブジェクトが取得でき、そこにCharacters.Insertメソッドで「★」が挿入されたわけです。
Range.Charactersプロパティの引数・Startの役割
次に、
Range.Charactersプロパティの引数を、
ActiveCell.Characters(Start:=2, Length:=0).Insert "★"
としてから、再度ステップ実行してみましょう。
下図のように2文字目に「★」が挿入されます。
Range.Charactersプロパティの、引数・Startに「2」、Lengthに「0」が指定されているので、2文字目の位置の、0文字分のCharactersオブジェクトが取得でき、そこにCharacters.Insertメソッドで「★」が挿入されたわけです。
更に、
Range.Charactersプロパティの引数を、
ActiveCell.Characters(Start:=3, Length:=0).Insert "★"
としてから、もう一度ステップ実行して、3文字目に「★」が挿入されることを確認しましょう。
Range.Charactersプロパティの引数・Lengthの役割
つづいて、
Range.Charactersプロパティの引数・Lengthの役割を確認しましょう。
ActiveCell.Characters(Start:=1, Length:=1).Insert "★"
と指定して実行すると、1文字目から1文字分の文字列「イ」を表すCharactersオブジェクトが取得されて、「★」がInsertされるので、
のように「イ」が「★」に上書きされた状態になります。
次に、
ActiveCell.Characters(Start:=1, Length:=2).Insert "★"
と指定して実行すると、1文字目から2文字分の文字列「イロ」を表すCharactersオブジェクトが取得されて「★」がInsertされるので、
のように「イロ」が「★」に上書きされた状態になります。
Charactersプロパティの引数の意味を考えながら、こういったテストを繰り返すと、Charactersオブジェクトがイメージできるようになるでしょう。
Characters.Insertを使う必要があるのか
「エクセルvba characters() insert string」
という検索をなさった方は、CharactersオブジェクトのInsertメソッドを使ったコードをどこかでご覧になったはずですが、本当にCharacters.Insertを使う必要があるのかは、よく考えてみてください。
上述のようなテストをすれば、Charactersオブジェクトと、Characters.Insertメソッドの仕様を理解できますが、わかりやすいかというと、疑問が残るのではないでしょうか。
Characters.Textプロパティなどを使って文字列を取得して、VBAのReplace関数を使って文字列を置換することでも、Characters.Insertメソッドで行ったことを同じことはできるはずです。Characters.Insertメソッドを使う場合と比較すると、コードは数行ほど長くなるはずですが、Replace関数を使うほうが理解はしやすいと感じられるはずです。
Characters.Insertを使う必要があるのか、いま一度、考えてみてください。
- Newer:最終行番号を取得するRange("A1").End(xlDown).Rowでオーバーフロー
- Older:斜め線をVBAでクリアする-Borders(xlDiagonalDown)・Borders(xlDiagonalUp)
Home » エクセルマクロ・Excel VBAの使い方 » Charactersオブジェクト » Characters.Insertを使ったExcelマクロ