2.4. XLCTextEx 置換文字列と対象文字列

注意

Excel 2003 とそれ以前のバージョンでは、C API は Unicode をサポートしておらず、データの入出力は Shift-JIS で行っています。本プログラムでは Shift-JIS を Unicode に変換してから処理していますが、一部変換できない文字があります。
参照 SHIFT - JIS と Unicode 間の変換問題
このような理由で正しく処理できない場合があることをご了承ください。
  1. 置換文字列において特別な意味を持つ文字
  2. 置換文字列の使用例
  3. 対象文字列

1置換文字列において特別な意味を持つ文字

置換文字列において特別な意味を持つ文字・文字列は以下のとおりです。これ以外の文字は、そのまま出力されます。

\
次の 1 文字を通常の文字として処理するよう指示します。\$ などをそのまま表記したい場合、その文字の前に付けます。
$1, ... , $9
${番号}
番号に対応する ( ) にマッチした部分文字列で置き換えます。
${名前}
(?'名前': ) または (?<名前>: ) にマッチした部分文字列で置き換えます。
$&
パターン全体にマッチした部分文字列で置き換えます。
$`
パターン全体にマッチした部分の前の部分文字列で置き換えます。
$'
パターン全体にマッチした部分の後の部分文字列で置き換えます。
$+
最後にマッチした部分文字列で置き換えます。
$_
処理対象の入力テキストで置き換えます。

2置換文字列の使用例

注意

使用例 1

セル A1 内の文字列中に Excel という文字列があれば、それを HTML の強調タグ <em></em> で囲みたいとします。この場合、出力先のセルに次の式を入力します。

=XLCRegExReplace("excel","<em>Excel</em>",A1,"giw")

入力されてある状態を保ちたい、例えば EXCEL は <em>EXCEL</em> で置換したい場合は、パターンにマッチした部分文字列を表す $& を使います。

=XLCRegExReplace("excel","<em>$&</em>",A1,"giw")

この方法では、excellent なども <em>excel</em>lent のように置換されてしまいます。excel という単語のみをタグで囲みたい場合は、単語境界を表す \b を利用します。

=XLCRegExReplace("\bexcel\b","<em>$&</em>",A1,"giw")

PowerPoint という単語も強調タグで囲みたい場合は、選択を表す | とグループ化の ( ) を使って次のようにします。

=XLCRegExReplace("\b(excel|powerpoint)\b","<em>$&</em>",A1,"giw")

( ) で囲まれた部分パターンには登場した順に番号が振られます。部分パターンにマッチした部分文字列は、置換文字列内で $番号 と記述することにより参照することができます。したがって、次のようにしても同じ結果が得られます。

=XLCRegExReplace("\b(excel|powerpoint)\b","<em>$1</em>",A1,"giw")

参照する必要がない場合は ( ) の代わりに (?: ) も使えます。これには番号が振られません。

=XLCRegExReplace("\b(?:excel|powerpoint)\b","$&",A1,"giw")

使用例 2

インターネットにおける日付と時刻の標準的な表し方は

曜日, 日 月 年 時:分:秒 GMT   (例)Wed, 22 May 2013 20:00:00 GMT

です。ここで、曜日は最初の 3 文字、日は 2 桁、月は最初の 3 文字、年は 4 桁、時・分・秒はすべて 2 桁です。ただ、以前は

曜日, 日-月-年 時:分:秒 GMT   (例)Wednesday, 22-May-13 20:00:00 GMT

という形式も使用されていました。曜日は省略しない、日付はハイフンで繋ぐ、年は 2 桁という点が異なります。この古い形式を標準の形式に直すには次のようにします。(古い形式の日付がセル A3 に入っているとします。また、その日付は 2000 年より前のものとします。)

=XLCRegExFormat("(\w{3})\w+,\s+(\d{2})-(\w{3})-([6-9]\d)\s+","$1, $2 $3 19$4 $'",A3)

パターン内の ( ) は順に 1 から番号が振られます。またその部分にマッチした部分は置換文字列内で $1$2、… で参照することができます。上の例では、

$`$' はそれぞれパターン全体にマッチした部分の前全体と後ろ全体を表します。

3対象文字列

処理対象の文字列はそのまま使用します。エスケープシーケンスをデコードするなどの処理は行いません。

例えば "\n" は改行ではなく \ と n の2文字として扱います。