[[20040929155005]] 『置換の限界文字数』(しぇい) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『置換の限界文字数』(しぇい)

 文字列の置換にはセル内文字数に限界があるようで、セルに入ってる文字が
 ある文字数を過ぎると「数式が長すぎます」というエラーメッセージが出て、
 置換ができないのですが限界の文字数はいったいいくつなんでしょう?
 (だいたいエクセルのひとつのセルに何千も文字を入れるほうが無茶な
  気もするんだが…。ぶつぶつ。でもしょうがない。)
 900ぐらいかと思うのですが…。正式な数をご存知の方はいらっしゃいますか?
 また、それを回避する方法がありましたらお教え下さい。


 調べてみたところ、置換後の文字数が911文字を越える場合は置換できないようです。
 詳しくは下のリンクをご覧下さい。
http://support.microsoft.com/default.aspx?scid=kb;ja;418283&Product=xlw2kINT
 (gloomy)


 現在調査中ですか・・・(_ _;)
 想定される限界を超えたのですね・・・。
 ありがとうございました!
 (しぇい)


 衝突してしまいました。

 回避策・・・・とは言いがたいかもしれませんが。

 作業列を作ってもよいのならSUBSTITUTE関数があるのですが、
 置換する文字列が多いとその分作業列を要してしまいます。
 自分はこれくらいしか思いつきませんでした・・・。
 (念のため確認してみましたがこれは1000文字で試して大丈夫でした)
 (gloomy)


 純粋に1セルの文字数限界は32767文字すね。
限界文字数の約3%の文字数でも置換できなくなるのか…駄目じゃんExcel。
 
で、回避する方法その2(というかこんな事も出来るって感じで)
 
1.Excelで置換対象セル範囲選択後、コピー
2.テキストエディタ(Winならメモ帳など)を新規に立ち上げ、貼り付け
3.テキストエディタ上で置換処理
4.処理後文字列を全選択後、コピー
5.Excelに貼り付け
 
数式を使ってるセルがあるとその数式がつぶれるから使えないけど、
扱ってるのが文字列だけなら。
(ご近所PG)


 もう終わってしまったと思ったら、話しは続いていた!
 みなさん研究熱心で嬉しくなります!ありがとうございます!
 SUBSTITUTEでOKでした!
 入れ子の応用ばかりに使っていて、本来の使い方を忘れていました(笑)。
 10000の文字数でもOKでした!・・・すごいぞExcel!
 テキストエディタでの置換はやっていたのですが、なかなか面倒な作業で
 Excel内で処理できないものかと思っておりました。

 ちなみに応用編。
 同じデータを別の用途で、セル内にある記号のあとで改行したいのですが、
 これも置換でCtrl+Jでできるのですが、やはり911文字以上のものには
 対応できません。
 みなさんのお知恵があれば、これもSUBSTITUTEでできそうな気がしてき
 ました。いかがでしょう???
 (しぇい)


 =SUBSTITUTE(A1,"ある記号",CHAR(10)) これでしょうか。
 ※ある記号がまだ必要なら =SUBSTITUTE(A1,"ある記号","ある記号"&CHAR(10))
 (川野鮎太郎)


 瑕疵911 ですね・・・。失礼しました。m(__)m (純丸)


 鮎太郎さん、ズバリでした!感動的です!!!
 今、限界超えのデータだけ地道にテキストエディタで置換していました(汗)。
 聞いてから作業すれば良かった!(笑)
 ちなみに、CHAR(10)の10は改行を意味する文字コードなんですか?
 gloomyさんも、ご近所PGさんもありがとうございました!
 おかげさまで、肩こり度が少し緩和されそうです。(^_^)ヾ
 (しぇい)


 >CHAR(10)の10は改行を意味する文字コードなんですか
 その通りです。
 A1セルに Alt+Enterで改行を入れて、B1セルに =CODE(A1)と入れたら10が返ります。
 ※KAMIYAさんの受け売り(^_^A;
 (川野鮎太郎)


 おお〜〜〜〜〜〜っっっっっ!!!!!!
 感動で大笑いです。
 本当に勉強になります。ありがとうございました!!!
 (しぇい)


 一寸解説
 
セル内部での改行はラインフィードっていう文字コードで表現されます。
キャラクタの10番目がラインフィードっていう文字なんですね。
 
参考として、
Windows系のテキストの改行コードは「キャリッジリターン&ラインフィード」で表され、
Macintosh系のテキストの改行コードは「キャリッジリターン」のみで表されてます。
キャリッジリターンは CHAR(13) に当たります。
なので、Excelさんが混同しなくてすむようにセル内部の改行にはラインフィードを、
と採用したのかもね。
 
ちなみにマクロでキャリッジリターン&ラインフィードを扱う時は
Chr(13) や Chr(10) でも良いけど、
VBで定義される定数値 vbCr vbLf を使用するのがベターです。
Windowsで扱いやすくする為、 vbCrLf と一まとめにされた定数もあります。
OSがどっちでも良い感じでうまい事改行しとけ的定数として vbNewLine ってのもあります。
 
上記を考慮されたメモ帳では無いテキストエディタを使うとそれらの仕組みがよく分かるかも。
ネット上を「改行コード」で調べると色々情報拾えるので参考にして見ると良いかも。
 
 >瑕疵911
うまい、と言うかなんか唸ってしまった。
 
解説好きな(ご近所PG)追記しまくり


 (・0・*)ホ,(゜0゜*)ホ--ッッ!!! さすが本職ですね〜^^
 ウリウリ( *・・)σ(^o^)
 >>瑕疵911
 >うまい、と言うかなんか唸ってしまった。
 私もです(^_^A;
 (川野鮎太郎)

 ほ〜。へ〜。ふ〜ん。
 ホント勉強になります。解説までありがとうございました。

 >瑕疵911
 は今わかりました(^_^;
 覚えやすくていいですね。
 文字化けしたのかと思った(笑)
 (しぇい)


 やった、専門家を唸らせた!・・って、質問の回答で唸らせろよな(セルフ突っ込み)
 しぇいさん、スレ汚し失礼しました。(純丸)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.