استیون یک کاربرگ دارد که متن های زیادی در آن وجود دارد. در سلولهای ستون A، او میخواهد هر چیزی را که ممکن است قبل از یک دنباله معین از کاراکترها رخ دهد، حذف کند، مانند همه چیز قبل از =XX=. ممکن است چندین نمونه از این شخصیت ها در هر سلول وجود داشته باشد، اما استیون فقط می خواهد همه چیز را قبل از اولین اتفاق حذف کند.
یکی از راه های انجام این کار استفاده از فرمول است. به عنوان مثال، فرمول زیر هر آنچه در سلول A1 است را ارزیابی می کند و به سادگی همه چیز را به نویسه های =XX= برمی گرداند. اگر کاراکترها در سلول یافت نشد، کل سلول برگردانده می شود:
=RIGHT(A1,IF(ISERROR(FIND("=XX=",A1,1)),
LEN(A1),LEN(A1)-FIND("=XX=",A1,1)+1))
در عوض، اگر میخواهید اولین رخداد =XX= را برنگردانید، تنها کاری که باید انجام دهید این است که +1 را نزدیک انتهای فرمول به -3 تغییر دهید.
اگر یک راه حل مبتنی بر کلان را ترجیح می دهید، می توانید از روتینی مانند زیر استفاده کنید. تمام سلول هایی را که در حال حاضر انتخاب شده اند بررسی می کند و سپس همه چیز را قبل از دنباله =XX= حذف می کند.
Sub DeleteToSequence()
Dim rCell As Range
Dim sSeq As String
Dim x As Long
sSeq = "=XX="
For Each rCell In Selection
x = InStr(rCell.Value, sSeq)
If x > 0 Then
rCell.Value = Mid(rCell, x)
End If
Next
Set rCell = Nothing
End Sub
باید توجه داشته باشید که این ماکرو می تواند باعث ایجاد برخی خطاها شود، به خصوص زمانی که چیزی که در جستجوی آن هستید با علامت مساوی شروع می شود (مانند =XX=). وقتی رشتهای که با علامت مساوی شروع میشود دوباره در سلول قرار میگیرد، یک #NAME دریافت میکنید؟ خطا به این دلیل که اکسل سعی می کند سلول را طوری تجزیه کند که گویی حاوی یک فرمول است.
اگر میخواهید همه چیز را از طریق دنباله کاراکتر حذف کنید، از این خط در وسط روال استفاده کنید:
rCell.Value = Mid(rCell, x + Len(sSeq))