#727 メモ型(長いテキスト)データの行数やn行目を調べるには? フォーム、VBA

メモ型(長いテキスト)のフィールドをコントロールソースとするテキストボックスでは、長い文章を入力するだけでなく、その中で改行を行うことも多々あります。



そのとき、あくまでも一連の文章がまとまって1つの「Value」プロパティ値となりますので、直接的に何らかのプロパティを使って何行目のデータとか全部で何行あるかといったことを取得することはできません。1つの長い文字列を改行コードで区切ってからそれぞれを解析する処理が必要となります。

ここではその例として、メモ型データの全体の行数や、1行目・6行目・最終行それぞれの値を別のテキストボックスに結果表示する例を紹介します。

※メモ型の特性として、文章の最後に改行だけをいくつ入力してもそれらは保存されません。また最後の1文字のすぐ次に入力した改行コードも保存されません。「Value」プロパティ値は最後の文字が終端となります。よって、そのような文末の空行は考慮しなくてよいという前提になっている点、注意してください。


まず、下図のようなフォームを作ります。


テーブルのフィールドと連結した、メモ型データを入力可能なテキストボックスを配置します。ここではそれを「備考」という名前のテキストボックスとしています。

さらに、解析を実行するためのコマンドボタンや各結果値を表示するテキストボックスを配置します。コントロール名は次のようなものとしています。
  • [解析]コマンドボタン → cmd解析
  • 行数を表示するテキストボックス → 行数
  • 1行目の値を表示するテキストボックス → 行データ1
  • 6行目の値を表示するテキストボックス → 行データ6
  • 最終行の値を表示するテキストボックス → 行データ最終

下記がそのサンプルコードです。[解析]ボタンをクリックした際に各値を取得、各テキストボックスにセットしています。

Private Sub cmd解析_Click()
'[解析]ボタンクリック時

  Dim avarRowData As Variant

  '備考の値を改行コードで分解して配列にセット
  avarRowData = Split(Nz(Me!備考), vbCrLf)

  Me!行数 = UBound(avarRowData) + 1
  Me!行データ1 = avarRowData(0)
  Me!行データ6 = avarRowData(5)
  Me!行データ最終 = avarRowData(UBound(avarRowData))

End Sub

  • ここではまず「Split」関数を使って、「備考」のデータを改行コード(vbCrLf)で区切り、分割された値を配列にセットします。

  • 次に、配列の添え字の最大値を「UBound」関数で取得して行数を計算します。
    配列の添え字は「0」から始まりますので、もし10ケのデータに分割されていれば「0〜9」の値となり、「UBound」関数の返り値は「9」となります。よって「UBound」関数の返り値に+1した値が”行数”となります。

  • 同様の考え方で、”n行番目”のデータは配列の添え字に「n-1」を指定したもの、最終行は「UBound関数の返り値」を指定したものとなります。

実行例:
| Index | Prev | Next |



T'sFactory
Accessで動く生産管理DB
Ureru Express
Webで使う販売顧客管理
Access開発&アドバイス
DB開発やテクニカルアドバイス
Copyright © T'sWare All rights reserved