Sử dụng hàm Join và Split trong VBA để ghép, tách dữ liệu (3 người xem)

Liên hệ QC

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

PhanTuHuong

VBA & VB.NET for Excel & AutoCad
Thành viên danh dự
Tham gia
13/6/06
Bài viết
7,201
Được thích
24,670
Tôi xi giới thiệu cách sử dụng hàm Join và Split trong VBA để ghép, tách dữ liệu. Ứng dụng này rất thuận lợi cho việc quản lý, sao chép, lưu dữ liệu (có file kèm theo).

Saoluu.jpg
 

File đính kèm

Lần chỉnh sửa cuối:
Ai cha... dùng cái này đễ tách tên coi bộ ngon à nha.. Lẹ hơn nhiều so với dùng vòng lập...
Cảm ơn thầy!
ANH TUẤN
 
anhtuan1066 đã viết:
Ai cha... dùng cái này đễ tách tên coi bộ ngon à nha.. Lẹ hơn nhiều so với dùng vòng lập...
Cảm ơn thầy!
ANH TUẤN

Còn nhiều việc phải làm lắm bác ạ.

- Vẫn phải có một dấu hiệu nhận biết, đó là dấu trừ (-)
- Hãy thử với 2 dấu cách (các phần tử có số dấu cách không như nhau) sẽ bị lỗi ngay, mà tên thì có tên ngắn, tên dài.
- Các hàm này cũng phải quét từng ký tự thôi
- . . . . . . .

Tuy nhiên đây cũng là 1 bài đáng để tham khảo (Cho nhiều trường hợp khác chứ không phải là tách tên)

Thân!
 
Mr Okebab đã viết:
Còn nhiều việc phải làm lắm bác ạ.

- Vẫn phải có một dấu hiệu nhận biết, đó là dấu trừ (-)
- Hãy thử với 2 dấu cách (các phần tử có số dấu cách không như nhau) sẽ bị lỗi ngay, mà tên thì có tên ngắn, tên dài.
- Các hàm này cũng phải quét từng ký tự thôi
- . . . . . . .

Đây là đặc thù của hàm Mr Okebab ạ. Em đọc Help xem:

Join(sourcearray[, delimiter])

The Join function syntax has these named arguments:

Part Description
sourcearray Required. One-dimensional array containing substrings to be joined.
delimiter Optional. String character used to separate the substrings in the returned string. If omitted, the space character (" ") is used. If delimiter is a zero-length string (""), all items in the list are concatenated with no delimiters.

Ghep_cot = Join(Dulieu(), " ")

delimiter trong trường hợp này là " ", đây là dấu hiệu bắt buộc để phân, tách dữ liệu, nếu delimiter trùng với dữ liệu thì chắc chắn sẽ sai. Vì vậy ta phải chọn delimiter thích hợp.
 
PhanTuHuong đã viết:
Đây là đặc thù của hàm Mr Okebab ạ. Em đọc Help xem:

delimiter trong trường hợp này là " ", đây là dấu hiệu bắt buộc để phân, tách dữ liệu, nếu delimiter trùng với dữ liệu thì chắc chắn sẽ sai. Vì vậy ta phải chọn delimiter thích hợp.

Em đâu có phản đối điều này đâu.

Ý em nói rằng để tách Tên, Họ, Tên Đệm thì cần phải có nhiều cái khác nữa chứ không chỉ là hai hàm trên đâu, vì cái vụ họ tên rất lộn xộn trên mọi miền đất nước.

Cảm ơn anh!

Thân!
 
Đúng rồi, mấy hàm này chỉ dùng với mảng có kích thước cố định thôi, phải đầy đủ thông tin, chứ như để tách họ tên thì không ổn.
 
Hàm này xử lý mảng động cực kỳ tốt chứ anh Hướng, em toàn dùng vậy mà.
 
Đây là thủ tục mô phỏng hàm Join và Split dùng vòng lặp để tách, ghép theo dữ liệu đã có trong Chia gia tri.xls.
Mỗi cách làm có ưu điểm riêng.
- Join và Split dùng cho số lần tách ghép ít, nếu tách ghép nhiều thì viết rất dài.
- For Next dùng cho số lần tách ghép nhiều, vì tách ghép bao nhiêu lần cách viết không thay đổi, chỉ thay số đầu, số cuối vào For Next

Mã:
Sub GhepVao()
For r = 3 To 6
  ghep = ""
  For i = 1 To 4
    ghep = ghep & Cells(r, i) & "-"
  Next
  Cells(r + 6, 2) = Left(ghep, Len(ghep) - 1)
Next
End Sub

Mã:
Sub TachRa()
For r = 9 To 12
  chuoi = Cells(r, 2) & "-"
  For c = 2 To 5
    vt = InStr(1, chuoi, "-")
    Cells(r + 5, c) = Mid(chuoi, 1, vt - 1)
    chuoi = Mid(chuoi, vt + 1)
  Next
Next
End Sub
 
Đây là thủ tục mô phỏng hàm Join và Split dùng vòng lặp để tách, ghép theo dữ liệu đã có trong Chia gia tri.xls.
Mỗi cách làm có ưu điểm riêng.
- Join và Split dùng cho số lần tách ghép ít, nếu tách ghép nhiều thì viết rất dài.
- For Next dùng cho số lần tách ghép nhiều, vì tách ghép bao nhiêu lần cách viết không thay đổi, chỉ thay số đầu, số cuối vào For Next

Mã:
Sub GhepVao()
For r = 3 To 6
  ghep = ""
  For i = 1 To 4
    ghep = ghep & Cells(r, i) & "-"
  Next
  Cells(r + 6, 2) = Left(ghep, Len(ghep) - 1)
Next
End Sub

Mã:
Sub TachRa()
For r = 9 To 12
  chuoi = Cells(r, 2) & "-"
  For c = 2 To 5
    vt = InStr(1, chuoi, "-")
    Cells(r + 5, c) = Mid(chuoi, 1, vt - 1)
    chuoi = Mid(chuoi, vt + 1)
  Next
Next
End Sub
.

Khi chỉ có 3 hoặc 2 text thì code dừng lại :VD Huy-Hung-Van; Hoặc Vinh-Hiển thì sẽ code dừng lại
 
Web KT

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

Back
Top Bottom