Cách xử lý khoảng trắng trong dãy số

Liên hệ QC

XuanHtt

Thành viên mới
Tham gia
16/12/19
Bài viết
14
Được thích
1
Mọi người ơi,

Em có một vấn đề trong việc xử lý khoảng trắng trong dãy số như sau: khi khách hàng gửi đơn đặt hàng sang bằng PDF, em có code VBA để đọc file này chuyển vào excel để xử lý bước kế tiếp là tách dữ liệu, đưa vào 2 template excel khác. Tuy nhiên, do số tiền trong file PDF lại không theo định dạng số, mà là text do có khoảng trắng ở giữa (ví dụ: 7 234 567.68) nên em bị bí, không biết nên dùng hàm nào để chuyển nó về dạng số ạ. Nhờ mọi người tư vấn giúp em. Em cám ơn nhiều ạ. :heart: :heart: :heart:
 
Mọi người ơi,

Em có một vấn đề trong việc xử lý khoảng trắng trong dãy số như sau: khi khách hàng gửi đơn đặt hàng sang bằng PDF, em có code VBA để đọc file này chuyển vào excel để xử lý bước kế tiếp là tách dữ liệu, đưa vào 2 template excel khác. Tuy nhiên, do số tiền trong file PDF lại không theo định dạng số, mà là text do có khoảng trắng ở giữa (ví dụ: 7 234 567.68) nên em bị bí, không biết nên dùng hàm nào để chuyển nó về dạng số ạ. Nhờ mọi người tư vấn giúp em. Em cám ơn nhiều ạ. :heart: :heart: :heart:
Bạn dùng hàm replace để thay thế và lấy chuỗi đó * 1 hoặc + 0 sẽ ra số
 
Mọi người ơi,
Em có một vấn đề trong việc xử lý khoảng trắng trong dãy số như sau: khi khách hàng gửi đơn đặt hàng sang bằng PDF, em có code VBA để đọc file này chuyển vào excel để xử lý bước kế tiếp là tách dữ liệu, đưa vào 2 template excel khác. Tuy nhiên, do số tiền trong file PDF lại không theo định dạng số, mà là text do có khoảng trắng ở giữa (ví dụ: 7 234 567.68) nên em bị bí, không biết nên dùng hàm nào để chuyển nó về dạng số ạ. Nhờ mọi người tư vấn giúp em. Em cám ơn nhiều ạ. :heart: :heart: :heart:
Chọn vùng chứa dữ liệu rồi nhấn Ctrl + H, chọn thẻ Replace, click vào Find what và nhấn phím dài xong nhấn Replace All.
 
Bạn dùng hàm replace để thay thế và lấy chuỗi đó * 1 hoặc + 0 sẽ ra số
Bạn ơi, do là trong dữ liệu copy từ file PDF qua excel, nó có cả những dòng là chữ (ví dụ như ghi chú), nếu dùng hàm replace thì nó sẽ ảnh hưởng những dòng này ấy :(. Bạn có cách nào khác tư vấn giúp mình nha. Cám ơn bạn nhiều lắm.
Bài đã được tự động gộp:

Chọn vùng chứa dữ liệu rồi nhấn Ctrl + H, chọn thẻ Replace, click vào Find what và nhấn phím dài xong nhấn Replace All.
Cảm ơn bạn, do ngoài số, mình còn những dãy chữ nên nếu dùng Replace sẽ ảnh hưởng những dãy chữ này do nó dính sát vô nhau hết. Ngoài cách này ra, mình còn cách nào khác nữa không ạ? Cám ơn bạn nhiều ạ.
 
Em có một vấn đề trong việc xử lý khoảng trắng trong dãy số như sau: khi khách hàng gửi đơn đặt hàng sang bằng PDF, em có code VBA để đọc file này chuyển vào excel để xử lý bước kế tiếp là tách dữ liệu, đưa vào 2 template excel khác. Tuy nhiên, do số tiền trong file PDF lại không theo định dạng số, mà là text do có khoảng trắng ở giữa (ví dụ: 7 234 567.68) nên em bị bí, không biết nên dùng hàm nào để chuyển nó về dạng số ạ. Nhờ mọi người tư vấn giúp em. Em cám ơn nhiều ạ. :heart: :heart: :heart:
Bạn hãy tung cái code đấy lên đây. Nên làm luôn trong code kia. Mà tốt nhất là đính kèm tập tin.
 
Cảm ơn bạn, do ngoài số, mình còn những dãy chữ nên nếu dùng Replace sẽ ảnh hưởng những dãy chữ này do nó dính sát vô nhau hết. Ngoài cách này ra, mình còn cách nào khác nữa không ạ? Cám ơn bạn nhiều ạ.
Bài 1 không nêu có những dãy chữ, nên bạn chỉ nhận được sự trợ giúp đối với dãy số.
Tốt nhất là bạn đính kèm File Excel và nêu cụ thể cần xử lý cái gì ở cột nào? Để người giúp xem để có thể lường trước được những thứ có thể phát sinh ngoài ý muốn.
 
Hàm lấy số trong chuỗi:
(dùng Regex dễ quá, hết vui rồi, thử cái này đỡ buồn)

Mã:
Function LaySo(chuoi As String) As String
' hàm lấy các số bên trong một chuỗi. Nếu số cách nhau bởi dấu cách thì gọp lại thành 1 số
' ví dụ chuỗi "abcd 123 456 def 789 012 ghi" thì lấy ra "123456;789012"
' nếu chuỗi rắc rối, có những dấu này nọ thì hàm giải quyết khong nổi. Dùng Regex cho xong
For Each e in Split(Applcation.Trim(chuoi), " ")
  If IsNumeric(e) Then
    x = x & e ' gọp vào chuỗi số trước
  Else
    If x <> "" Then
      LaySo = LaySo ";" & x ' gọp vào chuỗi kết quả
      x = ""
    End If
  End If
Next e
If LaySo Like ";*" Then LaySo = Mid(LaySo, 2)
End Function
 
Lần chỉnh sửa cuối:
Hàm lấy số trong chuỗi:
(dùng Regex dễ quá, hết vui rồi, thử cái này đỡ buồn)

Mã:
Function LaySo(chuoi As String) As String
' hàm lấy các số bên trong một chuỗi. Nếu số cách nhau bởi dấu cách thì gọp lại thành 1 số
' ví dụ chuỗi "abcd 123 456 def 789 012 ghi" thì lấy ra "123456;789012"
' nếu chuỗi rắc rối, có những dấu này nọ thì hàm giải quyết khong nổi. Dùng Regex cho xong
For Each e in Split(Applcation.Trim(chuoi), " ")
  If IsNumeric(e) Then
    x = x & e ' gọp vào chuỗi số trước
  Else
    If x <> "" Then
      LaySo = LaySo ";" & x ' gọp vào chuỗi kết quả
      x = ""
    End If
  End If
Next e
If LaySo Like ";*" Then LaySo = Mid(LaySo, 2)
End Function
Đa tạ cao nhân :yahoo:
Bài đã được tự động gộp:

Bài 1 không nêu có những dãy chữ, nên bạn chỉ nhận được sự trợ giúp đối với dãy số.
Tốt nhất là bạn đính kèm File Excel và nêu cụ thể cần xử lý cái gì ở cột nào? Để người giúp xem để có thể lường trước được những thứ có thể phát sinh ngoài ý muốn.
Sorry bạn vì đã không nêu rõ câu hỏi ạ. Mình sẽ rút kinh nghiệm lần sau. Cám ơn bạn nhiều nha.
 
Bạn có thể Ctrl+H rồi lựa từ khóa Replace cho phù hợp để không ảnh hưởng đến phần chữ. VD bạn thay " 2" => "2", "2 " => "2" ... thêm lần lượt tững chữ số vào. Hoặc kỹ hơn thì thay lần lượt tất cả các cặp "x y" => "xy", với x y là các chữ số.
 
Bạn có thể Ctrl+H rồi lựa từ khóa Replace cho phù hợp để không ảnh hưởng đến phần chữ. VD bạn thay " 2" => "2", "2 " => "2" ... thêm lần lượt tững chữ số vào. Hoặc kỹ hơn thì thay lần lượt tất cả các cặp "x y" => "xy", với x y là các chữ số.
Làm như thế này thì thôi copy ra Word và dùng Find-Replace với wildcard của Word sướng hơn.
 
Bạn có thể Ctrl+H rồi lựa từ khóa Replace cho phù hợp để không ảnh hưởng đến phần chữ. VD bạn thay " 2" => "2", "2 " => "2" ... thêm lần lượt tững chữ số vào.
Làm như bạn thì từ "Nhận 2 345 672 đồng" sẽ có "Nhận2345 672đồng". Làm tiếp cho các chữ số khác thì kết quả là "Nhận2345672đồng".
 
Làm như bạn thì từ "Nhận 2 345 672 đồng" sẽ có "Nhận2345 672đồng". Làm tiếp cho các chữ số khác thì kết quả là "Nhận2345672đồng".

Đúng vậy! Trong trường hợp mình biết được data như thế nào thì mình sẽ có những mẹo riêng để xử lý và lựa từ khóa Replace cho phù hợp.

Hoặc kỹ hơn thì thay lần lượt tất cả các cặp "x y" => "xy", với x y là các chữ số.
Cách này tránh được bị dính chữ như trên. Nhưng sẽ dính số nế có nhiều số trên cùng 1 dòng
 
Cách này tránh được bị dính chữ như trên. Nhưng sẽ dính số nế có nhiều số trên cùng 1 dòng
Nhưng làm như thế này khác gì đi trên con đường khổ ải. Bạn biết có bao nhiêu cặp không? Cái này bác VetMini đã lưu ý rồi.

Vụ 2 số liền nhau thì code cũng chịu, cao thủ cao nhân cũng chịu. Vd. có "2 345 678" thì đó là 3 số 2, 345, 678 hay 2 số: 2 và 345 678, 2 345 và 678, hay 1 số 2 345 678? Cái này thì bó tay toàn tập. Nếu dữ liệu có thể có 2 số liền nhau thì code hay không code cũng chịu.
 
Nhưng làm như thế này khác gì đi trên con đường khổ ải. Bạn biết có bao nhiêu cặp không? Cái này bác VetMini đã lưu ý rồi.

Mình nêu ra như vậy dễ nhìn ra một thuật toán khả dĩ đơn giản. Về số cặp thì tầm 90 cặp xy. Về thuật toán thì 2 vòng for lồng nhau chạy từ 0 đến 9 (lặp 100 lần).
 
Mọi người ơi, lỗi của em là do không đưa dữ liệu để mọi người dễ đánh giá tình hình. Dưới đây là 1 ví dụ khi copy từ file PDF qua excel, mình sẽ có nhiều dòng sản phẩm đặt hàng, tương tự như bên dưới, bao gồm mã sản phẩm, tên sản phẩm, quy cách đóng gói, số lượng cái theo quy cách đóng gói, số lượng cần đặt hàng, số lượng hàng KM kèm theo, đơn giá, đơn vị tính, thành tiền.

8934804035079 TH10 +HQ NESCAFE + LU 650G Pack 1 10 100.000 0.000 126 636.68 Cai 126 636 682.00

Do mỗi cột được cách nhau bởi1 khoảng trắng, đơn giá và thành tiền cũng bị cách khoảng trắng trong giá trị đó, nên nếu replace để bỏ khoảng trắng của 2 giá trị tô vàng đi để thành chữ số, thì lại ảnh hưởng tới việc phân tách cột của nguyên dòng. Mọi người có cao kiến gì không ạ? Em có đính kèm file, trong đó đoạn tô màu vàng là dữ liệu cần phải xử lý ạ.
 

File đính kèm

  • Đơn đặt hàng.xlsx
    12.4 KB · Đọc: 9
Mọi người ơi, lỗi của em là do không đưa dữ liệu để mọi người dễ đánh giá tình hình. Dưới đây là 1 ví dụ khi copy từ file PDF qua excel, mình sẽ có nhiều dòng sản phẩm đặt hàng, tương tự như bên dưới, bao gồm mã sản phẩm, tên sản phẩm, quy cách đóng gói, số lượng cái theo quy cách đóng gói, số lượng cần đặt hàng, số lượng hàng KM kèm theo, đơn giá, đơn vị tính, thành tiền.

8934804035079 TH10 +HQ NESCAFE + LU 650G Pack 1 10 100.000 0.000 126 636.68 Cai 126 636 682.00

Do mỗi cột được cách nhau bởi1 khoảng trắng, đơn giá và thành tiền cũng bị cách khoảng trắng trong giá trị đó, nên nếu replace để bỏ khoảng trắng của 2 giá trị tô vàng đi để thành chữ số, thì lại ảnh hưởng tới việc phân tách cột của nguyên dòng. Mọi người có cao kiến gì không ạ? Em có đính kèm file, trong đó đoạn tô màu vàng là dữ liệu cần phải xử lý ạ.
Bạn nên up luôn 1 file PDF của bạn lên nữa thì mọi người sẽ dễ tưởng tượng hơn và hỗ trợ bạn được tốt nhất có thể

bạn cũng cần ghi nhận cột nào bạn cần xử lý quan trong nhất.
 
Cao ong cũng bó tay, cao kiến chỉ mệt.
Cách duy nhất là đọc từ phải sang trái. Nối từng cụm sô cho đến lúc thấy phi lý thì dừng.
Ví dụ: Pack 1 10 100.000 0.000 126 636.68 Cai 126 636 682.00
Cai 126 636 682.00 nối được thành 126636682.00; Dừng vì không thể nối "Cai"
1 10 100.000 0.000 126 636.68 nối được thành 126636.68; Dừng vì không thể nối "0.000"
Lấy được 2 số thì dừng. Chỗ còn lại nối ra số được tôi ăn chay 1 tháng.
 
Cao ong cũng bó tay, cao kiến chỉ mệt.
Cách duy nhất là đọc từ phải sang trái. Nối từng cụm sô cho đến lúc thấy phi lý thì dừng.
Ví dụ: Pack 1 10 100.000 0.000 126 636.68 Cai 126 636 682.00
Cai 126 636 682.00 nối được thành 126636682.00; Dừng vì không thể nối "Cai"
1 10 100.000 0.000 126 636.68 nối được thành 126636.68; Dừng vì không thể nối "0.000"
Lấy được 2 số thì dừng. Chỗ còn lại nối ra số được tôi ăn chay 1 tháng.
:eek::eek::eek:(@$%@(@$%@(@$%@
 
Mọi người ơi, lỗi của em là do không đưa dữ liệu để mọi người dễ đánh giá tình hình. Dưới đây là 1 ví dụ khi copy từ file PDF qua excel, mình sẽ có nhiều dòng sản phẩm đặt hàng, tương tự như bên dưới, bao gồm mã sản phẩm, tên sản phẩm, quy cách đóng gói, số lượng cái theo quy cách đóng gói, số lượng cần đặt hàng, số lượng hàng KM kèm theo, đơn giá, đơn vị tính, thành tiền.

8934804035079 TH10 +HQ NESCAFE + LU 650G Pack 1 10 100.000 0.000 126 636.68 Cai 126 636 682.00

Do mỗi cột được cách nhau bởi1 khoảng trắng, đơn giá và thành tiền cũng bị cách khoảng trắng trong giá trị đó, nên nếu replace để bỏ khoảng trắng của 2 giá trị tô vàng đi để thành chữ số, thì lại ảnh hưởng tới việc phân tách cột của nguyên dòng. Mọi người có cao kiến gì không ạ? Em có đính kèm file, trong đó đoạn tô màu vàng là dữ liệu cần phải xử lý ạ.
Đưa dữ liệu thật lên xử lý còn phát mệt huống hồ chi hỏi nữa vời như bài 1.
Bạn tham khảo File, làm đại hên thì trúng. Tôi chưa kiểm tra, bạn nên tự kiểm tra lại kết quả.
1/ Vào Sheet1 xóa dữ liệu cũ đi và Paste dữ liệu mới vào từ A2 trở xuống.
2/ Sang Sheet2 nhấn nút xem kết quả.
 

File đính kèm

  • Đơn đặt hàng.xlsm
    22.9 KB · Đọc: 9
Đưa dữ liệu thật lên xử lý còn phát mệt huống hồ chi hỏi nữa vời như bài 1.
Bạn tham khảo File, làm đại hên thì trúng. Tôi chưa kiểm tra, bạn nên tự kiểm tra lại kết quả.
1/ Vào Sheet1 xóa dữ liệu cũ đi và Paste dữ liệu mới vào từ A2 trở xuống.
2/ Sang Sheet2 nhấn nút xem kết quả.
-\\/.:blush: cám ơn bạn nhiều lắm ạ :blush:
 
Web KT
Back
Top Bottom