[[20040116151828]] 『セル内の空白を削除したいのですが・・』(よ) >>BOT

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

 

『セル内の空白を削除したいのですが・・』(よ)

 お世話になります。
 社内のあるシステムからデータをダウンロードしたのですが、金額セルに空白が含まれていてその後の計算等ができません。
 そこで空白を削除しようといろいろとやってみたのですが、どうも単純な空白(全角、半角)ではないようで、
 関数でもダメ、置換でやってみてもダメでした。

 試しに、空白の入っている金額セルの空白部分だけをコピーして、置換の「検索する文字列」の所に入れてやってみたら
 何とかできたのですが、このダウンロードはいろんな人が行う予定なので、マクロで一発でできるようにしたいなぁと思い、
 マクロの記録をしてみたら下記のようになりました。

 Selection.Replace What:="?", Replacement:="", LookAt:=xlPart, _
     SearchOrder:=xlByRows, MatchCase:=False

 どうやら、金額の後ろに入っているものを「?」でとらえているようで(マクロの記録では
 ActiveCell.FormulaR1C1 = "23,333?"となりました)実行してみると、数字がすべて消えてしまいました。

 こういったケースは1回1回手入力で置換をしないとだめでしょうか?
 どなたかおわかりの方はアドバイスお願い致します。

 再現が難しいので、レスがつかないのかもしれません。

 上記の置換のマクロでは実行時に検索文字が"?"の一文字ワイルドカード、
 MatchCase:=Falseで部分一致でも置換。
 つまり、セルに入っているすべての文字を空白に置換してしまいます。
 どうも記録時と実行時には同じ動作が期待できないケースです。

 なんにせよ何らかの制御コードのようなものが入っているみたいなので
 次の方法を試してみて結果報告していただければなにか解決策のわかる
 人がいるかもしれません。

 セルの値を次の数式で参照。(A1に入っているとします)
 A1セルの文字列の末尾の文字列のコード表示
 =CODE(RIGHT(A1))
 印刷できない文字列をクリアして表示(*1で数値化できればなんとかなりそう)
 =CLEAN(A1)*1
 (KAMIYA)

 KAMIYAさん、ありがとうございました。
 お礼が遅くなり申し訳ありません。
 今KAMIYAさんに教えていただいた通りやってみました。その結果、
 =CODE(RIGHT(A1))ですと「160」、
 =CLEAN(A1)*1ですと「#VALUE!」となりました。
 これで何とかできないかと自分でも頭をひねってみたのですが・・・(T_T)
 もしよろしければまたアドバイスいただければと思います。
 何度もすみませんが、よろしくお願い致します。(よ)

 多分わかったと思います。
 =SUBSTITUTE(A1,CHAR(160),"")*1
 でやってみてください。数値化できます。(たぶん)
 今回の原因はスペースのコードの違いによるものです。
 つまり、ASCII文字セットではCHAR(32)とCHAR(160)で表現される
 二種類の半角スペースがあります。
 160のほうの半角スペースは「半角カタカナ」に分類されるもののようで、
 英語キーボードで入力される半角スペースとは区別されているようです。
 ワークシート関数では認識してくれるのですが、
 マクロ中でChr(160)としても、どうも認識してくれないので、
 マクロでやるのでしたら、

 Range("B2").FormulaR1C1 = "=substitute(R[0]C[-1], Char(160), """")"

 作業列を追加、作業列に上記数式を作り、これを必要範囲にコピー、元の範囲へ値貼り付け、
 作業列を削除、という手順ではいかがでしょうか。
 (KAMIYA)


 KAMIYAさん、ありがとうございます!
 KAMIYAさんのおっしゃる通りにやってみましたら無事できました。
 原因も丁寧に説明していただいたお陰でよくわかりました。
 本当に助かりました。ありがとうございました。(よ)

コメント返信:

[ 一覧(最新更新順) ]


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