メイン コンテンツへスキップ
サポート
Microsoft アカウントでサインイン
サインインまたはアカウントを作成してください。
こんにちは、
別のアカウントを選択してください。
複数のアカウントがあります
サインインに使用するアカウントを選択してください。

TechKnowledge コンテンツ

質問: 2 つの通貨値を比較する VBA コードが記述されています。 このコードの例を次に示します。

If ccur(cost) > ccur(1000) then

このコード行を実行すると、データ型の非互換性または型の不一致型エラー メッセージが発生します。通貨Windows設定は、現在、通貨記号の英語の "ポンド" 記号として定義されています。 通貨記号を "$" に変更すると、コードは正常に実行されます。 ここで何が起こっていますか。この問題を回避する方法はありますか?


回答: VBA では、Ccur() 関数は、このフィールドを評価するときにコントロール パネルの通貨設定を常に尊重します。 Dynamics VBA の実装では常にフィールド値が文字列として渡されます。そのため、Windows の通貨設定と一致しない通貨値が評価される場合は常に、この問題が発生します。


VBA ヘルプ ファイルでは、国際的に認識されているデータ型から別のデータ型への変換を提供するために、Val の代わりにデータ型変換関数を使用する必要があることを示します。 たとえば、CCur() 関数を使用すると、コンピューターのロケール設定に応じて、小数点区切り記号、桁区切り記号、さまざまな通貨オプションが正しく認識されます。


この理解の下で、Microsoft Dynamics GP の操作について次の点に注意してください。

  • Windows Currency 設定が "pound" に設定されていない場合、CCur(" 1000") は型の不一致と等しくなります (つまり、この文字列は有効な通貨ではありません)。

  • "pound" に設定されている場合、CCur(" 1000") は値 1000 を返しますが、CCur("$1000") は型の不一致エラーと等しくなります。

VBA から通貨を扱う最善の方法は、数値以外の記号を持つ文字列を数値 (または通貨) 値に変換する関数を記述する方法です。 たとえば、次のようになります。

If CurrencyValueFromDynField(cost) > ccur(1000) then

ここで、CurrencyValueFromDynField という名前の関数は次のように定義されます。 このコードは、進むか末尾にマイナス記号が付いた負の数、角かっこで囲まれている負の数、通貨記号と数値の間にスペースがある負の数を正しく処理します。

Public Function CurrencyValueFromDynField(FieldString As String) As Currency
Dim i As Integer
Dim TempChar, TempString As String

' Strip off all non-numeric characters
TempString = ""
For i = 1 To Len(FieldString)
TempChar = Mid(FieldString, i, 1)
If InStr("1234567890.,-()", TempChar) > 0 Then
TempString = TempString & TempChar
End If
Next
FieldString = TempString

' Return the numeric value of the string (as a currency data type )
CurrencyValueFromDynField = CCur(FieldString)
End Function

この記事は TechKnowledge Document ID:10036 でした

ヘルプを表示

その他のオプションが必要ですか?

サブスクリプションの特典の参照、トレーニング コースの閲覧、デバイスのセキュリティ保護方法などについて説明します。

コミュニティは、質問をしたり質問の答えを得たり、フィードバックを提供したり、豊富な知識を持つ専門家の意見を聞いたりするのに役立ちます。

この情報は役に立ちましたか?

言語の品質にどの程度満足していますか?
どのような要因がお客様の操作性に影響しましたか?
[送信] を押すと、Microsoft の製品とサービスの改善にフィードバックが使用されます。 IT 管理者はこのデータを収集できます。 プライバシーに関する声明。

フィードバックをいただき、ありがとうございます。

×