- ベストアンサー
エクセルで-0と表示させる方法
エクセルで-800,000を百万単位で表示させ、-0と表示させる方法を教えてください。 -800,000に対して、ROUNDDOWN(セル/1000000,0)を使った時に 0 と表示されてしまいます。 セルの書式設定で、「表示形式」の分類を全てためしましたが、どれも-0と表示されません。 百万単位にしたときは、「切り捨て」です。 よろしくお願い致します。
- みんなの回答 (11)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは! 横からお邪魔します。 No.2さんの「セルの表示形式」の方法が一番簡単だと思います。 ユーザー定義から [=0]-0;G/標準 で大丈夫だと思います。m(_ _)m
その他の回答 (10)
- cj_mover
- ベストアンサー率76% (292/381)
#3、4、5、8、cjです。 自分としては出来の悪い回答をそのままにしておくのもキツイので、 "マイナス0"の扱いについて書いたExcelファイルをアップロードしておくことにしました。 興味持つ人もいる?かも知れないので、、、。 参考URLから、.xlsファイルをダウンロードして上書き保存して 実際のExcelブックで試してみて下さい。 UDFそのものとUDFの運用、Excel数式、ともに改良しています。 多投稿、失礼しました。
お礼
ご回答ありがとうございました。 何度もご回答ご確認ありがとうございました。 返事遅くなってすみませんでした。
- MarcoRossiItaly
- ベストアンサー率40% (454/1128)
No.9 です。補足します。 もしも、ゼロもゼロ以外もいっぺんに、「+3」とか「-2」とか「-0」というふうに符号を付けたいという場合は、No.9 の各条件を次のとおり修正して設定することとなります。 条件式 書式記号 =a1>0 "+"G/標準;"-"G/標準;"+"G/標準 =a1=0 "+"G/標準;"-"G/標準;"±"G/標準 =a1<0 "+"G/標準;"-"G/標準;"-"G/標準 No.9 と比べると、「*(b1=0)」という因数が削除されています。「( )」も不要になりますね。 なお条件式が「=a1<0」のときに、書式記号を単に「"-"G/標準」とだけ入力すると、「--2」といった間抜けな表示になってしまいます。上のとおりとしてください。
お礼
ご回答ありがとうございました。 返事遅くなってすみませんでした。
- MarcoRossiItaly
- ベストアンサー率40% (454/1128)
添付図の B1 セルの「条件付き書式」を次のとおり設定しました。 条件 書式記号 =(a1>0)*(b1=0) "+"G/標準 =a1=0 "±"G/標準 =(a1<0)*(b1=0) "-"G/標準 設定の方法は、B1:B3 のセル範囲をドラッグし「ホームタブ>条件付き書式>新しいルール>数式を使用して…」とクリック。そのダイアログにある「次の数式を…」ボックスに条件を入力。「書式」ボタン内の「表示形式タブ>ユーザー定義>種類ボックス」に書式記号を入力。 以上の操作で 1 つの条件が設定できます。3 条件なので、あと 2 回、同じことを繰り返してください。 アクティブセル(ドラッグした範囲の中で 1 つだけ白色のセル)の行番号に、上式の行番号を合わせて入力してください。 「±」の入力は、「ぷらすまいなす」とタイプしてワープロ変換すると、全角で書けます。Times New Roman といったフォントを使うと「±」が欧文風に表示されます。 なお、どのゼロも、文字列にしているわけではなく、書式で符号を付けているだけの数値です。したがって、これらは他の計算にそのまま使えます。
- cj_mover
- ベストアンサー率76% (292/381)
#ん? 元の値が正の数値で、戻り値が0ならば、0 元の値が負の数値で、戻り値が0ならば、-0 #ということなのでは? 一応、 -0を表示したい場合だけは文字列値"-0"、他は数値、を返す数式を 妥協案的な位置づけで一例。 =IF((A1>=0)+(ABS(A1)>1000000),TRUNC(A1/1000000),"-0") セルの書式の表示形式はデフォルトのまま。 この戻り値を、 「"文字列値が混在した範囲"を"引数"として扱えない」数式 から参照するような場合は 数式の建て方を工夫しないといけません。 数字として、0 と -0 を区別して表示しつつ、 どちらも正しく数値 0 として計算させることが出来て ということだと、通常のEXCELでは、不可能です。 (#本当に出来るなら私も教わりたいですが) VBAでもUDFにしか出来なかったんじゃないかと記憶しています。 ミスが多くてすみませんでした。以上ここまで。失礼します。
- m_and_dmp
- ベストアンサー率54% (987/1817)
エクセルでは、計算結果がゼロなのですから表示形式ではどう頑張っても -0 と表示することはできないと思います。(できたとしても、+0も -0と表示される。) VBAなら、オリジナルの値が負なら - 記号を付けて表示する方法はあると思います。 エクセルで解決する姑息な方法は、(私がよくやる手ですが) =IF(セル<0,ROUNDDOWN(セル/1000000,0)-δ,ROUNDDOWN(セル/1000000,0)) ここで、δは、表示に影響を与えない、十分に小さい値とします。(たとえば、 0.00000000001) そして、表示形式を、#,##0;-#,##0 にします。
お礼
ご回答ありがとうございました。 返事遅くなってすみませんでした。
- cj_mover
- ベストアンサー率76% (292/381)
#3、4、cjです。度々すみません。 バージョンや設定によっては、ブックを閉じる度に -0 が 0 に変換されてしまうので、 うまく行かない場合は以下。 ' ' =========ここから========== Function RoundDown0Sign(値, Optional 桁 As Integer) As Single Dim sngT As Single Application.Volatile sngT = Application.RoundDown(値, 桁) If sngT = 0! And Sgn(値) < 0 Then RoundDown0Sign = -sngT Else RoundDown0Sign = sngT End If End Function ' ' =========ここまで==========
- cj_mover
- ベストアンサー率76% (292/381)
#3、cjです。 慌ててポカ、が1点、あと少し配慮するべきだった、のが1点、 計2点、訂正です。 >> ROUNDDOWN(セル/1000000,0) > そもそものROUNDDOWN関数の正しい使い方は > =ROUNDDOWN(セル,-6) "正しい"といっているのが間違いでした。 ROUNDDOWN(セル/1000000) 若しくは ROUNDDOWN(セル,-6)/1000000 ですね。 ご提示のもので正しいです。大変失礼しました。 提示した関数を、ROUNDDOWN関数と同様に扱えるように オプションを加えましたので、 コピペする内容を差し換えてくださいませ。 ' ' =========ここから========== Function RoundDown0Sign(値, Optional 桁 As Integer) As Single Dim sngT As Single sngT = Application.RoundDown(値, 桁) If sngT = 0! And Sgn(値) < 0 Then RoundDown0Sign = -sngT Else RoundDown0Sign = sngT End If End Function ' ' =========ここまで========== 以上訂正でした。
- cj_mover
- ベストアンサー率76% (292/381)
こんにちは。お邪魔します。 > ROUNDDOWN(セル/1000000,0) そもそものROUNDDOWN関数の正しい使い方は =ROUNDDOWN(セル,-6) なのではないかと思うので、確認してください。 また、 戻り値を、検索・抽出・計算などの対象にすることがあるなら、 戻り値は、数値であるべき、ということも確認してください。 その上で、 戻り値としての0について 元のセルの値、が、負数、であれば、切下げ後の値にも、負の符号を付けたい ということをお考えなのだとして、 正しく数値を返す数式を実現しつつ、元のセルの値の符号を正しく反映する という方法はEXCELに用意された関数や表示形式だけでは、不可能です。 なので、一般的な方法としてUDF(ユーザー定義関数)をお奨めします。 "マイナス0"を実現する方法としては、これが、唯一であったと記憶しています。 ' ' =========ここから========== Function RoundDown0Sign(値, 桁) As Single Dim sngT As Single sngT = Application.RoundDown(値, 桁) If sngT = 0! And Sgn(値) < 0 Then RoundDown0Sign = -sngT Else RoundDown0Sign = sngT End If End Function ' ' =========ここまで========== 準備■ 当該ブックがアクティブな状況から Alt + F11 でVisual Basic Editor を表示 Alt + I M でModule1(標準モジュール)を挿入、表示 表示されている真っ新なウィンドウに上記をコピペ Alt + F4 でVisual Basic Editor を終了、Excelに戻る 以上準備完了。 運用■ 普通にExcelの関数を扱うのと同じように =RoundDown0Sign(A1,-6) =RoundDown0Sign(A1/1000000,0) 数式を設定。 セルの書式、表示形式はデファルトの標準のまま、です。 準備に一手間掛かりますが、後々の面倒は諸々回避できます。 試してみてください。
- chonami
- ベストアンサー率43% (448/1036)
0なので普通に考えるとプラマイはないですよね。 ですので0だけ特別に指定してあげないといけません。 他の数値の表示に関しての条件がわからなので表示形式のユーザー定義で G/標準;G/標準;-0 で如何でしょうか?
お礼
ご回答ありがとうございました。 返事遅くなってすみませんでした。
- aokii
- ベストアンサー率23% (5210/22062)
=IF(A1<1000000,"-"&ROUNDDOWN(ABS(A1)/1000000,0),ROUNDDOWN(A1/1000000,0))
お礼
ご回答ありがとうございました。 返事遅くなってすみませんでした。
お礼
ご回答ありがとうございました。 うまくできしました。 返事遅くなってすみませんでした。