Đây là giải pháp chức năng bảng tính. Nó không đẹp, nhưng nếu bạn hoàn toàn không thích sử dụng VBA, thì tôi nghĩ bạn đang mắc kẹt với những lựa chọn xấu xí mà thôi. Đối với văn bản trong A1
, dán đoạn mã sau vào B1
và nhấn Ctrl + phím Shift +Nhập để nhập công thức như một công thức mảng:
=IFERROR(INDEX(IF(CODE(MID(D1,ROW(INDIRECT("A2:A"&LEN(D1))),1))<=90,IF(CODE(MID(D1,ROW(INDIRECT("A2:A"&LEN(D1))),1))>=65,IF(MID(D1,ROW(INDIRECT("A1:A"&LEN(D1)-1)),1)<>" ",REPLACE(D1,ROW(INDIRECT("A2:A"&LEN(D1))),1," "&MID(D1,ROW(INDIRECT("A2:A"&LEN(D1))),1)),D1),D1),D1),MIN(IF(CODE(MID(D1,ROW(INDIRECT("A2:A"&LEN(D1))),1))<=90,IF(CODE(MID(D1,ROW(INDIRECT("A2:A"&LEN(D1))),1))>=65,IF(MID(D1,ROW(INDIRECT("A1:A"&LEN(D1)-1)),1)<>" ",ROW(INDIRECT("A1:A"&LEN(D1)-1)),2000000),2000000),2000000))),D1)
Tôi đã nói với bạn rằng nó xấu òm!
Và đối với tất cả nỗ lực đó, điều đó sẽ chỉ tách tên thứ nhất và thứ hai. Để chia tách nhiều hơn, hãy điền công thức sang bên phải. Ví dụ: nếu bạn có danh sách tên trong A1:A10
và bạn cho rằng hầu hết các từ trong bất kỳ tên nào là bốn, bạn có thể nhập công thức trong B1
(dưới dạng công thức mảng!), Điền vào B10
, sau đó điền vào bên phải E10
. Danh sách các tên phân tách của bạn sẽ là E1:E10
.
Nếu bạn có khuynh hướng nhảy xuống hang thỏ, sau đây là một lời giải thích ngắn gọn về những gì các công thức làm:
- Kiểm tra từng nhân vật để xem nếu nó nằm trong phạm vi ASCII cho chữ in hoa và không có dấu cách trước. Ký tự đầu tiên của tên bị bỏ qua.
- Một mảng có kích thước bằng với chiều dài của chuỗi (trừ 1) được điền như sau: Nếu tìm thấy kết quả phù hợp, chuỗi được lưu trữ với ký tự khớp được thay thế bằng dấu cách trước chính nó. Nếu không tìm thấy kết quả phù hợp, chuỗi gốc sẽ được lưu trữ.
- Phần tử đầu tiên từ mảng này tương ứng với một kết quả khớp được trả về. Nếu không tìm thấy kết quả phù hợp, chuỗi gốc sẽ được trả về.
Tôi không nghĩ rằng có thể mà không sử dụng VBA. – assylias
Có thể; nó chỉ là không thực tế (xem bên dưới). – Excellll