Bộ tách cuối cùng 1000 sử dụng VBA

Aug 16 2020

Tôi đã cố gắng tải giải pháp VBA cho dấu phân tách 1000 vì trong trường hợp của tôi, không thể sử dụng công thức và phải được thực hiện với mã tùy chỉnh. Giải pháp hiện tại được lấy từ Định dạng số câu trả lời với Dấu phân cách hàng nghìn và Số thập phân nếu cần thiết

Đây là mã:

Function CustomFormat(InputValue As Double) As String
    CustomFormat = Format(InputValue, "# ###")
    If (Right(CustomFormat, 1) = ".") Then
        CustomFormat = Left(CustomFormat, Len(CustomFormat) - 1)
    End If
End Function

Nó đang hoạt động với những con số như 1000, nhưng nó không hoạt động với 1000000. Ngoài ra 1000000000 sẽ không hoạt động. Tôi hiện đang nghiên cứu giải pháp, nhưng nếu ai đó có điều gì đó để chia sẻ, nó sẽ được đánh giá cao.

Trong trường hợp sử dụng giải pháp gốc:

Function CustomFormat(InputValue As Double) As String
    CustomFormat = Format(InputValue, "#,###.##")
    If (Right(CustomFormat, 1) = ".") Then
        CustomFormat = Left(CustomFormat, Len(CustomFormat) - 1)
    End If
End Function

Trả lời

5 SuperSymmetry Aug 16 2020 at 19:40

Tôi nghĩ vba cần dấu phân tách hàng nghìn được xác định trong cài đặt khu vực của bạn. Vì nó là dấu phẩy trong trường hợp của bạn, bạn có thể làm điều gì đó như thế này

Function CustomFormat(InputValue As Double) As String
    CustomFormat = Format(InputValue, "#,###")
    If (Right(CustomFormat, 1) = ".") Then
        CustomFormat = Left(CustomFormat, Len(CustomFormat) - 1)
    End If
    CustomFormat = Replace(CustomFormat, ",", " ")
End Function

Một cách tiếp cận khác là đọc dấu phân cách từ sổ đăng ký. Điều này sẽ hoạt động trong các cài đặt khu vực khác nhau.

Function CustomFormat(InputValue As Double) As String
    Dim sThousandsSep As String
    Dim sDecimalSep As String
    Dim sFormat As String
    
    sThousandsSep = Application.International(xlThousandsSeparator)
    sDecimalSep = Application.International(xlDecimalSeparator)
    
    ' Up to 6 decimal places
    sFormat = "#" & sThousandsSep & "###" & sDecimalSep & "######"
    
    CustomFormat = Format(InputValue, sFormat)
    If (Right$(CustomFormat, 1) = sDecimalSep) Then CustomFormat = Left$(CustomFormat, Len(CustomFormat) - 1)
    End If
    
    ' Replace the thousands separator with a space
    ' or any other character
    CustomFormat = Replace(CustomFormat, sThousandsSep, " ")
End Function

Chỉnh sửa Chức năng đã thay đổi để sử dụng Application.Internationaltheo đề xuất của @RonRosenfeld.

1 TinMan Aug 16 2020 at 23:38

Bạn cần mở rộng định dạng số của mình để bao gồm các số lớn hơn.

### ### ## 0 ","