Video: Học VBA trong Excel | 83 Hướng dẫn lọc dữ liệu bằng VBA với 1 điều kiện 2025
Bạn đã bao giờ được đưa ra một bảng tính Excel với tên, trong đó tên đầy đủ là tất cả trong một tế bào? Nhiệm vụ của bạn là phá vỡ tên thành tên, họ - một quá trình được gọi là phân tích cú pháp . Bạn có thể thử sử dụng một công thức và / hoặc chức năng để giúp đỡ, hoặc bạn có thể sử dụng mã Visual Basic for Applications (VBA).
Cách tiếp cận chung là tìm khoảng cách giữa tên và họ, và voila! - bạn biết nơi mà tên đầu tiên kết thúc và tên cuối cùng bắt đầu.
Trừ khi bạn có tên có cấu trúc phức tạp hơn, như Dr. William Healer hay Zak H. Sneezer III.
Dưới đây là một thói quen VBA điển hình nhìn qua mỗi tên, nhân vật theo nhân vật, cho đến khi nó tìm thấy một không gian. Sau đó, nó đặt bất cứ điều gì là bên trái của không gian trong một cột và bất cứ điều gì là bên phải của không gian trong cột sau.
Do Until ActiveCell = "thename = ActiveCell Giá trị For looking = 1 Để Len (thename) Nếu Mid (thename, looking, 1) =" "Sau đó ActiveCell Offset (0, 1) = Còn lại (tên, 1) ActiveCell Offset (0, 2) = Mid (tên, tìm kiếm + 1) Exit For End If Next ActiveCell Offset (1, 0) Kích hoạt Loop
Thủ tục này rất hữu ích trong việc phân tách các tên chỉ với một khoảng trống, chẳng hạn như Harvey Wallbanger hoặc Tom Collins Bảng dưới đây cho thấy kết quả của việc chạy mã trên tên có nhiều không gian:
Dr William Healer | Tiến sĩ < Zak Heineau | Zak H. Sneezer III |
Zak | H Sneezer III | Đây không phải là một cố gắng phân tách cú pháp tốt. các tên khác |
Dưới đây là một kỹ thuật phát triển hơn mang lại kết quả tốt hơn Hãy ghi nhớ rằng việc phân tích cú pháp tên không hoàn hảo, nhưng đi về nó nó sẽ làm tốt hơn
Kỹ thuật này là tính bao nhiêu không gian có đầy đủ tên và sau đó phá vỡ tên trên một trong những không gian. Đặc biệt, nếu có ba không gian nhiều hơn, sử dụng không gian hai trong từ bên phải như không gian phá vỡ; nếu không, sử dụng không gian bên phải nhất như không gian phá vỡ.
Quy trình này được chạy trong một chương trình con VBA gọi một hàm trong khi lặp lại tên. Số lượng không gian được xác định sớm trong vòng lặp chính, và chức năng trả về vị trí mà không gian phá vỡ là.
Sub parse_names () Dim thename As String Giấu các không gian như Integer Do Until ActiveCell = "thename = ActiveCell Khoảng trống giá trị = 0 Đối với test = 1 Để Len (thename) Nếu Mid (thename, test, 1) =" "Sau đó không gian = không gian + 1 Kết thúc Nếu Tiếp Nếu không gian> = 3 Sau đó, break_space_position = space_position ("", thename, spaces - 1) Else break_space_position = space_position ("", thename, spaces) End If If spaces> 0 Sau đó ActiveCell.Offset (0, 1) = Còn lại (sau đó, break_space_position - 1) ActiveCell. Offset (0, 2) = Mid (thename, break_space_position + 1) Else 'là khi tên đầy đủ chỉ là một cái tên không có dấu cách ActiveCell. Offset (0, 1) = Thename End If ActiveCell. Offset (1, 0). Kích hoạt Loop End Sub Chức năng space_position (what_to_look_for Như String, what_to_look_in Như String, space_count Như Integer) Như Integer Dim loop_counter Như Integer space_position = 0 Đối với loop_counter = 1 Để space_count space_position = InStr (loop_counter + space_position, what_to_look_in, what_to_look_for) Nếu space_position = 0 Sau đó thoát khỏi chức năng kết thúc tiếp theo
Bảng dưới đây cho biết kết quả như thế nào:
Dr. William Healer
Tiến sĩ. William | Healer | Zak H. Sneezer III |
Zak H. | Sneezer III | Việc phân tích tên là nghệ thuật nhiều như quy trình kỹ thuật. Trong ví dụ thứ hai, tất cả các tên và họ là trong cột chính xác. Nếu một tên dài mới với năm hay nhiều không gian đã được giới thiệu, thói quen có thể nhận được phân tích cú pháp sai, và mã VBA sẽ cần nhiều thử nghiệm có điều kiện đưa vào nó. Nhưng ví dụ này hiện đang đi đúng hướng như một quy trình phân tích cú pháp tên công nghiệp. |