2008-11-04 32 views
7

Tôi đã thực hiện một số Googling, và không thể tìm thấy bất cứ điều gì, mặc dù có lẽ tôi chỉ tìm kiếm ở những nơi sai. Tôi cũng không giỏi về VBA, nhưng tôi chắc chắn rằng tôi có thể tìm ra bằng các con trỏ phù hợp :)Thao tác chuỗi bằng Excel - cách xóa phần của chuỗi nếu phần khác có ở đó?

Tôi có một chuỗi là một kết nối của các ô khác nhau, dựa trên các điều kiện khác nhau. Tôi nhấn những thứ này theo thứ tự.

=IF(A405<>A404,G405,G405&H404) 

Điều tôi muốn làm là quay lại danh sách nối, xóa giá trị thay thế nếu người thay thế nằm trong danh sách.

Ví dụ, xem danh sách sau đây:

A, D, G, Y, Z 

Tôi muốn loại bỏ DnếuchỉnếuY có mặt.

Tôi sẽ làm như thế nào? (VBA hoặc trong tế bào, mặc dù tôi thích trong tế bào)

Trả lời

0

tôi vừa nhận giải pháp này có thể qua email:

=IF(A15<>A14,G15,IF(OR(AND(G15="CR247, ",ISNUMBER(FIND("CR247, ",H14))),AND(G15="CR149, ",ISNUMBER(FIND("CR215, ",H14))),AND(G15="CR149, ",ISNUMBER(FIND("CR180, ",H14))),AND(G15="CR180, ",ISNUMBER(FIND("CR215, ",H14))),G15="CR113, "),H14,G15&H14)) 

(điều này có các giá trị "thực" với các quy tắc ưu tiên)

Có vẻ tương tự như câu trả lời của @Joseph.

Có giải pháp nào tốt hơn không?

+0

fwiw: đây là câu trả lời tôi đã kết thúc bằng cách sử dụng - cảm ơn những gợi ý khác !! – warren

0

Nó có thể dễ dàng hơn để bắt đầu ở cuối, làm cho bổ sung của bạn vào đầu chuỗi, và chỉ thêm D nếu Y không có mặt.

2

Thứ nhất, tại sao không giữ một chuỗi ký tự thay vì khi bạn đi qua tất cả các ô, sau đó nối tất cả các ô ở cuối?

Nếu không, bạn sẽ được sử dụng chức năng chuỗi như INSTR và MID để làm một cái gì đó như:

start1 = instr(myLongString,"Y, ") 
if start1 > 0 Then 
    start2 = instr(myLongString,"D, ") 
    if start2 > 0 then 
     newLongString = left(myLongString, start2 - 1) & _ 
         mid(myLongString, start2 + 3) 
    end if 
end if 

Nhưng, như tôi đã nói, tôi sẽ giữ một mảng đó là dễ dàng để lặp qua, sau đó khi bạn có tất cả các giá trị bạn BIẾT bạn sẽ sử dụng, chỉ cần ghép chúng vào cuối.

0

Tôi đoán D có thể xuất hiện bất cứ nơi nào, vậy làm thế nào về:

If InStr(strString, "Y") > 0 Then 
    strString = Replace(strString, "d", "") 
    strString = Replace(strString, " ", "") 
    strString = Replace(strString, " ,", "") 
    strString = Replace(strString, ",,", ",") 
End If 
5

Hãy thử:

=IF(ISERROR(FIND("Y",A1)),A1,SUBSTITUTE(A1,"D, ","")) 

Nhưng, cho rằng bạn luôn có dấu phẩy và không gian sau khi D.

+0

Bạn cần sử dụng ISERROR hoặc ISNUMBER trên câu lệnh FIND, trong trường hợp nó không tìm thấy những gì nó đang tìm kiếm (và do đó bạn sẽ phải chuyển đổi hai trường hợp xung quanh). –

0

Nếu không có quá nhiều kết hợp mà bạn muốn xóa, bạn có thể sử dụng = IF (FIND ("D"; A2)> 0; REPLACE (A2; 1; 3; ""); A2) .

1

VBA: Bạn luôn có thể sử dụng đối tượng regexp. Tôi nghĩ rằng cung cấp cho bạn khả năng kiểm tra mọi thứ trên tập lệnh của bạn miễn là bạn xây dựng chính xác cụm từ thông dụng.

Check-out: http://msdn.microsoft.com/en-us/library/yab2dx62(VS.85).aspx (để tham khảo regexp)
và một công cụ đơn giản để kiểm tra regexps của bạn: http://www.codehouse.com/webmaster_tools/regex/

In-cell: bạn có thể làm điều đó một cách thân thiện nổi trội hơn:
giả trên cột A: A bạn có các giá trị.
Bạn có thể thêm cột mới nơi bạn thực hiện séc
if(indirect("A"&row()) <> indirect("A"&row()-1), indirect("G"&row()), indirect("G"&row())& indirect("H"&row()))
hoặc bất kỳ giá trị nào. Tuy nhiên, tôi đoán rằng trên một nhánh của câu lệnh if thì giá trị sẽ trống. Sau đó bạn ghép nối chỉ các giá trị cột B: B (bỏ qua khoảng trắng nếu cần).

Hy vọng điều này sẽ hữu ích.

Các vấn đề liên quan