VBA:

2017-03-01 21 views
1

を昏睡ポイントと小数を表示していない私はポイントで表示されたマクロ内のすべての番号を持ちたいとインスタンスのVBA:

を昏睡ないこの表示を「0.03」が、私は「0.03」を希望します:

をこれはまだ共同を表示

  • :私はない作業を行うコードのセットを試してみました

    Dim MyNumber As Single 
    MyNumber = 0.03 
    MsgBox (MyNumber) 
    

    MA:これはまだコマを表示し、このディスプレイではなく、コマドット全体のマクロ

    MyNumber = Format(MyNumber, "##0.00") 
    
  • には適用されませんが、全体のマクロ

    MsgBox (Replace(MyNumber, ",", ".")) 
    
  • には適用されません

    Application.DecimalSeparator = "." 
    

ありがとうございます!

+4

これはあなたの地域と言語のコントロールパネル(Win7のコントロールパネル=>地域と言語=>小数点記号)あなたの問題を解決するはずです。 – majjam

+0

@ bamie9l:回答ありがとうございますが、私はマクロに対してのみこれをやりたいのですが、誰かが別の地域のマクロからでも使用していて、それでもポイントが表示されるようにしたいのですが。 – Jonathan

+0

'MsgBox'や' Debug.print'などのアクションをWindowsの地域設定と異なるフォーマットで表示するには、これらの値を明示的にフォーマットする必要があります。 –

答えて

1

、3つの関数がKERNEL32ダイナミックリンクライブラリからベローズ宣言する必要があります。

Private Declare Function GetUserDefaultLCID% Lib "kernel32"() 
Private Declare Function GetLocaleInfoA Lib "kernel32" (ByVal Locale As Long, ByVal LCType As Long, ByVal lpLCData As String, ByVal cchData As Long) As Long 
Private Declare Function SetLocaleInfoA Lib "kernel32" (ByVal Locale As Long, ByVal LCType As Long, ByVal lpLCData As String) As Boolean 
  • 最初は、ユーザーのデフォルトのID
  • を二を取得するのに役立ちます地元の人々の価値を得るために(したがって復元する)
  • 第3は、地元の人々の価値を設定するのに役立つでしょう
小数のために

ローカル型の値は、( - 進E - & HEを書くために、いくつかの同類)14である

は次に、プログラムは次のように見ています

' record the settings in the variable LocalSettingsDecimal 
Dim LocalSettingsDecimal As String 
Dim Buffer As String 
Buffer = String(256, 0) 
Dim le As Integer 
le = GetLocaleInfoA(GetUserDefaultLCID(), 14, Buffer, Len(Buffer)) 
LocalSettingsDecimal = Left(Buffer, le - 1) 

' force decimal settings to '.' 
Call SetLocaleInfoA(GetUserDefaultLCID(), 14, ".") 

' body 
Dim MyNumber As Single 
MyNumber = 0.03 
MsgBox (MyNumber) 

' set back the decimal settings 
Call SetLocaleInfoA(GetUserDefaultLCID(), 14, LocalSettingsDecimal) 

レッツノートを、その残念ながら、プログラムボディが失敗した場合、設定は復元されません...しかし、これはまだ問題に答える

0

ほとんどの場合、Excelの設定によって競合が発生している可能性があります。

1. On the File tab, click the Options button 
2. Click the Advanced tab 
3. Clear/Uncheck the "Use system separators" option. 

コードを入力してください。

+0

答えをありがとう、私はマクロに対してのみこれをやりたいと思います。誰かが別の設定からマクロを使用していて、それでもポイントが表示されたいのであれば。このマクロの小数点の設定を変更することは可能ですか? – Jonathan

+0

また、@ bamie9lでコメントに記載されているように、コントロールパネルの地域と言語の設定から昏睡状態が生じるので、あなたの答えは役に立たない。 – Jonathan

3

これは完了したよりも簡単です。 VBAエディタでは、小数点記号はドットです。ただし、MsgBox関数(とFormat関数)は、結果を書式設定するために、Excelの設定ではなくWindowsの地域設定を使用します。

MsgBoxに任意の書式設定を使用して数値を表示させるには、必要に応じて書式設定された値の文字列を作成する必要があります。ここで

はそれを行うための一つの方法です:


Option Explicit 
Sub dural() 
Dim S As String 
Dim D As Double 
Const myDecSep As String = "." 

D = 1234.56 

S = Format(D, "0.00") 'will format using the system separator 

S = Replace(S, Application.DecimalSeparator, myDecSep) 

MsgBox S 

End Sub 

あなたは、小数点と桁区切りの両方を使用する場合ことに注意してください、とあなたが例えば、入れ替えされている場合は、コンマとドットを使用する場合は、ドットを使用してすべてのカンマを置き換えないように2回行う必要があります。逆の場合も同様です。


Option Explicit 
Sub dural() 
Dim S As String 
Dim D As Double 
Const myDecSep As String = "." 
Const myThousSep As String = "," 

D = 1234.56 

S = Format(D, "#,##0.00") 

S = Replace(S, Application.DecimalSeparator, Chr(1)) 
S = Replace(S, Application.ThousandsSeparator, Chr(2)) 
S = Replace(S, Chr(1), myDecSep) 
S = Replace(S, Chr(2), myThousSep) 

MsgBox S 

End Sub 
01最初のステップとして
+0

ありがとう@RonRosenfeld!それは非常に良い答えであり、十分な評判を得るとすぐに私はアップに投票します。 しかし、多くの研究の後、私は解決策を見出すことができましたが、まだ美しくはありませんが、実際には私の質問に答えて、私は答えとしてこれを検証します。 – Jonathan