みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

エクセルで複数から参照した場合の小数点以下の0の表示

初めて質問させていただきます。
エクセル2000で
セルA1に2.00
セルA2に3.00
セルA3に="("&A1&")("&A2&")"
とした場合、小数点以下の.00が消えてしまいますが、
表示させる方法はありますか?
また、その小数点以下を任意に設定する方法、
例えば
(セルA1に1.001
セルA3に=ROUND(A1,A2)
とした場合のA2で小数3位までは任意に出せる。)
がありますでしょうか?

投稿日時 - 2008-12-26 23:11:05

QNo.4585572

困ってます

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

エラーチェックが要らなければ
1行で出来ますよ

セルA1に 2
セルA2に 3
セルA3に 桁数
セルA4に 結果
’-----------------------------------------------------------
Sub test_2()
Range("a4").Value = "(" & Format(Range("a1"), "0." & String(Range("a3"), "0")) & ")(" & Format(Range("a2"), "0." & String(Range("a3"), "0")) & ")"
End Sub
’-----------------------------------------------------------
>当方エクセルVBAでしたら多少は触れます。
との事なので、参考にどうぞ

投稿日時 - 2008-12-28 15:02:41

お礼

回答有難う御座います。
Format関数の応用でこんな使い方が出来るんですね、
しかも超シンプルでびっくりデス。
でも、この場合は小数点以下が必ずある場合のみみたいです。
A3に0入れるとコンマが残っちゃいます。
使用時には、現状整数のみはないので、これもありですね。

投稿日時 - 2008-12-28 19:27:56

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(6)

ANo.5

No.3です。

指定小数点以下って切り捨てちゃっていいんですか?^^;

とりあえずマクロを作ってみました。
思ったほどスマートになりませんでした・・・。
唯一メリットといえば小数点以下の桁数が増えても問題ないくらいですか・・・。
なので質問者様の要件なら今回の関数対応で十分と思われます。

セルA1:小数点付き数値
セルA2:小数点付き数値
セルA3:「(セルA1整形値)(セルA2整形値)」表示
セルA4:小数点以下桁数

【セルA1,A2,A4の値変更契機 必ず数値しか入力されない前提】
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False

Dim digit, a1val, a2val
digit = ""

If Not Intersect(Range("A1,A2,A4"), Target) Is Nothing Then
For i = 1 To Range("A4").Value
digit = digit + "0"
Next
If digit = "" Then
digit = "0"
Else
digit = "0." + digit
End If
With WorksheetFunction
a1val = .Text(.Round(Range("A1").Value, Range("A4").Value), digit)
a2val = .Text(.Round(Range("A2").Value, Range("A4").Value), digit)
End With
Range("A3").Value = "(" + CStr(a1val) + ")(" + CStr(a2val) + ")"
End If

Application.EnableEvents = True
End Sub

【数値チェックを入れたパターン】
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False

Dim digit
Dim a1val, a2val
Dim RE
digit = ""

If Not Intersect(Range("A1,A2,A4"), Target) Is Nothing Then
Set RE = CreateObject("VBScript.RegExp")
RE.Pattern = "^\d+\.?\d*$"
If RE.test(Target.Value) Then
For i = 1 To Range("A4").Value
digit = digit + "0"
Next
If digit = "" Then
digit = "0"
Else
digit = "0." + digit
End If
With WorksheetFunction
a1val = .Text(.Round(Range("A1").Value, Range("A4").Value), digit)
a2val = .Text(.Round(Range("A2").Value, Range("A4").Value), digit)
End With
Range("A3").Value = "(" + CStr(a1val) + ")(" + CStr(a2val) + ")"
Else
Target.Select
res = MsgBox("数値を入力して下さい", vbOKOnly + vbExclamation, "入力エラー")
End If
End If

Application.EnableEvents = True
End Sub

投稿日時 - 2008-12-27 14:10:21

お礼

回答ありがとうございます。
>唯一メリットといえば小数点以下の桁数が増えても問題ないくらいですか・・・。
これは関数の場合はIF~が増えちゃうってことですよね?
今回の場合は最大3桁までなので関数でいけそうですが、
関数とマクロをうまく使い分けるように心がけていますので、
このご回答は今後のコード作成に非常に参考になりました。

投稿日時 - 2008-12-27 14:58:06

ANo.4

>小数点以下の.00が消えてしまいますが、表示させる方法はありますか?
="("&TEXT(A1,"0.00")&")("&TEXT(A2,"0.00")&")"

>小数3位までは任意に出せる
右クリック-セルの書式設定-表示形式-数値に設定し、桁数を3に設定するか
ユーザー定義で0.000にするでは如何

投稿日時 - 2008-12-27 00:11:38

お礼

回答ありがとうございます。
ユーザー定義ですると常に桁数が決まってしまうので都合悪いんです。
有効桁数の関係で1,10,100の位の数字が変動するので
それにあわせて桁数も変えないといけないので。

投稿日時 - 2008-12-27 09:48:55

ANo.3

関数を使うとこうなります。
="(" & TEXT(A1,"0.00") & ")(" & TEXT(A2,"0.00") & ")"
さらに小数点以下を任意にするには
=TEXT(ROUND(A1,A2),IF(A2=1,"0.0",IF(A2=2,"0.00",IF(A2=3,"0.000","0"))))
整数部に2桁がありえる場合
=TEXT(ROUND(A1,A2),IF(A2=1,"#0.0",IF(A2=2,"#0.00",IF(A2=3,"#0.000","#0"))))
関数だとどうしてもスマートには行きませんが・・・。

そして結局文字列ですが・・・。

投稿日時 - 2008-12-27 00:08:52

補足

回答ありがとうございます。
TEXT関数の右側の”0.0”や”0.00”をどこかのセルに参照してできました。
A4に桁数指定
A5に=IF(A4=1,"0.0",IF(A4=2,"0.00",IF(A4=3,"0.000","0")))
としてそれを
A3に="("&TEXT(A1,A4)&") ("&TEXT(A2,A4)&")"
として出来ました。
遠回りでTEXTになっちゃいましたが見た目は目的どおりになりました。
VBAで処理を行った場合はもっとスマートに出来ますか?
当方エクセルVBAでしたら多少は触れます。

投稿日時 - 2008-12-27 09:31:29

="("&TEXT(A1,"0.00")&")("&TEXT(A1,"0.00")&")"
では如何?

セル A1 に 1.001
セル A2 に 3.00
の場合、式 =ROUND(A1,A2) は 1.001 と「小数3位まで」表示されませんか?貴方の場合、どのように表示されますか?

投稿日時 - 2008-12-27 00:07:21

お礼

回答ありがとうございます。
小数点以下の桁数を任意に表示させたいのです。
例えばA4セルに桁数を入力するセルを作って(2とか3を任意に入力)、
それに対応する小数点以下の桁数を表示
{A3に="("&A1&")("&A2&")"と入れた場合のA1とA2の桁数}
させたいのです。
TEXTのばあい固定されてしまうのでちょっと使いにくいので
ほかに方法がないかと思いました。

投稿日時 - 2008-12-27 09:30:06

ANo.1

2.00と3.00はセル上のデータでは 2と3です
おそらく書式設定で0.00としているのでそのように表示されているだけ。
="("&A1&")("&A2&")"を実施すると文字列として表示されますので、数値の書式設定0.00は反映されません。
表示させるにはA1 A2セルを文字列で2.00 3.00と入力するしかない、もしくは.00を追加した文字列に変化させるか。
="("&A1&".00)("&A2&".00)"

投稿日時 - 2008-12-26 23:42:36

お礼

やはり文字列としてしか出来ないのですね。
有効桁数の関係で0であっても表示させたかったのですが。
ありがとうございました。おかげですっきりしました。

投稿日時 - 2008-12-27 00:01:04

あなたにオススメの質問