2017-07-09 14 views
0

私はいくつかのビジネス値を格納するExcelマクロを持っています。VBAを使用してプログラムでExcelセルの小数点をすべて表示する方法

セルの1つでは、値は999.999999と表示されますが、1000が表示され、数式バーには999.999999という値が表示されます。これらはあるタイプから別のタイプに変換された値なので、小数点を丸めずに値をそのまま表示したいと思っています。

私は、値を入力する前にセルをテキスト形式に変換することを考えましたが、これはさまざまな地域設定でこれをサポートする必要があるため動作しません。

表示する小数点以下の桁数をExcel VBAで取得する方法については、大きな助けとなります。セル値移入する

現在コード:

Range.Offset(0,0).Valueの=応答ここ

を、応答文字列形式で999.999999すなわち変換された値です。

+0

:VBAが、VBAのコードは次のようになりますRange.Offset(0,0).Valueの= CDBL(レスポンス)それ以外の場合は、多分あなたは、文字列の代わりに二重のような応答を宣言することができ –

+0

私はそれを試みたが、それは常に私に0.00を返し、あまり役に立たない。また、応答変数は文字列の値を返すユーティリティツールからその値を取得しますが、Excel VBAで文字列からdoubleへの変換が役立つかどうかはわかりません。 –

+0

値を設定する前にrange.numberformat = "@"を使用してください。正しいセルをフォーマットするように同じオフセットパラメータを含めるようにしてください。 –

答えて

1

一つの方法は、のような小数の#のチェック次のようになります。

Dim str As String 
str = Response 

If Len(str) - InStr(str, ".") > 2 Then 
    Range.Offset(0, 0).Value = "'" & str 
Else 
    Range.Offset(0, 0).Value = str 
End If 

それとも単に全体の数を確認するために、常にRange.Offset(0, 0).Value = "'" & Responseを行う;)


別の方法です数字形式の変更は次のようになります。

Dim str As String, x As Byte 
str = Response 
x = Len(str) - InStr(str, ".") 
Range.Offset(0, 0).Value = str 

If x < 2 Then x = 2 
Range.Offset(0, 0).NumberFormat = "0." & Application.Rept("0", x) 

EDIT:

Range.Offset(0, 0).NumberFormat = "0" & Application.DecimalSeparator & Application.Rept("0", x) 
また、変更後に編集2

If Len(Range.Offset(0, 0).Text) - Len(Range.Offset(0, 0).Value) Then 
    Range.Offset(0, 0).NumberFormat = "0" & Application.DecimalSeparator & Application.Rept("0", x) 
End If 

のように行うことができます

:あなたのような右のいずれかを取得するためにApplication.DecimalSeparatorを使用することができます局在化のための
セルの自動セル化の場合は、Ronとdirectのアプローチを使用できますLYだけ.3ことが3.として示さ30.3につながる#を用い

0.0############### 

に細胞数形式を設定しました。区切り文字として,を使用する場所に変更すると、自動的に数値書式が変更されるはずです。

+0

こんにちはDirk、私はこのアプローチを試みました、そして、それはいくつかのケースのために働いているようです。私が現在直面している問題は、異なるセルのNumber形式を上書きすることです。例えば、私は1000のセルの値を持っている場合、数値の形式は0,00に設定されていると私は1234.789456のような値を入力しようとすると、12,34,79だけ数字の形式は0,00を示しています。どんな提案も高く評価されます。 –

+0

@ManishAgarwalの自動フォーマット変更の場合は、Ronのアプローチを使用できます。ちょうど私の編集を見て、それがあなたが探しているものかどうかを教えてください。 –

+0

VBAのFormatNumber関数に関するあなたの考えは? Range.Offset(0、0).Value = FormatNumber(lstrResponse、lintDecimalLength、、Tristate.TristateTrue) –

-1

このリンクは役に立つはずです。お楽しみください:
http://www.excelhowto.com/macros/formatting-a-range-of-cells-in-excel-vba/ また、式を介してROUND、CEILING、またはFLOOR演算を実行することができます... 丸めはVBAで実行でき、精度を指定します。 セルに小数点以下の桁数が0になるように事前に割り当てられている場合、999.99999は1000になります。「0.0000000」などの数値形式を使用すると、このように動作します。

+0

なぜそれをダウングレードしますか? – JGFMK

+2

私はダウングレードしませんでしたが、それはユーザーの質問に答えなかったからだと思いますが、単にVBAでのセルフォーマットの一般的な議論に過ぎません。このフォーラムでは、** Answers **が質問に集中することが好ましいです。一般的な議論はコメントに属する。 –

1

Excelの精度は15桁の最大値に制限されているので、あなたは、単にカスタムとしてセルの書式を設定することができます

#.############### 

(15# 'sの小数点以下)

あなたはせずにこれを行うことができます

これを試して

Option Explicit 

Sub ShowAllDecimals() 
    Dim WS As Worksheet 
    Dim R As Range, C As Range 

Set WS = Worksheets("sheet1") 
With WS 
    Set R = .Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp)) 
End With 

For Each C In R 
    If IsNumeric(C) Then _ 
     C.NumberFormat = "#.################" 
Next C 

End Sub 
関連する問題