ExcelVBAで255文字より長いコメント文字列を取得する

ExcelVBAでコメントの文字列を取得するにはRange.NoteTextメソッドを使えばいいのですが、このメソッドで取得できる文字列は255文字までという制限があるので、ちょっとモヤモヤすることがあるかもしれません。

リファレンスには、次のように書いてあります。

expression.NoteText(Text, Start, Length)

expression 必ず指定します。Range オブジェクトを返すオブジェクト式を指定します。

Text 省略可能です。バリアント型 (Variant) の値を使用します。コメントに追加する、半角で 255 文字までの文字列を指定します。指定した文字列は、引数 Start で指定した位置に挿入され、既存のコメントのうち引数 Length で指定した部分が置き換えられます。この引数を省略すると、現在のコメントで引数 Start で指定した位置から引数 Length で指定した文字数分の文字列が返されます。

Start 省略可能です。バリアント型 (Variant) の値を使用します。文字列の設定または取得を開始する位置を指定します。この引数を省略すると、最初の文字から設定または取得を開始します。コメントに文字列を追加するには、既存のコメントの文字数を超える値を指定します。

Length 省略可能です。バリアント型 (Variant) の値を使用します。設定または取得する文字数を指定します。この引数を省略すると、半角で 255 文字を上限として、コメントの開始位置から終了位置までの文字列を設定または取得します。引数 Start で指定した位置からコメントの終了位置までに 255 文字以上あるときは、255 文字だけが対象となります。

これをみると、第二引数に開始位置を指定してあげることで任意の位置から255文字ずつ取得できそうです。

ということで、関数にしておきました。

Function GetFullCommentText(sRange As String) As String
  Dim sComment As String
  Dim iPos As Integer
  iPos = 1
  While Range(sRange).NoteText(, iPos) <> ""
    sComment = sComment & Range(sRange).NoteText(, iPos)
    iPos = iPos + 255
  Wend
  GetFullCommentText = sComment
End Function

255文字以上のコメントがあるセルからコメント文字列を取りたい! なんていう微妙なシチュエーションがあるかどうかはわかりませんが、今日実際にあったのでメモっておきます。

コメント

コメントする

目次