再び、ちかんを…

"長〜〜〜〜〜い文字列"シリーズ(其の五)
(Excel2007では 8222文字以上)
 
Excel2003以前では、911文字超の文字列が入っているセルに対しては、置換文字がどこにあろうと置換はできない ということを前回の日記に書きました。
# 前回の日記のテーマは「置換」です。いかがわしい内容ではないので、念のため。
 
Excel2007でも同じようなもんだろ。911 が 8221 に変わるだけで。
と思っていたら、、、実は、ほんのちょっぴりグレードアップしてました。
 
Excel2007 では、8221文字超の文字列が入っているセルであっても、置換文字が8221文字目以前に存在する場合は置換可能です。
さらに、置換文字が8221文字目以前に存在する場合は、8222文字目以降の文字に対しても置換がかかります。
そして、旧バージョンでは途中で止まってしまった[すべて置換]が最後まで処理されます。
逆にいうと、置換できないのは、8221文字目以前に置換文字が存在しない場合のみです。
 
イマイチ分かり難いですね。
こういうときは、実験、実験♪
 
まずは、サンプルデータを作ります。

Sub Macro1()
  ' Excel2003以前では 910 でテスト
  ' Excel2007では 8220 でテスト
  Const cLmt As Long = 8220
  Dim rngA As Range

  Set rngA = ActiveSheet.Range("A1:A5")
  rngA.EntireColumn.ColumnWidth = 100
  rngA.WrapText = True
  With rngA(2).Resize(3)
    .MergeCells = True
    .RowHeight = 409.5
  End With
  rngA(1).Value = "ABC"
  rngA(2).Value = String$(cLmt, "A") & "BCA"
  rngA(5).Value = "ABC"
End Sub

この Macro1 を実行すると、
セルA1 に "ABC"
セルA2 に "A…ABCA"
セルA5 に "ABC" と入ります。
 
まずは小手調べ、"C"を"Z"に[すべて置換]してみます。
A1 と A5 の"C"に対して置換がかかり、正常終了します。
A2 の"C"に関しては、置換はかかりません。
旧バージョンでは、A1 だけに置換がかかり、異常終了していました。
 
次に、A列を選択した状態で"A"を"X"に[すべて置換]してみます。
(選択状態で結果が変わるので要注意です。)
今度は、なんとA1,A2,A5のすべての"A"が"X"に置換されます。
セルA2の8223文字目の"A"に対しても置換がかかります。
 
微妙な違いで置換できたりできなかったりするようです。
まぁ、所詮、長〜〜〜〜〜い文字列なので、保障されないと思っておいた方がよさげです。
個人的には、エラーになる旧バージョンの方がダメだったと分かる分だけ、親切な気がするのですが…
 
※.Excel World の 2007年5月3日 12:14 の日記をコピーしています。
http://excel.sns.fc2.com/excel/