プロが教えるわが家の防犯対策術!

ユーザーフォーム添付画像で単位が「円」の時「価格」の数値を桁区切り小数点以下2位としたいのですがどのようにしたらよいでしょうか?単位「円」でない時は「ドル」の選択になります。
1対になっているエクセルシートでは以下としています。
Dim rng As Range
For Each rng In Range("H4", Cells(Rows.Count, 8).End(xlUp))
With rng
If .Offset(, 1).Value = "円" Then
.NumberFormatLocal = "#,##0.00_ ;[赤]-#,##0.00 "
End If
End With
Next rng
宜しく御願いします。

「エクセルVBA、ユーザーフォームでIf関」の質問画像

A 回答 (1件)

ユーザーフォームの話ですから、本来は、ユーザーフォームについて書いていただかないと分かりません。



画像から、
価格   単位
*****  ******
のそれぞれのオブジェクトの名称がありませんが、
価格の方がTextBox で、単位の方が ComboBox でしょうか?

現状のままでは、肝心な部分が抜けています。円は、USDと等価ではありませんから、ComboBox で表示を変えたら、その価格も変わらなくてはなりません。円価格を基調としているなら、レートで換算しなくてはなりません。USDを基調としているなら、円に変えた時に、それに換算しなければなりませんが、四捨五入などしていたら、元値段がわからなくなってしまいます。

以下は、そうした考慮はまったくなされていません。
単に表示だけの処理です。

'//

Private Sub UserForm_Initialize()
 ComboBox1.List = Array(, "円", "USD")
End Sub

Private Sub ComboBox1_Change()
Dim idx As Long
 idx = ComboBox1.ListIndex
 If Val(TextBox1.Value) > 0 Then
  TextBox1.Value = FormatChange(TextBox1.Value, idx)
 End If
End Sub
Function FormatChange(ByVal str_val As String, idx As Long)
Dim pValue As Double
  If IsNumeric(str_val) Then
   pValue = CDbl(str_val)
  Else
   Exit Function
  End If
  Select Case idx
  Case 1
   FormatChange = Format$(pValue, "#,##0") '円
  Case 2
   FormatChange = Format$(pValue, "#,##0.00") '$
  Case Else
   FormatChange = Format$(pValue, "#,##0.00")
  End Select
End Function

Private Sub TextBox1_Enter()
TextBox1.Value = FormatChange(TextBox1.Value, ComboBox1.ListIndex)
End Sub

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
TextBox1.Value = FormatChange(TextBox1.Value, ComboBox1.ListIndex)
End Sub
    • good
    • 0
この回答へのお礼

まだ詳細の解読これからですが回答有難う御座います。

お礼日時:2017/06/21 17:45

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!