Cách tốt hơn để loại bỏ văn bản trước (các) ký tự cụ thể


0

Không thường xuyên, tôi cần loại bỏ tất cả các văn bản lên đến và bao gồm một nhân vật nhất định. Ví dụ, trong một danh sách các vụ kiện pháp lý dưới dạng "Nguyên đơn v. Bị đơn", tôi có thể muốn tước bỏ mọi thứ lên đến và bao gồm cả "v." Để có danh sách các bị cáo.

Điều này có thể dễ dàng thực hiện bằng cách sử dụng kết hợp các FIND, RIGHTvà các LENchức năng như sau (sử dụng A1làm ô nơi xuất phát văn bản):

=RIGHT(A1,LEN(A1)-FIND("text",A1)-1)

Nhưng luôn khiến tôi cảm thấy hơi khó hiểu và dễ bị lỗi (chưa kể đến việc tôi thường quên trừ 1. Có cách nào thanh lịch hơn để đạt được kết quả tương tự không?


Excel nói chung là vô cùng cồng kềnh =). Bên ngoài VBA, tôi nghĩ đó là cách làm kinh điển mà bạn đã vạch ra. Điều gì sẽ vượt qua bài kiểm tra của bạn cho sự thanh lịch?
Joe

@Joe. Câu hỏi hợp lý. Tôi cho rằng sử dụng ít chức năng hơn sẽ là mong muốn. Phải sử dụng LENchức năng đặc biệt làm phiền tôi. Sau khi đăng bài, lấy cảm hứng từ một trong những câu trả lời dưới đây, tôi đã đưa ra một phương án sử dụng REPLACEchức năng để thay thế văn bản không có gì (""). Sử dụng một chức năng ít hơn, nhưng bây giờ sẽ cần phải lo lắng về độ dài của chuỗi tìm kiếm: REPLACE(A1,1,FIND("text",A1)+[length of text being searched for -1]),"") Không thực sự là một cải tiến trong tâm trí của tôi.
Jonathan

Câu trả lời:


1

Sử dụng VBA là một chiến lược hợp pháp! Ẩn những chi tiết đó và gánh nặng của việc nhớ lại chúng. Đồng thời cho phép bạn sử dụng các hàm chuỗi dễ dàng hơn (ví dụ: phiên bản Mid () của VBA không cần số chuỗi con - theo mặc định, nó sẽ cung cấp cho đến cuối chuỗi.) [Lưu ý 1]
Hàm bạn viết trở nên khả dụng cho ứng dụng dễ dàng trong danh sách Excel các chức năng của Excel.

Alt-F11 để vào VBA (Alt-F11 để chuyển trở lại).
Từ VBAProject cho sổ làm việc hiện tại, Chèn> Mô-đun (thao tác menu bên phải). Điều này sẽ có chức năng dễ dàng truy cập trong suốt sổ làm việc của bạn.

Dán cái này:

Hàm RightOfToken (sSource As String, sToken As String) As String
Dim sTarget dưới dạng Chuỗi
Dim iPos là số nguyên

'Trả lại các ký tự sau lần xuất hiện đầu tiên của sToken trong sSource

iPos = InStr (sSource, sToken)
Nếu iPos> 0 thì
    sTarget = Mid (sSource, Len (sToken) + iPos)
Khác
    sTarget = ""
Kết thúc nếu
RightOfToken = sTarget
Chức năng kết thúc

Alt-F11 trở lại. Trong bất kỳ ô nào, = RightofToken ("ABC v. DEF", "v.") Sẽ mang lại "DEF". (Bạn có thể sử dụng LTrim () trong VBA để xóa các khoảng trắng hàng đầu hoặc nếu nó phù hợp với TRIM trong Excel)

[Lưu ý 1] Nếu trong VBA, bạn muốn có phiên bản Excel của hàm hoặc hàm bảng tính dành riêng cho Excel, bạn có thể đặt tiền tố cho nó bằng Application.WorksheetFunction. .


Mặc dù VBA không phải là những gì tôi nghĩ, tôi đánh giá cao câu trả lời và có thể sử dụng nó. Tôi có thể đang thiếu một cái gì đó, nhưng dường như từ cái mà tôi đã thấy rằng hàm VBA có thể nằm trong một bảng tính cụ thể (trong trường hợp bạn cần tạo lại mỗi khi cần) hoặc có thể sống trong "cá nhân "Mẫu, trong trường hợp đó sẽ không có sẵn nếu bảng tính được gửi cho người khác. Điều đó có sai không?
Jonathan

0

Tìm và thay thế có thể làm việc cho bạn. Đó là cách nhanh nhất. Ví dụ của bạn "muốn loại bỏ mọi thứ lên đến và bao gồm" v. "Để có danh sách các bị cáo", tôi sẽ sao chép thông tin vào một cột mới sau đó đánh dấu chỉ những cột đó. Sau đó sử dụng Tìm và Thay thế hoặc CTRL H.

Trong hộp tìm, nhập "* v." Hoặc " dấu hoa thị v.". Trong hộp thay thế, để trống. (Biểu tượng dấu hoa thị * là một thẻ hoang dã nên nó sẽ chọn mọi thứ trước chữ V.) Nhấp vào ok để chạy và nó sẽ xóa mọi thứ trước đó và bao gồm cả "v.".

Nếu bạn có mọi thứ bạn muốn thay đổi được tô sáng trước, bạn sẽ có thể thực hiện tất cả trong một thao tác rất nhanh.

Hy vọng điều này có ý nghĩa.


Tôi bị thu hút bởi ý tưởng tìm kiếm và thay thế, mặc dù nó không hoạt động trong nhiều tình huống, nhưng tìm kiếm ký tự đại diện trước khi chuỗi văn bản không hoạt động theo cách bạn mô tả. (Thật vậy, nó dường như hoàn toàn không hoạt động.) Wildcard (*) có thể ở cuối chuỗi văn bản đang được tìm kiếm, nhưng không bắt đầu.
Jonathan

Lạ nhỉ. Ký tự đại diện hoạt động ở bất cứ đâu miễn là 'bookends' khớp với những gì đang được tìm kiếm. Vì vậy, nếu nó không hoạt động trước v, thì vấn đề là v., Không phải ký tự đại diện. Tôi đã sử dụng nó mọi lúc - nhanh hơn VBA hoặc hầu hết các công thức. Vì vậy, với tôi một chức năng thiết yếu để biết.
Hạnh phúc


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.