#705 ハイパーリンクのデータからメールアドレスだけを取り出すには? クエリ

テーブルで「ハイパーリンク型」に設定されたフィールドには、メールアドレスやホームページアドレスなどのデータを保存することができます。またテーブルのデータシートや画面等では、ハイパーリンクを表す文字色や下線が付けられ、その文字列のクリックなどで、そのアドレス宛てのメールを新規作成したり、ホームページをブラウザで表示させたりすることができます。



そのとき、実際にはそのフィールドには、『画面に表示する文字列』と、メールアドレスを表す『「#mailto:」という語句+メールアドレス+「#」』が格納されています(それら2つから構成されていることは「ハイパーリンクの編集」ダイアログでも分かります)。つまり特殊なデータ型ではなく、複数の意味合いの異なる文字列が格納されていることが特徴となっています。




この機能は、画面でそれを表示して扱う際には便利ではあるのですが、そのデータ内容を処理したいといった場合、複数の意味を持つデータが格納されているため、一方が邪魔になってしまう場合があります。たとえば、そのレコードをコピーしてExcelのワークシートに”テキスト形式”で貼り付けたときなどは、「qwez1234@xxx.xx.com#mailto:qwez1234@xxx.xx.com#」といったようになってしまいます。



ここでは、そういった場合の対処の一例として、ハイパーリンク型のデータから『画面に表示する文字列』や『#』という文字を除外して、純粋にメールアドレスの文字列だけを取り出すクエリの例を紹介します。

それには、”演算フィールド”において、文字列関数の処理によって「mailto:」とその後ろの「#」で囲まれた部分だけを切り出すようにします。

■クエリのデザイン


■演算フィールドの内容

メールアドレス: IIf(Not IsNull([Eメールアドレス]),Replace(Mid$(CStr([Eメールアドレス]),InStr(CStr([Eメールアドレス]),"#mailto:")+8),"#",""),"")

ここでは、ハイパーリンク型である「Eメールアドレス」フィールドを「CStr」関数を使ってテキスト型に変換することがひとつのポイントとなります。
そして、そこから「#mailto:」の位置を「InStr」関数で取得し、「Mid$」関数でそれより後ろの文字列を切り出したあと、最後尾の「#」を消すために「Replace」関数を使っています。
また、Eメールアドレスが空欄(Null)の場合、上記のReplaceからの式だけでは「#エラー」表示となってしまいます。そこで、事前に「IIf」関数を使ってそれがNullでないときだけ文字列の切り出しを行うようにしています。


実行例:
  • このクエリをデータシートビューで表示すると下図のようになります。変換していない「Eメールアドレス」フィールドと、メールアドレスのみ取り出した「メールアドレス」フィールドの見た目の違いを確認してください(もちろん後者はクリックしても何も起こりません)。


  • また、これをExcelのワークシートに”そのままの形式”で貼り付けると下図のようになります。
| Index | Prev | Next |



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