فهرست مطالب
در چند مقاله اخیر، راههای مختلفی را برای حذف کاراکترها از رشتهها در اکسل بررسی کردهایم. امروز، یک مورد دیگر را بررسی خواهیم کرد - نحوه حذف همه چیز قبل یا بعد از یک کاراکتر خاص.
حذف متن قبل، بعد یا بین 2 کاراکتر با Find & Replace
برای دستکاری داده ها در چندین سلول، Find and Replace ابزار مناسبی است. برای حذف بخشی از یک رشته قبل یا بعد از یک کاراکتر خاص، مراحل زیر انجام می شود:
- همه سلول هایی را که می خواهید متن را حذف کنید انتخاب کنید.
- Ctrl + H را فشار دهید. برای باز کردن گفتگوی Find and Replace .
- در کادر Find what ، یکی از ترکیبات زیر را وارد کنید:
- برای حذف متن قبل از یک کاراکتر معین ، نویسه را قبل از یک ستاره (*char) تایپ کنید.
- برای حذف متن بعد از یک کاراکتر خاص ، نویسه و به دنبال آن یک ستاره (char) تایپ کنید *).
- برای حذف یک زیررشته بین دو کاراکتر ، ستاره ای را تایپ کنید که با 2 کاراکتر احاطه شده است (char*char).
- ترک Replace with کادر خالی.
- کلیک کنید Replace all .
به عنوان مثال، برای حذف همه چیز بعد از کاما از جمله خود کاما، یک کاما و علامت ستاره (,*) را در کادر Find what قرار دهید و نتیجه زیر را دریافت خواهید کرد:
برای حذف یک زیررشته قبل از کاما ، یک ستاره تایپ کنید، یک کاما،همه چیز بعد از کامای اول در A2، فرمول در B2 این است:
=RemoveText(A3, ", ", 1, TRUE)
برای حذف همه چیز قبل از کاما اول در A2، فرمول در C2 این است:
=RemoveText(A3, ", ", 1, FALSE)
از آنجایی که تابع سفارشی ما یک رشته برای جداکننده میپذیرد، یک کاما و یک فاصله (") در آرگومان دوم قرار میدهیم تا بعداً از برش فاصلههای اصلی جلوگیری کنیم.
عملکرد سفارشی ما به زیبایی کار می کند، اینطور نیست؟ اما اگر فکر می کنید این راه حل جامع است، هنوز مثال بعدی را ندیده اید :)
همه چیزهای قبل، بعد یا بین کاراکترها را حذف کنید
برای دریافت گزینه های بیشتر برای حذف کاراکترها یا متن از چندین سلول، بر اساس تطابق یا موقعیت، مجموعه نهایی ما را به جعبه ابزار اکسل خود اضافه کنید.
در اینجا، ویژگی Remove by Position واقع در را دقیق تر بررسی خواهیم کرد. 9>برگه Ablebits Data > Text group > Remove .
در زیر، این دو مورد را پوشش خواهیم داد رایج ترین سناریوها.
همه چیزهای قبل یا بعد از متن خاص را حذف کنید
فرض کنید همه رشته های منبع شما حاوی یک کلمه یا متن رایج هستند و می خواهید همه چیزهای قبل یا بعد از آن متن را حذف کنید. برای انجام این کار، داده های منبع خود را انتخاب کنید، ابزار حذف بر اساس موقعیت را اجرا کنید و آن را مانند شکل زیر پیکربندی کنید:
- همه کاراکترهای قبل از متن را انتخاب کنید یا گزینه همه کاراکترهای بعد از متن و متن (یا کاراکتر) کلیدی را در کادر بعدی تایپ کنیدبسته به اینکه حروف بزرگ و کوچک باید به عنوان کاراکترهای متفاوت یا یکسان در نظر گرفته شوند، کادر حساس به بزرگی و کوچکی را علامت بزنید یا علامت آن را بردارید.
- <9 را بزنید>Remove .
در این مثال، ما همه کاراکترهای قبل از کلمه "error" را در سلول های A2:A8:
<0 حذف می کنیم>و دقیقاً نتیجه مورد نظر خود را دریافت کنید:
متن بین دو کاراکتر را حذف کنید
در شرایطی که اطلاعات نامربوط بین 2 کاراکتر خاص باشد، در اینجا نحوه می توانید به سرعت آن را حذف کنید:
- Remove all substrings را انتخاب کنید و دو کاراکتر را در کادرهای زیر تایپ کنید.
- اگر نویسه های "بین" نیز باید حذف شوند ، کادر شامل جداکننده ها را علامت بزنید.
- روی حذف کلیک کنید.
به عنوان به عنوان مثال، ما همه چیز بین دو کاراکتر tilde (~) را حذف میکنیم و رشتههای کاملاً تمیز شده را در نتیجه دریافت میکنیم:
برای امتحان سایر ویژگیهای مفید موجود در این چند منظوره ابزار، من شما را تشویق به دانلود یک e نسخه ارزیابی در انتهای این پست. از اینکه خواندید متشکریم و امیدواریم هفته آینده شما را در وبلاگ خود ببینیم!
بارگیری های موجود
حذف اولین یا آخرین نویسه ها - نمونه ها (فایل xlsm.)
Ultimate Suite - نسخه آزمایشی (فایل exe.)
و یک فاصله (*، ) در کادر Find what.لطفاً توجه داشته باشید که ما نه فقط یک کاما، بلکه یک کاما و یک فاصله را جایگزین می کنیم تا از لید کردن جلوگیری کنیم. فضاهای موجود در نتایج اگر داده های شما با کاما بدون فاصله از هم جدا شده اند، از یک ستاره و به دنبال آن کاما (*،) استفاده کنید.
برای حذف متن بین دو کاما ، از یک ستاره احاطه شده با کاما (،*،) استفاده کنید.
نکته. اگر ترجیح می دهید نام ها و شماره تلفن ها با کاما از هم جدا شوند، در قسمت Replace with یک کاما (,) تایپ کنید.
حذف بخشی از متن با استفاده از Flash Fill
در نسخههای مدرن اکسل (2013 و بعد از آن)، یک راه آسان دیگر برای از بین بردن متنی که قبل یا بعد از یک کاراکتر خاص است وجود دارد - ویژگی Flash Fill. نحوه کار به این صورت است:
- در سلولی در کنار سلول اول با داده های خود، نتیجه مورد انتظار را تایپ کرده و Enter را فشار دهید.
- شروع به تایپ یک مقدار مناسب در سلول بعدی کنید. هنگامی که اکسل الگو را در مقادیری که وارد میکنید احساس کرد، پیشنمایش سلولهای باقیمانده را با همان الگو نشان میدهد.
- کلید Enter را برای پذیرش پیشنهاد فشار دهید.
انجام شد!
حذف متن با استفاده از فرمول ها
در مایکروسافت اکسل، بسیاری از دستکاری های داده که با استفاده از ویژگی های داخلی انجام می شود را نیز می توان با یک فرمول انجام داد. برخلاف روشهای قبلی، فرمولها هیچ تغییری در دادههای اصلی ایجاد نمیکنند و به شما کنترل بیشتری میدهندنتایج.
چگونه همه چیز را بعد از یک کاراکتر خاص حذف کنیم
برای حذف متن پس از یک کاراکتر خاص، فرمول عمومی این است:
LEFT( cell , SEARCH (" char ", cell ) -1)در اینجا، از تابع SEARCH برای بدست آوردن موقعیت کاراکتر و ارسال آن به تابع LEFT استفاده می کنیم، بنابراین استخراج می شود. تعداد کاراکترهای مربوطه از ابتدای رشته. یک کاراکتر از عددی که توسط SEARCH برگردانده می شود کم می شود تا جداکننده از نتایج حذف شود.
به عنوان مثال، برای حذف بخشی از یک رشته پس از کاما، فرمول زیر را در B2 وارد کرده و آن را از طریق B7 به پایین بکشید. :
=LEFT(A2, SEARCH(",", A2) -1)
چگونه همه چیز را قبل از یک کاراکتر خاص حذف کنیم
برای حذف بخشی از یک رشته متن قبل از یک کاراکتر خاص، فرمول عمومی این است:
RIGHT( سلول ، LEN( سلول ) - SEARCH(" char "، سلول ))در اینجا، ما دوباره با کمک SEARCH موقعیت کاراکتر مورد نظر را محاسبه می کنیم، آن را از کل طول رشته برگردانده شده توسط LEN کم می کنیم و تفاوت را به تابع RIGHT منتقل می کنیم، بنابراین آن تعداد کاراکتر را از انتهای آن می کشد. string.
به عنوان مثال، برای حذف متن قبل از کاما، فرمول این است:
=RIGHT(A2, LEN(A2) - SEARCH(",", A2))
در مورد ما، کاما با یک کاراکتر فاصله دنبال میشود. برای جلوگیری از ایجاد فاصله در نتایج، فرمول اصلی را در تابع TRIM قرار می دهیم:
=TRIM(RIGHT(A2, LEN(A2) - SEARCH(",", A2)))
یادداشت ها:
- هر دواز مثالهای بالا فرض میکنیم که فقط یک نمونه از جداکننده در رشته اصلی وجود دارد. اگر چندین مورد وجود داشته باشد، متن قبل/بعد از نمونه اول حذف خواهد شد.
- عملکرد SEARCH به حروف بزرگ و کوچک حساس نیست ، به این معنی که تفاوتی بین کاراکترهای کوچک و بزرگ. اگر کاراکتر خاص شما یک حرف است و می خواهید حروف بزرگ را تشخیص دهید، از تابع حساس به حروف کوچک و بزرگ FIND به جای SEARCH استفاده کنید.
چگونه می توان متن را پس از وقوع N ام حذف کرد. از یک کاراکتر
در شرایطی که یک رشته منبع حاوی چندین نمونه از جداکننده است، ممکن است نیاز به حذف متن پس از یک نمونه خاص داشته باشید. برای این کار از فرمول زیر استفاده کنید:
LEFT( cell , FIND("#", SUBSTITUTE( cell , " char ", "#" , n )) -1)جایی که n رخداد کاراکتر است که پس از آن متن حذف می شود.
منطق داخلی این فرمول مستلزم استفاده از مقداری کاراکتر است. که در هیچ کجای داده منبع وجود ندارد، یک نماد هش (#) در مورد ما. اگر این کاراکتر در مجموعه داده شما وجود دارد، به جای "#" از چیز دیگری استفاده کنید.
به عنوان مثال، برای حذف همه چیز بعد از کاما دوم در A2 (و خود کاما)، فرمول این است:
=LEFT(A2, FIND("#", SUBSTITUTE(A2, ",", "#", 2)) -1)
این فرمول چگونه کار می کند:
بخش کلیدی فرمول تابع FIND است که مقدار را محاسبه می کند. موقعیت n امجداکننده (در مورد ما کاما). به این صورت است:
ما کاما دوم را در A2 با یک نماد هش (یا هر کاراکتر دیگری که در دادههای شما وجود ندارد) با کمک SUBSTITUTE جایگزین میکنیم:
SUBSTITUTE(A2, ",", "#", 2)
رشته به دست آمده به آرگومان دوم FIND می رود، بنابراین موقعیت "#" را در آن رشته پیدا می کند:
FIND("#", "Emma, Design# (102) 123-4568")
FIND به ما می گوید که "#" سیزدهمین کاراکتر است. در رشته برای دانستن تعداد کاراکترهای قبل از آن، کافی است 1 را کم کنید و در نتیجه 12 به دست می آید:
FIND("#", SUBSTITUTE(A2, ",", "#", 2)) - 1
این عدد مستقیماً به آرگومان num_chars می رود. از LEFT از آن می خواهد که 12 کاراکتر اول را از A2 بکشد:
=LEFT(A2, 12)
همین!
چگونه متن را قبل از Nامین کاراکتر حذف کنیم
<0 فرمول عمومی برای حذف یک زیررشته قبل از یک کاراکتر خاص این است:RIGHT(SUBSTITUTE( cell, " char", "#", n), LEN( سلول) - FIND("#"، SUBSTITUTE( سلول، " char"، "#"، n)) -1)به عنوان مثال، برای حذف متن قبل از کاما دوم در A2، فرمول این است:
=RIGHT(SUBSTITUTE(A2, ",", "#", 2), LEN(A2) - FIND("#", SUBSTITUTE(A2, ",", "#", 2)) -1)
برای حذف یک فضای پیشرو، ما دوباره از TRIM استفاده می کنیم. عملکرد به عنوان یک پوشش:
=TRIM(RIGHT(SUBSTITUTE(A2, ",", "#", 2), LEN(A2) - FIND("#", SUBSTITUTE(A2, ",", "#", 2))))
این فرمول چگونه کار می کند:
به طور خلاصه، ما متوجه می شویم چند کاراکتر بعد از جداکننده n قرار دارند و یک زیر رشته به طول متناظر از سمت راست استخراج کنید. در زیر فرمول شکسته شده است:
ابتدا، کاما دوم را در A2 با یک هش جایگزین می کنیم.نماد:
SUBSTITUTE(A2, ",", "#", 2)
رشته به دست آمده به آرگومان text RIGHT می رود:
RIGHT("Emma, Design# (102) 123-4568", …
بعد، باید تعریف کنید که چند کاراکتر از انتهای رشته استخراج شود. برای این منظور، موقعیت نماد هش را در رشته بالا (که 13 است) پیدا می کنیم:
FIND("#", SUBSTITUTE(A2, ",", "#", 2))
و آن را از طول کل رشته (که برابر با 28 است) کم می کنیم:
LEN(A2) - FIND("#", SUBSTITUTE(A2, ",", "#", 2))
تفاوت (15) به آرگومان دوم RIGHT می رود و به آن دستور می دهد که 15 کاراکتر آخر را از رشته در آرگومان اول بیرون بکشد:
RIGHT("Emma, Design# (102) 123-4568", 15)
خروجی یک زیررشته "(102) 123-4568" است که به نتیجه دلخواه بسیار نزدیک است، به جز یک فضای پیشرو. بنابراین، ما از تابع TRIM برای خلاص شدن از شر آن استفاده می کنیم.
نحوه حذف متن پس از آخرین تکرار یک کاراکتر
در صورتی که مقادیر شما با تعدادی متغیر جداکننده از هم جدا شوند، شما ممکن است بخواهد همه چیز را بعد از آخرین نمونه از آن جداکننده حذف کند. این را می توان با فرمول زیر انجام داد:
LEFT( cell, FIND("#", SUBSTITUTE( cell, " char", "# "، LEN( سلول) - LEN(SUBSTITUTE( سلول، " char"، "")))) -1)فرض کنید ستون A حاوی اطلاعات مختلفی در مورد کارمندان است، اما مقدار بعد از آخرین کاما همیشه یک شماره تلفن است. هدف شما حذف شماره تلفن و حفظ تمام جزئیات دیگر است.
برای رسیدن به هدف، میتوانید متنی را که بعد از آخرین کاما در A2 قرار دارد حذف کنید.formula:
=LEFT(A2, FIND("#", SUBSTITUTE(A2, ",", "#", LEN(A2) - LEN(SUBSTITUTE(A2, ",","")))) -1)
فرمول را در پایین ستون کپی کنید، این نتیجه را دریافت خواهید کرد:
چگونه این فرمول کار می کند:
خلاصه فرمول این است که موقعیت آخرین جداکننده (کاما) را در رشته تعیین می کنیم و یک رشته فرعی را از چپ به سمت جداکننده می کشیم. بدست آوردن موقعیت جداکننده دشوارترین بخش است، و در اینجا نحوه رسیدگی به آن آمده است:
ابتدا، متوجه میشویم که در رشته اصلی چند کاما وجود دارد. برای این کار، هر کاما را با هیچ ("") جایگزین می کنیم و رشته حاصل را به تابع LEN ارائه می کنیم:
LEN(SUBSTITUTE(A2, ",",""))
برای A2، نتیجه 35 است که تعداد کاراکترها است. در A2 بدون کاما.
عدد بالا را از کل طول رشته (38 کاراکتر) کم کنید:
LEN(A2) - LEN(SUBSTITUTE(A2, ",",""))
… و 3 بدست می آورید که تعداد کل است. کاماها در A2 (و همچنین شماره ترتیبی آخرین کاما).
بعد، از ترکیب آشنای توابع FIND و SUBSTITUTE برای بدست آوردن موقعیت آخرین کاما در رشته استفاده می کنید. شماره نمونه (کاما 3 در مورد ما) با فرمول LEN SUBSTITUTE فوق الذکر ارائه می شود:
FIND("#", SUBSTITUTE(A2, ",", "#", 3))
به نظر می رسد که کاما 3 نویسه 23 در A2 باشد، به این معنی که ما نیاز داریم برای استخراج 22 کاراکتر قبل از آن. بنابراین، فرمول فوق را منهای 1 در آرگومان num_chars LEFT قرار می دهیم:
LEFT(A2, 23-1)
چگونه متن را قبل از آخرین وقوع یک کاراکتر حذف کنیم
برای حذفهمه چیز قبل از آخرین نمونه از یک کاراکتر خاص، فرمول عمومی این است:
RIGHT( cell, LEN( cell) - FIND("#", SUBSTITUTE( cell، " char"، "#"، LEN( سلول) - LEN(SUBSTITUTE( cell، " char"، ""))))))در جدول نمونه ما، برای حذف متن قبل از آخرین کاما، فرمول به این شکل است:
=RIGHT(A2, LEN(A2) - FIND("#", SUBSTITUTE(A2, ",", "#", LEN(A2) - LEN(SUBSTITUTE(A2, ",","")))))
به عنوان یک لمس پایانی، ما برای حذف فضاهای پیشرو، آن را در تابع TRIM قرار دهید:
=TRIM(RIGHT(A2, LEN(A2) - FIND("#", SUBSTITUTE(A2, ",", "#", LEN(A2) - LEN(SUBSTITUTE(A2, ",",""))))))
این فرمول چگونه کار می کند:
به طور خلاصه، موقعیت آخرین کاما را همانطور که در مثال قبل توضیح دادیم دریافت می کنیم و آن را از طول کل رشته کم می کنیم:
LEN(A2) - FIND("#", SUBSTITUTE(A2, ",", "#", LEN(A2) - LEN(SUBSTITUTE(A2, ",",""))))
در نتیجه، تعداد کاراکترها را بعد از آخرین کاما و آن را به تابع RIGHT منتقل کنید، بنابراین کاراکترهای زیادی را از انتهای رشته می آورد.
عملکرد سفارشی برای حذف متن در دو طرف یک کاراکتر
به عنوان در مثالهای بالا مشاهده کردید، میتوانید تقریباً هر موردی را با استفاده از f اصلی اکسل حل کنید unctions در ترکیب های مختلف. مشکل این است که شما باید چندین فرمول پیچیده را به خاطر بسپارید. هوم، اگر تابع خودمان را بنویسیم تا تمام سناریوها را پوشش دهیم، چه؟ به نظر فکر خوبی میاد. بنابراین، کد VBA زیر را به کتاب کار خود اضافه کنید (مراحل دقیق برای درج VBA در اکسل در اینجا آمده است):
تابع RemoveText(str As String، Delimiter As String، وقوع به عنوان Integer، is_after AsBoolean ) Dim delimiter_num, start_num, delimiter_len به عنوان عدد صحیح Dim str_result به عنوان رشته delimiter_num = 0 start_num = 1 str_result = "" delimiter_len = Len(delimiter) برای i = 1 برای وقوع delimiter_num = InStrpareT, IfT, 0 &آن؛ delimiter_num سپس start_num = delimiter_num + delimiter_len پایان اگر بعدی i اگر 0 < delimiter_num سپس اگر True = is_after سپس str_result = Mid(str, 1, start_num - delimiter_len - 1) Else str_result = Mid(str, start_num) End If End If RemoveText = str_result پایان تابععملکرد ما RemoveT نام دارد و نحو زیر را دارد:
RemoveText(رشته، جداکننده، رخداد، is_after)Where:
String - رشته متن اصلی است. می تواند با یک مرجع سلول نشان داده شود.
جداکننده - نویسه قبل/بعد از حذف متن.
وقوع - نمونه ای از جداکننده.
Is_after - یک مقدار بولی که نشان می دهد در کدام سمت جداکننده باید متن حذف شود. می تواند یک کاراکتر یا دنباله ای از کاراکترها باشد.
- درست - همه چیز را بعد از جداکننده (از جمله خود جداکننده) حذف کنید.
- FALSE - همه چیزهای قبل از جداکننده را حذف کنید (از جمله خود جداکننده).
وقتی کد تابع در کتاب کار شما درج شد، میتوانید زیر رشتهها را با استفاده از فرمولهای فشرده و زیبا از سلولها حذف کنید.
به عنوان مثال، برای پاک کردن