- ベストアンサー
Excel 打った文字と違う数字が表示される
62E9と打ったはずが、6.20E+10と表示されます。 式欄には、62000000000と表示されているので、 多分6.20×0を10個と言いたいんだろうなぁとは思います (入力した文字の62×0を9個が、一桁変換されているんですよね) Eが出てきたら、諦めるしかないんでしょうか? 何か回避する方法あはあるんでしょうか。 セルの書式設定は「標準」にしていますが、 Eが出てきたら、その都度その都度、 「'62E9」(文字列)に打ち直して対応しています。
- みんなの回答 (9)
- 専門家の回答
質問者が選んだベストアンサー
エクセルは62E9と入力されると指数形式の数値と見なします。 62×10^9 = 6.2×10^10 です(「^」はべき乗) これはエクセルの仕様ですからいかんともしがたいです。解決法は-Jelly-さんがやられている方法の先頭に「'」をつけて文字列にするか、はじめから入力セルの書式を「文字列にする」ことしかないと思います。 力業でマクロを使って、とも考えましたが「62E9」と入力した時点でEXCELは「62000000000」という値と「6.2E+10」という表示形式に変換してしまいますので、元の「62E9」という形式に戻すことができません。ですからマクロでも救済できません。
その他の回答 (8)
- Wendy02
- ベストアンサー率57% (3570/6232)
#7のzap35 さん、ご指摘、おっしゃる通りでした。 私のマクロは失敗でした。(^^; まあ、こんなことは、もともと、書式を文字列[@]にしていれば済む話なので、デフォルトの状態で、なんとかしてほしいというのは、もとが無理ですね。既成ソフトウェアで、仕様の変更することは一般的には無理な話で、常識的には、ユーザー側の応用力というか、適応しかありません。 今回の質問は、どこかで、早い時点で、既に解答として結論は出ているような気がします。私のマクロは、実験的な意味合いしか持ちません。 というか、私自身なら、ExcelやWordでうまくいかないものは、さっさと別のものを考えますね。それに、どんなものも、基本は、テキストファイルですしね。 でも、マクロで不可能とは、私はいいません。私の能力が足らないだけです。 ある方のマクロを見ると、あらたなワークシートイベントや特別なイベントを作っているので、何事にも不可能ではないって思えてくるのです。ただ、コードとしては、実用度はゼロで、今のバージョンでは応用力はほとんどないと思えるのですが。(^^;マクロとしては、今後、あまり、API関数に頼るというよりは、新たな、.Net Framework に依存していくようになるのだろうとは思います。 書式表示の変換の自動キャスティングのオン・オフのオプションがあればよいのですが、それは、どうもありません。 ということで、一部、私信のようですが、失礼しました。 PS. 貼り付ける場合なら、クリップボードの中身のテキストを調べて、貼り付ける前に、文字列に「'」を付けたりすることは可能です。
お礼
>書式表示の変換の自動キャスティングのオン・オフのオプションがあればよいのですが この機能があると便利だな~と思ったのは確かですね(笑 ないようなので、地道にいきます(笑 変換したいときはアクセサリーの電卓とか使います。 >私のマクロは失敗でした。(^^; いえ、どうもありがとうございました。 今回の例外のようなコードはなかったので、大丈夫でした。 >何事にも不可能ではないって思えてくるのです 手段の難易度はさておき、多分出来ないことはないのでしょうね。 実用度は度外視して。 目的の処理に対して、どの言語を使うかを選択するのに少し似ていますね。
- imogasi
- ベストアンサー率27% (4737/17069)
こんなに回答が積み重なり、もう回答ではないですが (1)内容が16進数 (2)セルへ直接手入力でなくファイルからコピーしている これは質問の最初に書いておくべき重要事項だったと思います。 ーー セルの書式設定を文字列にあらかじめしておいても、コピー張り付けすると、コピーは、元のセルなどの書式も引き継ぐので、Eは指数表示のEに解釈されるようです。別CSVファイルなどからコピーしてくるとどうなるか、わかりませんが、元のファイルに書式という考えが無いが、いわば標準の書式を背負って、値とともにコピーされるのかも。 ーー 16進表記の文字列(例 62E9がA!にある)は、関数=HEX2DEC(A1)で10進数になります。(ここが言いたかっただけ) エクセルでは書式で16進数(変換)表示は無いし、逆もない。 ーー マクロについて、「確か、操作を記録しておくものでしたっけ」のレベルであれば、早い回答の段階で、マクロ・VBAはわからない旨をお礼や補足で、回答者に伝えたほうが良かったのではないですか。回答者の随一のエキスパートが詳しい解説を出して下さっても無駄になりますよね。
お礼
書き方が気にくわなかったようですいません。 >(1)内容が16進数 回答者の方が、こちらが何も書かなくても分かって下さっていたようなので あまり気にしていませんでした。 >(2)セルへ直接手入力でなくファイルからコピーしている ファイルといってもエクセルではなくて、CSVです。 ですので元々の書式というものがそもそも存在しないため、 コピーしてきても、貼り付けられる側であるエクセルの書式が適応されます。 (CSVをエクセルで開くと、開いた時点で指数表示になってしまいますから出来ません) これは質問の最初に書いておくべき重要事項だったと思います。 すみませんでした >16進表記の文字列(例 62E9がA!にある)は、関数=HEX2DEC(A1)で10進数になります 今回は進数変換はしませんが、覚えておきます ありがとうございました >マクロ・VBAはわからない旨をお礼や補足で、 >回答者に伝えたほうが良かったのではないですか。 >回答者の随一のエキスパートが詳しい解説を出して下さっても無駄になりますよね。 確かに分かりません。 VBA(ただしAccess)なら分かりますが…。 随一のエキスパートの方のソースはコンパイルエラーもなく使えましたので 無駄になったとは思いませんが…・。 「こういうこともできるよ」と下さったものです プログラムを提示されたら全て理解しないといけないわけでもないでしょう。 たくさん回答も頂けたので しばらく放って何もなければ閉じたいとおもいます ありがとうございました
- zap35
- ベストアンサー率44% (1383/3079)
#02です。少し補足で書かせていただきます 最初の回答時は質問の値が16進コードとは、理解していなかったのですが、仮に2バイトの16進コードだとして 01E3 10E2 のどちらも入力した時点でエクセルは 1E+3(1×10^3) と認識します。これをどちらに復号すればよいか分からないので、「マクロでは難しい」と書いたのです。 WorkSheet_ChangeイベントでVBAに渡される引数は「レンジ(セル)」ですからVBAはそのセルの値を取得しますが、エクセルが「解釈」した後の数字である「1E+3」しか取得できないので、やはりマクロでは困難と考えます
お礼
仮数部の部分がちょうど10倍になってしまうと うまくいかなくなるんですね。 指摘どうもありがとうございました。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 単に、テキスト表記の問題なのですし、Excelの自動キャスティングの問題だから、そのセルに、確実に決まった「書式」を入力するなら、その書式に合ったものを設定しておくのは当然だと思います。別に、書式を文字列にすればよいだけの話ですが、 >>力業でマクロを使って >実は自分も最初そう思いました >でも裏でそうしたところで、いざ実行すれば、 >実行した数字がエクセルの上でまたどうせ62000000000に戻るんだろうとも思いましたが・・・ そんなことはありえないです。マクロでは無理という話ですから、ちょっと、あえて作らさせていただきました。(Excel2003 のみでテスト) 'シートモジュール Private Sub Worksheet_Change(ByVal Target As Range) Dim buf As String Dim i As Integer Dim j As Integer Dim chkVal Dim k As Integer If Target.Count > 1 Then Exit Sub If Target.Value = "" Then Exit Sub If VarType(Target.Value) = vbString Then Target.Value = StrConv(Target.Value, vbNarrow + vbUpperCase) Exit Sub End If If VarType(Target.Value) <> vbDouble Then Exit Sub Application.EnableEvents = False i = InStr(1, Target.Text, "E", 1) If i = 1 Then buf = Replace(Target.Text, "+", "") ElseIf i > 2 And Len(Target.Text) <> i Then For j = Len(Target.Value) To 1 Step -1 If Mid(Target.Value, j, 1) > 0 Then buf = Left(Target.Value, j) & "E" & CStr(Len(Target.Value) - j) Exit For End If Next j Else buf = Target.Text End If Target.ClearFormats Target.Value = "'" & buf Application.EnableEvents = True End Sub
お礼
マクロでは無理なんですね (使ったことないので知りませんけど・・ 確か、操作を記録しておくものでしたっけ。 プログラムを組めば出来るということでしょうか (マクロとプログラムの違いが分かってなくてすいません… 文字列からEがあるか判定して+を消して 先頭に'を足しているのかと思いましたが、 本当に出来ました。ありがとうございます。 ついでにアルファベットの小文字が大文字になりました。 ElseIf後のloopと最後のClearFormatsの動きの辺りが、 理解しきれませんでしたけど… 初めて見る関数ばかりで面白かったです。 ついでに、全角スペースを貼り付けると 自動で半角に変換されるのも知りませんでした。 (これは便利ですね 時間を割いて頂いてありがとうございました。
- k-pix
- ベストアンサー率51% (50/98)
6.20E+10 を 62E+9 と表示させたいのならば、書式設定でユーザ定義を選び、種類のところに ##0E+0 と記述してください(62E+9 の"+"記号は取ることができません。)。
お礼
小数点の位置はユーザー定義で変えられるんですね。 知りませんでした。 どうもありがとうございます。
- miomiotti
- ベストアンサー率31% (20/64)
セルの書式設定を「標準」にしているとの事ですが、「標準」では文字列として認識されません。 そのまま文字列で入力したいのであれば文字列にしたいセルを選択してセルの書式設定→表示形式の分類の中から「文字列」を選択してOKボタン。 これでセルに文字列を入力しても勝手に数値に変換する必要はなくなります。
お礼
>「標準」では文字列として認識されません 標準だと駄目なんですね。 他の設定に数値とかいろいろあったので、 数値にすれば数値扱いになるんだと思っていました
- chie65536
- ベストアンサー率41% (2512/6032)
>これで諦めがつきます… 別に諦めなくても。可能なのに。 >こっちは「16進で打ち込んでいる」つもりなので、 回答者の何人かが「打ち込み前に、打ち込むセルの書式設定を『文字列』にしておけばOK」って書いてるの、理解してますか? 「事前にセルの書式設定を『文字列』にしておけば、16進で打ち込んでいる文字は、全部そのまま16進で打ち込まれる」んだけど? 何か「セルの書式設定は、標準から変えちゃいけない」とでも決まりがあるんでしょうか? 判ってないようなので、もう3回書きます。 「事前にセルの書式設定を『文字列』にしておけば、16進で打ち込んでいる文字は、全部そのまま16進で打ち込まれる」んだけど? 「事前にセルの書式設定を『文字列』にしておけば、16進で打ち込んでいる文字は、全部そのまま16進で打ち込まれる」んだけど? 「事前にセルの書式設定を『文字列』にしておけば、16進で打ち込んでいる文字は、全部そのまま16進で打ち込まれる」んだけど?
お礼
分かりやすく書き直して頂いてありがとうございます >何か「セルの書式設定は、標準から変えちゃいけない」とでも決まりがあるんでしょうか? 特にはないです。 一応エクセルも出しますが、 出したって見られるわけでもないし…。 見られるのはエクセルを印刷したPDFだけなので、 セルの書式設定とかこまかい部分まで見るのは不可能です
- chie65536
- ベストアンサー率41% (2512/6032)
>62E9と打ったはずが、6.20E+10と表示されます。 「指数表現で打ち込んでいる」ので、そうなるのが「当たり前」です。 「指数表現」とは「1.2345E12」や「3.21E-5」など「<仮数部>E<指数部>」で表現します。意味は「<仮数部>×10の<指数部>乗」です。 つまり「数字」+「E」+「数字」になっていれば「それは指数表現である」と解釈される訳です。 「62E9」は「62×10の9乗」ですから「6.2×10の10乗」と同じです。エクセルでは、Eの手前の指数部は「9.99」のように「1桁+小数点+残りの桁」に桁合わせしますから、「62×10の9乗」は「6.20E+10」と表示されます。 >何か回避する方法あはあるんでしょうか。 >セルの書式設定は「標準」にしていますが、 「書式設定が標準」なら頭に「'」を足す以外、回避出来ません。 「書式設定を文字列」にしておけば、何を打ち込んでも「文字列」になるので、16進数4桁を打ち込むセルは、最初から「書式設定を文字列」にしておきましょう。 そうすれば「62E9」以外にも「0012」は「12にならずに0012のまま」入力されます。
お礼
浮動小数点とかは根本的には理解してませんけど 何となく言葉は知ってる程度です >「指数表現で打ち込んでいる」ので、そうなるのが「当たり前」です。 こっちは「16進で打ち込んでいる」つもりなので、 そのまま表示させたかったんですが無理そうですね CSVから大量にコピーしきて コピーしたエクセルのセルをダブルクリックしてなんたらかんたら… とやっているので、冒頭に'が1文字ついているだけでそこだけカーソル避けるのが面倒臭さ倍増だったので。 そのへんの設定も何かあるんじゃないかと思って探してたんですが 無理そうなことが分かって良かったです どうもありがとうございました
お礼
これが不動小数点なんとかとかいうのでしたっけ? まさかこんなところで躓くとは… >力業でマクロを使って 実は自分も最初そう思いました でも裏でそうしたところで、いざ実行すれば、 実行した数字がエクセルの上でまたどうせ62000000000に戻るんだろうとも思いましたが・・・ 諦めるしかなさそうな回答ありがとうございました 中途半端な回答をもらってまた無駄な時間を浪費するよりも、 これで諦めがつきます…