• ベストアンサー

エクセルでセルを文字列設定しているのに頭の0が取れる件

EXCEL2003について質問です。 似た類の質問は結構みるのですが、根本的な原因がわからないので わかる方がいたらエクセルの仕組みを教えてください。 頭に0が入った記号を含む数字から任意の記号を一括で抜こうとしたときに、文字列設定なのに頭の0が抜けてしまう原因です。 例えば (1)新規のシートでまずは0120-111と入力します。 ハイフンを手動で消すと、数字として扱われて120111になります。 これはわかります。 (2)次に、初めにセルの書式を「文字列設定」にしてから同様のことをすると、0120111となって文字列に扱いになりました。 これもわかります。 (3)今度は(2)でハイフンを手動ではなく「置換」で取ると結果は120111と 0が取れているにも関わらずセルの書式は文字列のままです。 なぜ(3)で勝手に0が外れてしまうんでしょうか? 桁数もバラバラ、頭が0でない、記号がない場合もある数字のリストの中で一個一個手動ではなく範囲指定したセルを一括で変更する方法って ないんですかね?

質問者が選んだベストアンサー

  • ベストアンサー
  • FEX2053
  • ベストアンサー率37% (7995/21384)
回答No.3

これはExcel-VBAでの変数の扱いを分かっていると、理解できる事柄 なんですが・・・。 Excelのセルデータは、あくまで「オブジェクト」として持っており これを表示するときに「どう表示するか」を「セルの書式設定」で 決定します。逆に言えば、セルの書式設定はデータの内容に対して 影響を及ぼさないんですね。 で、文字列で書式設定されたセルに左ゼロデータを書き込むと、その 時点では「文字列」として扱われますが、何かを処理しようとした 途端、「オブジェクト」として取り込まれて処理が行われます。 「オブジェクト」として取り込まれると、数字だけのデータは数字と して処理が始まりますので、前ゼロが消えてしまうんです。 オブジェクト内で前ゼロを残したい場合は、制御文字"'"を使うしか ありません(アポストロフィ"'"がExcelで時々顔を出すのは、Lotus 1-2-3互換機能を残している為だけじゃないんです)。前ゼロに関して は、Excelの困った動きの一つなんですが、「仕様です」と言わざるを 得ないのです。

sikuru
質問者

お礼

ご回答ありがとうございます。 的確に知りたいことを答えていただいて大いに参考になりました。 そうですか、エクセルの仕様なんですね、 Excel-VBAはあまり詳しくないですが「何かを処理しようとした途端」 というのが今回の「置換」にあたるんですね。 他のよくわからなかったエクセルでおこる現象でも この原因が影響してそうな気がしました。

すると、全ての回答が全文表示されます。

その他の回答 (3)

回答No.4

Microsoftが明確に仕様といってるみたいですね。 http://support.microsoft.com/kb/404387/ja 上記を元に以下の手順は如何でしょうか。 1.置換用シート(仮にSheet2とする)を用意 2.Sheet2のA1セルに置換元シート(仮にSheet1とする)のA1セルの文字置換を行うセル式を設定  例: =SUBSTITUTE(Sheet1!A1,"-","") 3.Sheet2のA1セルをコピーし、Sheet2の任意のセル範囲を選択し貼り付け 4.それをそのままコピー 5.Sheet1のA1セルで右クリック「形式を選択して貼り付け」 6.「値」を選択し「OK」 上記手順で 置換元の全てのセルが置換されるかと思います。

参考URL:
http://support.microsoft.com/kb/404387/ja
sikuru
質問者

お礼

なるほど、SUBSTITUTEを使う簡単な方法があったんですね。 電話番号から-を抜きたかったんですけど これで一個一個手動で作業しなくて良くなりました。 回答番号3の原因と合わせて完全に解決しました。 大変助かりました。 ありがとうございました。

すると、全ての回答が全文表示されます。
  • Sinogi
  • ベストアンサー率27% (72/260)
回答No.2

書式は文字列でもデータが数値になるようですね。 既存データの前に ' を入力して置換すれば文字列として残るようです

sikuru
質問者

お礼

ご回答ありがとうございます。

すると、全ての回答が全文表示されます。
  • laputart
  • ベストアンサー率34% (288/843)
回答No.1

本当ですね。試してみるとご指摘の通りでした。勝手に数字と判断するのですかね。 一つの方法は(ご存知と思いますが) '0120-0120 と入力する方法です。これで文字列として扱えて =left(セル,1) も "0"になります。 置換でも0は取れません。

sikuru
質問者

お礼

ご回答ありがとうございます。

すると、全ての回答が全文表示されます。

関連するQ&A