فهرست مطالب
آیا میخواهید فضاهای سفید را به مؤثرترین روش مدیریت کنید؟ از عبارات منظم برای حذف تمام فضاهای یک سلول استفاده کنید، چند فاصله را با یک کاراکتر جایگزین کنید، فقط فاصله بین اعداد را کوتاه کنید، و موارد دیگر.
از هر داده ورودی که استفاده می کنید، به سختی با مجموعه داده بدون فاصله در بیشتر موارد، فضای خالی خوب است - شما از آن برای جداسازی بصری اطلاعات مختلف استفاده میکنید تا درک آن آسانتر شود. با این حال، در برخی موقعیتها، ممکن است بد شود - فضاهای اضافی میتوانند فرمولهای شما را به هم بزنند و کاربرگهای شما را تقریبا غیرقابل مدیریت کنند.
قبل از استفاده از عبارات منظم برای حذف فضاهای خالی در کاربرگ های اکسل، مایلم به این سوال که در وهله اول به ذهن خطور می کند بپردازیم - چرا وقتی اکسل قبلا TRIM را دارد به regexe نیاز داریم. تابع؟
برای درک تفاوت، بیایید ببینیم در هر مورد چه فضای خالی در نظر گرفته می شود:
- عملکرد داخلی TRIM فقط می تواند کاراکتر فاصله را حذف کند. که دارای مقدار 32 در سیستم ASCII 7 بیتی است.
- عبارات منظم می توانند چند شکل مختلف از فضای خالی مانند فاصله ( )، tab (\t)، carriage return (\r) و new را شناسایی کنند. خط (\n). علاوه بر این، نویسه فضای خالی (\s) وجود دارد که با همه این انواع مطابقت دارد و برای تمیز کردن ورودی خام بسیار مفید است.دادهها.
با دانستن اینکه دقیقاً در پشت صحنه چه اتفاقی میافتد، یافتن راهحل بسیار آسانتر است، درست است؟
چگونه عبارات منظم را در اکسل فعال کنیم
این یک واقعیت شناخته شده است که اکسل خارج از جعبه عبارات منظم را پشتیبانی نمی کند. برای فعال کردن آنها، باید یک تابع VBA سفارشی ایجاد کنید. خوشبختانه، ما قبلاً یکی به نام RegExpReplace داریم. صبر کنید، چرا "تعویض" در حالی که ما در مورد حذف صحبت می کنیم؟ در زبان اکسل، "حذف" فقط کلمه دیگری برای "جایگزینی با یک رشته خالی" است :)
برای افزودن تابع به اکسل خود، فقط کد آن را از این صفحه کپی کنید، آن را در ویرایشگر VBA جایگذاری کنید. ، و فایل خود را به عنوان کتاب کار فعال شده ماکرو (xlsm.) ذخیره کنید.
در اینجا نحو تابع برای مرجع شما آمده است:
RegExpReplace(متن، الگو، جایگزین، [instance_num] , [match_case])سه آرگومان اول لازم است، دو آرگومان آخر اختیاری هستند.
Where:
- Text - رشته اصلی به جستجو در.
- الگو - regex برای جستجو.
- جایگزینی - متنی که باید جایگزین شود. برای حذف فضاهای سفید ، این آرگومان را روی یکی از این موارد قرار دهید:
- رشته خالی ("") تا کاملاً تمام فضاها را برش دهد
- space شخصیت (" ") برای جایگزینی چند فاصله با یک کاراکتر فاصله
- Instance_num (اختیاری) - شماره نمونه. در بیشتر موارد، برای جایگزینی همه نمونهها، آن را حذف میکنید(پیشفرض).
- Match_case (اختیاری) - یک مقدار بولی که نشان میدهد با حروف نوشتاری مطابقت دارد (TRUE) یا نادیده گرفته میشود (FALSE). برای فضای سفید، نامربوط است و بنابراین حذف شده است.
برای اطلاعات بیشتر، لطفاً به تابع RegExpReplace مراجعه کنید.
نحوه حذف فضای سفید با regex - مثالها
با تابع RegExpReplace به کتاب کار شما اضافه شده است، بیایید سناریوهای مختلف را یکی یکی بررسی کنیم.
همه فضاهای خالی را با استفاده از regex حذف کنید
برای حذف تمام فضاهای یک رشته، به سادگی هر کاراکتر فضای خالی را جستجو کنید، از جمله یک فاصله، یک برگه، یک بازگشت حمل و یک تغذیه خط، و آنها را با یک رشته خالی ("") جایگزین کنید.
Pattern : \s+
جایگزینی : ""
با فرض اینکه رشته منبع در A5 باشد، فرمول در B5 این است:
=RegExpReplace(A5, "\s+", "")
برای سهولت در مدیریت الگوهای خود ، می توانید regex را در یک سلول از پیش تعریف شده وارد کنید و آن را با استفاده از یک مرجع مطلق مانند $A$2 به فرمول ارائه دهید، بنابراین آدرس سلول در هنگام کپی کردن فرمول در ستون بدون تغییر باقی می ماند.
=RegExpReplace(A5, $A$2, "")
حذف بیش از یک فضای خالی
برای حذف فضای سفید اضافی (یعنی بیش از n یک فاصله متوالی)، از همان regex \s+ استفاده کنید، اما منطبقات پیدا شده را با یک کاراکتر فاصله جایگزین کنید.
Pattern : \s+
Replacement : " "
=RegExpReplace(A5, "\s+", " ")
لطفا توجه داشته باشید که این فرمول یک کاراکتر فاصله را نه تنها بیندر زیر مجموعه داده، فرض کنید میخواهید تمام فضاهای پیشرو/پایان و همه فضاهای میانی به جز یک فاصله را کوتاه کنید، چندین خط را دست نخورده نگه دارید. برای انجام این کار، به دو تابع مختلف RegExpReplace نیاز دارید.
اولین تابع چندین فاصله را با یک کاراکتر فاصله جایگزین می کند.
=RegExpReplace(A5, " +", " ")
یکی دیگر فاصله ها را حذف می کند. از ابتدا و انتهای یک خط:
=RegExpReplace(A5, "^ +| +$", "")
فقط دو تابع را یکی در دیگری قرار دهید:
=RegExpReplace(RegExpReplace(A5, " +", " "), "^ +| +$", "")
و یک عدد دریافت خواهید کرد نتیجه عالی:
Regex برای جایگزینی چند فاصله با یک کاراکتر
در صورتی که می خواهید تمام فاصله ها را از یک رشته حذف کنید و هر گروه از فاصله های متوالی را جایگزین کنید. با یک کاراکتر خاص، این کاری است که باید انجام دهید:
ابتدا، از این regex برای برش فضاهای سفید پیشرو و انتهایی استفاده کنید:
=RegExpReplace(A8, "^[\s]+|[\s]+$", "")
سپس، تابع فوق را اجرا کنید به آرگومان text یک RegExpReplace دیگر که یک یا چند فضای خالی متوالی را با کاراکتری که شما مشخص کرده اید جایگزین می کند، به عنوان مثال. خط فاصله:
Pattern : \s+
جایگزینی : -
با فرض اینکه رشته منبع در A8 باشد، فرمول این شکل را به خود می گیرد:
=RegExpReplace(RegExpReplace(A8, "^[\s]+|[\s]+$", ""), "\s+", "-")
یا می توانید الگوها و جایگزین ها را در سلول های جداگانه مانند تصویر نشان داده شده وارد کنید:
Regex برای حذف خطوط خالی
این سوالی است که کاربرانی که چندین خط در یک سلول دارند اغلب می پرسند: "خطوط خالی زیادی در سلول های من وجود دارد. آیا راهی برای دریافت آن وجود دارد.به غیر از عبور از هر سلول و حذف دستی هر خط، از شر آنها خلاص شوید؟" پاسخ: این آسان است!
تطبیق خطوط خالی که یک نویسه واحد ندارند از ابتدای ^ خط فعلی تا خط بعدی \n، regex این است:
Pattern : ^\n
اگر خطوط خالی بصری شما حاوی فاصله یا برگه است، از این عبارت منظم استفاده کنید:
Pattern : ^[\t ]*\n
فقط با استفاده از این فرمول، regex را با یک رشته خالی جایگزین کنید، و تمام خطوط خالی به یکباره از بین خواهند رفت!
=RegExpReplace(A5, $A$2, "")
حذف فضاهای خالی با ابزارهای RegEx
نمونههای بالا فقط بخش کوچکی از امکانات فوقالعاده ارائه شده توسط رجکسها را نشان میدهند. متأسفانه، نه همه ویژگیهای عبارات منظم کلاسیک در VBA موجود است.
خوشبختانه، ابزارهای RegEx موجود در مجموعه Ultimate ما فاقد این محدودیتها هستند زیرا توسط موتور RegEx دات نت مایکروسافت پردازش میشوند. این به شما امکان میدهد الگوهای پیچیدهتری بسازید که توسط VBA RegExp. Belo پشتیبانی نمی شوند نمونه ای از چنین عبارت منظمی را پیدا خواهید کرد.
Regex برای حذف فاصله بین اعداد
در یک رشته الفبایی، فرض کنید می خواهید فقط فضاهای خالی بین اعداد را حذف کنید، بنابراین رشته ای مانند "A 1 2 B" به "A 12 B" تبدیل می شود.
برای مطابقت دادن یک فضای خالی بین هر دو رقم، می توانید از نمای زیر استفاده کنید:
Pattern : (?<=\d)\s+(?=\d)
برای ایجاد یک فرمول بر اساسدر رجکس های بالا، در اینجا دو مرحله آسان برای انجام وجود دارد:
- در برگه Ablebits Data ، در گروه Text ، روی Regex کلیک کنید. Tools .
- در صفحه Regex Tools ، داده های منبع را انتخاب کنید، regex خود را وارد کنید، Remove را انتخاب کنید. گزینه، و Remove را بزنید.
برای دریافت نتایج بهعنوان فرمول، نه مقادیر، به یاد داشته باشید که در کادر چک Insert as a formula علامت بزنید.
در یک لحظه، تابع AblebitsRegexRemove را خواهید دید که در یک ستون جدید در سمت راست داده های اصلی قرار داده شده است.
از طرف دیگر، می توانید regex را در برخی از سلول ها وارد کنید. مثلاً A5، و فرمول را مستقیماً در یک سلول با استفاده از کادر گفتگوی Insert Function وارد کنید، جایی که AblebitsRegexRemove در زیر AblebitsUDFs طبقه بندی می شود.
از آنجایی که این تابع به طور ویژه برای حذف رشته ها طراحی شده است، تنها به دو آرگومان نیاز دارد - رشته ورودی و regex:
=AblebitsRegexRemove(A5, $A$2)
این نحوه حذف فاصله ها در اکسل با استفاده از عبارات منظم. از شما سپاسگزارم که خواندید و مشتاقانه منتظر دیدار شما در وبلاگ ما در هفته آینده هستم!
بارگیری های موجود
حذف فضای خالی با regex - نمونه ها (فایل xlsm.)
Ultimate Suite - نسخه آزمایشی (فایل exe)
کلمات بلکه در ابتدا و انتهای یک رشته که خوب نیست. برای خلاص شدن از شر فضای سفید پیشرو و انتهایی، فرمول بالا را در یک تابع دیگر RegExpReplace قرار دهید که فاصله ها را از ابتدا و انتهای آن جدا می کند: =RegExpReplace(RegExpReplace(A5, "\s+", " "), "^[\s]+|[\s]+$", "")
Regex به فاصله سفید پیشرو و انتهایی را حذف کنید
برای جستجوی فضای سفید در ابتدا یا انتهای یک خط، از لنگرهای start ^ و end $ استفاده کنید.
Leading spacespace:
Pattern : ^[\s]+
trailing spacespace:
Pattern : [\s ]+$
پیشرو و انتهای فضای خالی:
الگو : ^[\s]+