Macro/UDF để chuyển đối số có dấu chấm thập phân sang số có dấu phẩy thập phân

Liên hệ QC

jubinell

Thành viên mới
Tham gia
27/11/09
Bài viết
37
Được thích
16
Nghề nghiệp
Tư vấn kinh doanh/kinh tế, nhạc sỹ, game thủ (keke
Chào các bạn,

Theo mình biết thì khi định dạnh số trong Excel, chương trình dùng dấu chấm hay dấu phẩy để cách thập phân/hàng nghìn tùy thuộc vào system locale đang để chế độ của nước nào. Nếu là các nước Anh, Mỹ thì Excel xài dấu chấm để cách thập phân, dấu phẩy để cách hàng nghìn, còn nếu là Pháp, Việt Nam, v.v. thì là ngược lại.

Mình đang cần phải hiển thị một số các số theo cả hai cơ chuẩn trong cùng một workbook. Mình ko nghĩ là có thể làm đc điều này, cho nên chọn giải pháp để 1 quy chuẩn Anh/Mỹ cho tất cả các số, còn chỗ cần phải hiển thị số theo quy chuẩn Pháp/Việt thì để định dạng text thôi.

Mình muốn hỏi có macro/UDF nào có thể đổi từ định dạng số sang định dạng chữ như dưới đây:
134500 --> "134.500"
4.27 --> "4,27"
3012.6 -- "3.012,6"

Xin cám ơn các bạn.
 
Lần chỉnh sửa cuối:
Rất đơn giản và dễ hiểu...cảm ơn bạn nhiều nhé?
(:
 
Upvote 0
Selection.NumberFormat = "#,##0.00"
Application.CalculateFull

Cho mình hỏi lại...dùng định dạng "#,##0.00" thì số 3012.6 sẽ trở thành 3,012.6. Tuy vậy mình muốn số đó thành "3.012,6" thì phải làm như thế nào hả bạn (system locale của mình đang để là United States).
 
Upvote 0
Bạn vào control Panel chỉnh lại
Hoặc vào option của excel chỉnh lại dấu "," --> "." hoặc ngược lại
 
Upvote 0
Vậy là bạn không đọc kỹ bài viết của mình rồi. Mình muốn cả hai cách ghi Anh/Pháp trong cùng một worksheet. Vì mình nghĩ điều này không thể thực hiện được cho nên mới đang suy nghĩ giải pháp 1 nhóm thì để định dạng số, nhóm kia chuyển qua định dạng chữ có thêm dấu chấm cách nghìn và dấu phẩy cách thập phân.
 
Upvote 0
Cho mình hỏi lại...dùng định dạng "#,##0.00" thì số 3012.6 sẽ trở thành 3,012.6. Tuy vậy mình muốn số đó thành "3.012,6" thì phải làm như thế nào hả bạn (system locale của mình đang để là United States).
Ví dụ cho bạn dễ hiểu
PHP:
Sub Test()
  Dim Tmp
  Tmp = Range("A1").Value
  Tmp = Replace(Format(Tmp, "#,##0.00"), ",", vbBack)
  Tmp = Replace(Format(Tmp, "#,##0.#"), ".", ",")
  Tmp = Replace(Format(Tmp, "#,##0.#"), vbBack, ".")
  MsgBox Tmp
End Sub
Trong đó, cell A1 là nơi bạn gõ số vào
 
Upvote 0
Bạn kiểm tra giúp mọi fương án nha!

Mã:
Option Explicit
[B]Function NumToString(Num As Double) As String[/B]
 Dim TPh As Double:                             Dim Am As String
 Const Ng As Integer = 10 ^ 3
 
 If Num < 0 Then
   Num = Abs(Num):         Am = "-"
 End If
 If Int(Num) <> Num Then
   TPh = Num - Int(Num)
   If Len(TPh) > 5 Then TPh = Int(TPh * 10 ^ 5)
   If TPh Mod 10 > 4 Then
      TPh = TPh \ 10 + 1
   Else
      TPh = TPh \ 10
   End If
   Do
      If TPh Mod 10 = 0 Then
         TPh = TPh \ 10
      Else
         Exit Do
      End If
   Loop
   NumToString = "." & CStr(TPh)
 End If
 Num = Int(Num)
 Do
   If Num > Ng Then
      NumToString = "," & CStr(Num Mod Ng) & NumToString
      Num = Num \ Ng
   Else
      NumToString = Am & CStr(Num) & NumToString:       Exit Function
   End If
 Loop
[B]End Function[/B]
 
Lần chỉnh sửa cuối:
Upvote 0
Cám ơn cả nhà...để mình xài thử xem có kết quả gì không rồi sẽ báo lại sau nhé?
 
Upvote 0
Ví dụ cho bạn dễ hiểu
PHP:
Sub Test()
  Dim Tmp
  Tmp = Range("A1").Value
  Tmp = Replace(Format(Tmp, "#,##0.00"), ",", vbBack)
  Tmp = Replace(Format(Tmp, "#,##0.#"), ".", ",")
  Tmp = Replace(Format(Tmp, "#,##0.#"), vbBack, ".")
  MsgBox Tmp
End Sub
Trong đó, cell A1 là nơi bạn gõ số vào
Tôi nghĩ như thế này mới đúng chứ:
PHP:
Sub Test()
  Dim Tmp
  Tmp = Range("A1").Value
  Tmp = Replace(Format(Tmp, "#,##0.00"), ",", vbBack)
  Tmp = Replace(Tmp, ".", ",")
  Tmp = Replace(Tmp, vbBack, ".")
  MsgBox Tmp
End Sub
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom