Need a Macro to find numbers in a text string and add a thousands comma (1 người xem)

  • Thread starter Thread starter SA_DQ
  • Ngày gửi Ngày gửi
Liên hệ QC

Người dùng đang xem chủ đề này

SA_DQ

/(hông là gì!
Thành viên danh dự
Tham gia
8/6/06
Bài viết
14,611
Được thích
22,931
Nghề nghiệp
U80
I have had no luck finding a solution to my problem but am confident it can be done... My cell contents are formatted as text and some contain numbers, some do not, some already contain thousands separators, others do not. Here is an example:

Speed: 20000

Free Speed: 120000

Spindle Speed: 15,000

Voltage: 115V/230V

(Ui: 1025 -1085)

Motor HP: 1-1/5

If the macro were applied to a selection containing the above examples, I would like for it to only update the number values in 'Speed' and 'Free Speed' to 20,000 and 120,000 respectively.. . . Any suggestions? Thanks in advance and happy holidays!​
 
Bài này những ai mới học dùng For Next cũng được
Coder bậc trung như quanghai, leonguyen, giải bằng RegExp
Cấp cao như Cò già thì khỏi nói.

Vấn đề là từ các chuỗi ban đầu:
Speed: 20000
Free Speed: 120000
Spindle Speed: 15,000
Voltage: 115V/230V
(Ui: 1025 -1085)
Motor HP: 1-1/5


Kết quả mong muốn là:

Speed: 20,000
Free Speed: 120
,000
Spindle Speed: 15
,000
Voltage: 115V/230V
(Ui: 1
,025 -1,085)
Motor HP: 1-1/5

Yêu cầu 2 là: "Update tại chỗ"
 
Upvote 0
Bài này những ai mới học dùng For Next cũng được
Coder bậc trung như quanghai, leonguyen, giải bằng RegExp
Cấp cao như Cò già thì khỏi nói.
Thầy "gỡ" tên em ra dùm ạ, em chưa viết 1 bài code nào trên GPE, thầy "tặng" em câu đó là số em chấm hết trên GPE, không giám ngó tới box Lập trình, để em học hỏi với nha thầy ! Thầy xóa comment này dùm em với ạ, cảm ơn thầy !
 
Upvote 0
I have had no luck finding a solution to my problem but am confident it can be done... My cell contents are formatted as text and some contain numbers, some do not, some already contain thousands separators, others do not. Here is an example:

Speed: 20000

Free Speed: 120000

Spindle Speed: 15,000

Voltage: 115V/230V

(Ui: 1025 -1085)

Motor HP: 1-1/5

If the macro were applied to a selection containing the above examples, I would like for it to only update the number values in 'Speed' and 'Free Speed' to 20,000 and 120,000 respectively.. . . Any suggestions? Thanks in advance and happy holidays!​

Why dont you try this to see if this is the right solution or not?

PHP:
Sub test()
Dim temp, i, result
temp = Range([A1], [A65536].End(3)).Value
For i = 1 To UBound(temp)
   With CreateObject("vbscript.regexp")
      .Global = True
      .Pattern = ".* "
      result = .Replace(temp(i, 1), "")
      If IsNumeric(result) Then
         result = Format(result, "#000,0")
         temp(i, 1) = Left(temp(i, 1), InStrRev(temp(i, 1), " ")) & result
      End If
   End With
Next
[A1].Resize(i - 1, 1) = temp
End Sub
Below is another solution if the code above doesnot meet your need
PHP:
Sub test2()
Dim Stemp(), temp, result, i
Stemp = Range([A1], [A65536].End(3)).Value
For i = 1 To UBound(Stemp)
   With CreateObject("vbscript.regexp")
      .Global = True
      .Pattern = "\d+"
      Set temp = .Execute(Stemp(i, 1))
       For Each result In temp
         If result > 1000 Then
            Stemp(i, 1) = Replace(Stemp(i, 1), result, Format(result, "#000,0"))
         End If
       Next
   End With
Next
[A1].Resize(i - 1, 1) = Stemp
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Ý tác giả: "only update the number values in 'Speed' and 'Free Speed'", vậy có phải là Test() của anh Hải đúng, hay Test2() như gợi ý của thầy Mỹ đúng ạ?
Kết quả mong muốn là:

Speed: 20,000
Free Speed: 120
,000
Spindle Speed: 15
,000
Voltage: 115V/230V
(Ui:
1,025 -1,085)
Motor HP: 1-1/5

Yêu cầu 2 là: "Update tại chỗ"
 
Upvote 0
Quang Hải,
1. Bài trả lời không nên viết: "Tại sao Ông/Anh không dùng code sau", trước đây code chưa đưa lên thì lấy gì mà thử, bây giờ đưa code lên người ta chưa kịp thử đã hỏi tại sao không thử đi

Nên viết thế này:
ông/ anh thử code sau đây xem đúng không nhé
please try this code if it matchs your requirement
hoặc "try this code"

Thử xem các link sau:
http://www.excelforum.com/showthread.php?t=886270&p=3057841&viewfull=1#post3057841
http://www.excelforum.com/showthread.php?t=884166&p=3047728&viewfull=1#post3047728
http://www.excelforum.com/showthread.php?t=884275&p=3048270&viewfull=1#post3048270

2. Định dạng có dấu phân cách hàng ngàn bằng VBA là format(text, "#,###") bất kể hệ thống đang dùng dấu hàng ngàn là gì.
 
Upvote 0
Ý tác giả: "only update the number values in 'Speed' and 'Free Speed'", vậy có phải là Test() của anh Hải đúng, hay Test2() như gợi ý của thầy Mỹ đúng ạ?

Câu tiếng Anh mang nghĩa là: số nào có phân cách hàng ngàn rồi thì thôi (15,000), số nào chưa có thì sửa cho nó có rồi update vào.

Tuy nhiên còn sót 1 dòng (Ui: 1025 -1085) không thấy nói tới, tôi cho rằng tác giả yêu cầu sót
 
Upvote 0
Câu tiếng Anh mang nghĩa là: số nào có phân cách hàng ngàn rồi thì thôi (15,000), số nào chưa có thì sửa cho nó có rồi update vào.

Tuy nhiên còn sót 1 dòng (Ui: 1025 -1085) không thấy nói tới, tôi cho rằng tác giả yêu cầu sót

"Why dont you....?" hình như hỏng phải là câu hỏi mặc dù khi viết thì có dấu chấm hỏi. Nếu em không nhầm thì đây là 1 câu thuộc dạng đề nghị hay gợi ý gì đó. Chao ôi ngôn ngữ.

Em đoán Ui là thông số của Universal Interface, tương tự như User's Manual có lẻ không cần thêm dấu phân cách
Chắc phải đi kiếm tác giả quá các anh ơi.

........................................................

Chiều này vào trang Web của đề tài này, bỗng dưng phát hiện ra rằng tác giả của câu hỏi này xoá mất đoạn (Ui: 1025 -1085).
 
Lần chỉnh sửa cuối:
Upvote 0
Chiều này vào trang Web của đề tài này, bỗng dưng phát hiện ra rằng tác giả của câu hỏi này xoá mất đoạn (Ui: 1025 -1085).
Xóa đi thì tác giả sẽ thiệt thòi. Vì nếu để nguyên và nói đừng làm dòng ấy, thì sẽ như ý. Xóa đi, người trả lời không biết rằng có ngoại lệ, đưa vào dữ liệu thực sẽ bị xử lý tất tần tật.
 
Upvote 0
Web KT

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

Back
Top Bottom