فهرست مطالب
در این آموزش، ما به چندین روش برای یافتن و جایگزینی چندین کلمه، رشته یا نویسه تکی نگاه خواهیم کرد، بنابراین شما می توانید بهترین گزینه را انتخاب کنید که با نیازهای شما مطابقت دارد.
مردم معمولاً چگونه در اکسل جستجو می کنند؟ بیشتر، با استفاده از Find & قابلیت جایگزینی، که برای مقادیر تک به خوبی کار می کند. اما اگر ده ها یا حتی صدها مورد برای جایگزینی داشته باشید چه؟ مطمئناً، هیچ کس نمی خواهد همه آن جایگزین ها را به صورت دستی یک به یک انجام دهد و پس از تغییر داده ها، دوباره این کار را انجام دهد. خوشبختانه، چند روش موثرتر برای انجام جایگزینی انبوه در اکسل وجود دارد، و ما قصد داریم هر یک از آنها را به تفصیل بررسی کنیم.
مقادیر متعدد را با SUBSTITUTE تودرتو پیدا و جایگزین کنید
ساده ترین راه برای یافتن و جایگزینی چندین ورودی در اکسل استفاده از تابع SUBSTITUTE است.
منطق فرمول بسیار ساده است: شما چند تابع جداگانه می نویسید تا یک مقدار قدیمی را با یک مقدار جدید جایگزین کنید. . و سپس، آن توابع را یکی در دیگری قرار می دهید، به طوری که هر SUBSTITUTE بعدی از خروجی SUBSTITUTE قبلی برای جستجوی مقدار بعدی استفاده می کند.
SUBSTITUTE(SUBSTITUTE(SUBSTITUTE( text, old_text1، new_text1)، old_text2، new_text2)، old_text3، new_text3)در فهرست مکانها در A2:A10، فرض کنید میخواهید نامهای کوتاه شده کشورها (مانند FR ، UK و USA ) را با نام کامل جایگزین کنید.تابع MassReplace فقط در کتاب کاری که کد را در آن وارد کرده اید کار می کند. اگر مطمئن نیستید که چگونه این کار را به درستی انجام دهید، لطفاً مراحل توضیح داده شده در نحوه درج کد VBA در اکسل را دنبال کنید.
هنگامی که کد به کتاب کار شما اضافه شد، تابع در فرمول intellisense ظاهر می شود - فقط نام تابع، نه آرگومان ها! با این حال، من معتقدم که به خاطر سپردن نحو کار چندان مهمی نیست:
MassReplace(input_range، find_range، replace_range)Where:
- Input_range - محدوده منبع که در آن میخواهید مقادیر را جایگزین کنید.
- Find_range - کاراکترها، رشتهها یا کلماتی که باید جستجو کنید.
- Replace_range - کاراکترها، رشتهها، یا کلماتی برای جایگزینی با آنها.
در اکسل 365، به دلیل پشتیبانی از آرایه های پویا، این فرمول به عنوان یک فرمول معمولی عمل می کند، که فقط باید در سلول بالایی (B2) وارد شود:
=MassReplace(A2:A10, D2:D4, E2:E4)
در اکسل پیش پویا، این فرمول به عنوان یک فرمول آرایه CSE قدیمی عمل می کند: شما کل محدوده منبع را انتخاب می کنید (B2:B10)، تایپ کنید فرمول، و کلیدهای Ctrl + Shift + Enter را به طور همزمان فشار دهید تا آن را کامل کنید.
مزایا : یک جایگزین مناسب برای یک تابع LAMBDA سفارشی در اکسل 2019 ، اکسل 2016 و نسخه های قبلی
مشکلات : کتاب کار باید به عنوان یک فایل .xlsm فعال با ماکرو ذخیره شود
تعویض انبوه در اکسل با ماکرو VBA
اگر عاشق خودرو هستید جفت گیری وظایف رایج با ماکروها، سپس شمامی توانید از کد VBA زیر برای یافتن و جایگزینی چندین مقدار در یک محدوده استفاده کنید.
Sub BulkReplace() Dim Rng As Range, SourceRng As Range, ReplaceRng As Range On Error Resume Next Set SourceRng = Application.InputBox( "داده های منبع: " , "Bulk Replace" , Application.Selection.Address, Type :=8) Err.Clear If Not SourceRng چیزی نیست سپس ReplaceRng = Application.InputBox را تنظیم کنید( "Replace range:" , "Bulk Replace" , Type :=8) Err.Clear If Not ReplaceRng چیزی نیست پس Application.ScreenUpdating = False برای هر Rng در ReplaceRng.Columns(1).Cells SourceRng.Replace what:=Rng.Value، جایگزینی:=Rng.Offset(0, 1).Value Next Application.ScreenUpdating = True End If End If End Subبرای استفاده فوری از ماکرو، می توانید نمونه کار ما را حاوی کد دانلود کنید. یا می توانید کد را در کتاب کار خود وارد کنید.
نحوه استفاده از ماکرو
قبل از اجرای ماکرو، مقادیر قدیمی و جدید را مانند تصویر زیر در دو ستون مجاور تایپ کنید ( C2:D4).
و سپس، داده های منبع خود را انتخاب کنید، Alt + F8 را فشار دهید، ماکرو BulkReplace را انتخاب کنید و روی Run کلیک کنید.
از آنجایی که source rage از قبل انتخاب شده است، فقط مرجع را تأیید کنید و روی OK کلیک کنید:
بعد از آن، جایگزینی محدوده را انتخاب کنید و روی OK کلیک کنید:
انجام شد!
مزایا : یک بار راه اندازی، استفاده مجدد در هر زمان
معایب : ماکرو باید با هر داده اجرا شودchange
Multiple find and جایگزین در اکسل با ابزار Substring
در اولین مثال ذکر کردم که SUBSTITUTE تودرتو ساده ترین راه برای جایگزینی چندین مقدار در اکسل است. قبول دارم که اشتباه کردم. مجموعه نهایی ما کارها را آسان تر می کند!
برای جایگزینی انبوه در کاربرگ خود، به برگه Ablebits Data بروید و روی Substring Tools > کلیک کنید. جایگزین کردن رشتههای فرعی .
کادر محاورهای Replace Substrings ظاهر میشود و از شما میخواهد محدوده منبع و <1 را تعریف کنید. محدوده>زیررشتهها .
با انتخاب دو محدوده، روی دکمه Replace کلیک کنید و نتایج را در یک ستون جدید درج شده در سمت راست بیابید. از داده های اصلی بله، به همین راحتی است!
نکته. قبل از کلیک کردن روی Replace ، یک چیز مهم وجود دارد که باید در نظر بگیرید - کادر حساس به بزرگی و کوچکی . اگر می خواهید حروف بزرگ و کوچک را به عنوان کاراکترهای مختلف استفاده کنید، حتماً آن را انتخاب کنید. در این مثال، ما این گزینه را علامت می زنیم زیرا فقط می خواهیم رشته های بزرگ را جایگزین کنیم و رشته های فرعی مانند "fr"، "uk" یا "ak" را در کلمات دیگر دست نخورده باقی بگذاریم.
اگر کنجکاو هستید که بدانید چه عملیات انبوه دیگری را می توان روی رشته ها انجام داد، سایر ابزارهای Substring موجود در مجموعه Ultimate ما را بررسی کنید. یا حتی بهتر از آن، نسخه ارزیابی زیر را دانلود کنید و آن را امتحان کنید!
این روش پیدا کردن و جایگزینی است.چندین کلمه و کاراکتر به طور همزمان در اکسل. از خواندن شما سپاسگزارم و امیدوارم هفته آینده شما را در وبلاگ خود ببینیم!
دانلودهای موجود
پیدا کردن و جایگزینی چندگانه در Excel (فایل xlsm.)
Ultimate Suite 14 نسخه کاملاً کاربردی -day (فایل exe)
names.برای انجام این کار، مقادیر قدیمی را در D2:D4 و مقادیر جدید را در E2:E4 مانند تصویر زیر وارد کنید. و سپس، فرمول زیر را در B2 قرار دهید و Enter را فشار دهید:
=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A2:A10, D2, E2), D3, E3), D4, E4)
… و همه جایگزین ها را به یکباره انجام خواهید داد:
لطفاً توجه داشته باشید، رویکرد فوق فقط در Excel 365 که از آرایههای پویا پشتیبانی میکند، کار میکند.
در نسخههای پیشدینامیک Excel 2019، Excel 2016 و نسخههای قبلی، فرمول باید برای بالاترین سلول (B2) نوشته شده و سپس در سلول های زیر کپی می شود:
=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A2, $D$2, $E$2), $D$3, $E$3), $D$4, $E$4)
لطفا توجه داشته باشید که در این مورد، مقادیر جایگزین را با ارجاعات سلول مطلق قفل می کنیم، بنابراین هنگام کپی کردن فرمول به پایین تغییر نمی کنند.
توجه داشته باشید. تابع SUBSTITUTE حساس به حروف کوچک و بزرگ است، به این معنی که شما باید مقادیر قدیمی ( old_text ) را در همان حروف کوچکی که در داده های اصلی ظاهر می شود تایپ کنید.
به همان اندازه که ممکن است آسان باشد، این روش یک اشکال قابل توجه دارد - وقتی ده ها مورد برای جایگزینی دارید، مدیریت عملکردهای تودرتو بسیار دشوار می شود.
مزایا : آسان -برای پیاده سازی؛ پشتیبانی شده در تمام نسخه های اکسل
مشکلات : بهتر است برای تعداد محدودی از مقادیر پیدا/جایگزین استفاده شود
جستجو و جایگزینی چندین ورودی با XLOOKUP
در شرایطی که به دنبال جایگزینی کل محتوای سلول هستید، نه بخشی از آن، تابع XLOOKUP مفید است.
بیاییدمی گویید فهرستی از کشورها در ستون A دارید و می خواهید همه اختصارات را با نام کامل مربوطه جایگزین کنید. مانند مثال قبل، شما با وارد کردن آیتم های "Find" و "Replace" در ستون های جداگانه (به ترتیب D و E) شروع می کنید و سپس این فرمول را در B2 وارد می کنید:
=XLOOKUP(A2, $D$2:$D$4, $E$2:$E$4, A2)
این فرمول که از زبان اکسل به زبان انسانی ترجمه شده است، به این صورت است:
مقدار A2 (lookup_value) را در D2:D4 (lookup_array) جستجو کنید و یک مطابقت را از E2:E4 (آرایه_return_return) برگردانید. اگر پیدا نشد، مقدار اصلی را از A2 بکشید.
روی دستگیره پر دوبار کلیک کنید تا فرمول در سلول های زیر کپی شود و نتیجه شما را منتظر نخواهد گذاشت:
از آنجایی که تابع XLOOKUP فقط در اکسل 365 موجود است، فرمول فوق در نسخه های قبلی کار نخواهد کرد. با این حال، شما به راحتی می توانید این رفتار را با ترکیبی از IFERROR یا IFNA و VLOOKUP تقلید کنید:
=IFNA(VLOOKUP(A2, $D$2:$E$4, 2, FALSE), A2)
توجه. برخلاف SUBSTITUTE، توابع XLOOKUP و VLOOKUP به حروف بزرگ و کوچک حساس نیستند ، به این معنی که مقادیر جستجو را بدون توجه به حروف بزرگ جستجو می کنند. برای مثال، فرمول ما هر دو FR و fr را با France جایگزین میکند.
مزایا : استفاده غیرعادی از توابع معمول. در تمام نسخه های اکسل کار می کند
مشکلات : در سطح سلول کار می کند، نمی تواند بخشی از محتویات سلول را جایگزین کند
تعویض چندگانه با استفاده از تابع LAMBDA بازگشتی
برای مایکروسافت365 مشترک، اکسل یک تابع ویژه را فراهم می کند که امکان ایجاد توابع سفارشی را با استفاده از زبان فرمول سنتی فراهم می کند. بله، من در مورد LAMBDA صحبت می کنم. زیبایی این روش این است که می تواند یک فرمول بسیار طولانی و پیچیده را به فرمولی بسیار فشرده و ساده تبدیل کند. علاوه بر این، به شما امکان می دهد توابع خود را ایجاد کنید که در اکسل وجود ندارند، چیزی که قبلا فقط با VBA امکان پذیر بود.
برای اطلاعات دقیق در مورد ایجاد و استفاده از توابع سفارشی LAMBDA، لطفاً این آموزش را بررسی کنید: چگونه برای نوشتن توابع LAMBDA در اکسل. در اینجا، ما چند مثال عملی را مورد بحث قرار خواهیم داد.
مزایا : نتیجه یک عملکرد زیبا و به طرز شگفت انگیزی برای استفاده ساده است، بدون توجه به تعداد جفت های جایگزین
اشکالات : فقط در Excel 365 موجود است. مختص کتاب کار است و قابل استفاده مجدد در کتابهای مختلف نیست
مثال 1. جستجو و جایگزینی چندین کلمه / رشته به طور همزمان
برای جایگزینی چند کلمه یا متن در یک حرکت، ما یک سفارشی ایجاد کردهایم. تابع LAMBDA، با نام MultiReplace ، که می تواند یکی از این اشکال را داشته باشد:
=LAMBDA(text, old, new, IF(old"", MultiReplace(SUBSTITUTE(text, old, new), OFFSET(old, 1, 0), OFFSET(new, 1, 0)), text))
یا
=LAMBDA(text, old, new, IF(old="", text, MultiReplace(SUBSTITUTE(text, old, new), OFFSET(old, 1, 0), OFFSET(new, 1, 0))))
هر دو بازگشتی هستند توابعی که خود را صدا می کنند. تفاوت فقط در نحوه ایجاد نقطه خروج است.
در فرمول اول، تابع IF بررسی می کند که آیا لیست old خالی نیست (قدیمی""). اگر TRUE باشد، تابع MultiReplace فراخوانی می شود. اگر FALSE، تابع متن شکل فعلی خود را برمی گرداند و خارج می شود.
فرمول دوم از منطق معکوس استفاده می کند: اگر old خالی باشد (old="")، سپس <1 را برگردانید>text و خروج. در غیر این صورت با MultiReplace تماس بگیرید.
پیچیده ترین قسمت انجام شد! کاری که باید انجام دهید این است که تابع MultiReplace را در Name Manager مانند تصویر زیر نام گذاری کنید. برای دستورالعملهای دقیق، لطفاً نحوه نامگذاری یک تابع LAMBDA را ببینید.
هنگامی که تابع نامی دریافت کرد، میتوانید مانند هر تابع داخلی دیگر از آن استفاده کنید.
هر کدام از دو نوع فرمول را انتخاب کنید، از دیدگاه کاربر نهایی، نحو به این سادگی است:
MultiReplace(متن، قدیمی، جدید)Where:
- متن - داده منبع
- قدیم - مقادیری که باید پیدا شوند
- جدید - مقادیری که باید جایگزین شوند
با کمی جلوتر از مثال قبلی، اجازه دهید نه تنها اختصارات کشور، بلکه اختصارات دولتی را نیز جایگزین کنیم. برای این کار، اختصارات ( قدیم مقادیر) را در ستون D که با D2 شروع می شود و نام های کامل ( مقادیر جدید) را در ستون E که با E2 شروع می شود تایپ کنید.
در B2، تابع MultiReplace را وارد کنید:
=MultiReplace(A2:A10, D2, E2)
Enter را بزنید و از نتایج لذت ببرید :)
این فرمول چگونه کار می کند
سرنخ برای درک فرمول درک بازگشت است. این ممکن است پیچیده به نظر برسد، اما اصل بسیار ساده است. با هریکتکرار، یک تابع بازگشتی یک نمونه کوچک از یک مسئله بزرگتر را حل می کند. در مورد ما، تابع MultiReplace از طریق مقادیر قدیمی و جدید حلقه می زند و با هر حلقه، یک جایگزین انجام می دهد:
MultiReplace (SUBSTITUTE(text, old, new), OFFSET(old, 1, 0), OFFSET(new, 1, 0))
همانند توابع SUBSTITUTE تو در تو، نتیجه SUBSTITUTE قبلی به پارامتر text برای SUBSTITUTE بعدی تبدیل می شود. به عبارت دیگر، در هر فراخوان بعدی MultiReplace ، تابع SUBSTITUTE نه رشته متن اصلی، بلکه خروجی تماس قبلی را پردازش می کند.
برای رسیدگی به همه موارد در <1 فهرست>قدیمی ، با بالاترین سلول شروع می کنیم و از تابع OFFSET برای جابجایی 1 ردیف به پایین با هر فعل و انفعال استفاده می کنیم:
OFFSET(old, 1, 0)
همین کار برای انجام می شود. new list:
OFFSET(new, 1, 0)
نکته مهم این است که یک نقطه خروج برای جلوگیری از ادامه تماس های بازگشتی برای همیشه فراهم کنید. با کمک تابع IF انجام می شود - اگر سلول قدیمی خالی باشد، تابع متن شکل فعلی خود را برمی گرداند و خارج می شود:
=LAMBDA(text, old, new, IF(old="", text, MultiReplace(…)))
یا
=LAMBDA(text, old, new, IF(old"", MultiReplace(…), text))
مثال 2. چندین کاراکتر را در اکسل جایگزین کنید
در اصل، تابع MultiReplace که در مثال قبلی مورد بحث قرار گرفت، می تواند کاراکترهای جداگانه را نیز مدیریت کنید، مشروط بر اینکه هر کاراکتر قدیمی و جدید در یک سلول جداگانه وارد شود، دقیقاً مانند نامهای اختصاری و کامل در تصاویر بالا.
اگر ترجیح میدهید نویسه قدیمی را وارد کنید.کاراکترها در یک سلول و کاراکترهای جدید در سلول دیگر، یا آنها را مستقیماً در فرمول تایپ کنید، سپس می توانید یک تابع سفارشی دیگر به نام ReplaceChars را با استفاده از یکی از این فرمول ها ایجاد کنید:
=LAMBDA(text, old_chars, new_chars, IF(old_chars"", ReplaceChars(SUBSTITUTE(text, LEFT(old_chars), LEFT(new_chars)), RIGHT(old_chars, LEN(old_chars)-1), RIGHT(new_chars, LEN(new_chars)-1)), text))
یا
=LAMBDA(text, old_chars, new_chars, IF(old_chars="", text, ReplaceChars(SUBSTITUTE(text, LEFT(old_chars), LEFT(new_chars)), RIGHT(old_chars, LEN(old_chars)-1), RIGHT(new_chars, LEN(new_chars)-1))))
به یاد داشته باشید که طبق معمول تابع Lambda جدید خود را در Name Manager نامگذاری کنید:
و تابع سفارشی جدید شما آماده استفاده است:
ReplaceChars(text، old_chars، new_chars)Where:
- Text - رشته های اصلی
- قدیم - کاراکترهایی که باید جستجو شوند
- جدید - کاراکترهایی که باید جایگزین شوند
برای آزمایش میدانی، بیایید کاری را انجام دهیم که اغلب بر روی داده های وارد شده انجام می شود - نقل قول های هوشمند و آپستروف های هوشمند را با نقل قول های مستقیم و آپستروف های مستقیم جایگزین کنید.
ابتدا، نقل قول های هوشمند و آپستروف هوشمند را در D2، نقل قول های مستقیم و آپستروف های مستقیم را در E2 وارد می کنیم. ، جدا کردن کاراکترها با فاصله برای خوانایی بهتر. (از آنجایی که ما از یک جداکننده در هر دو سلول استفاده می کنیم، هیچ تاثیری روی نتیجه نخواهد داشت - اکسل فقط یک فاصله را با یک فاصله جایگزین می کند.)
پس از آن، این فرمول را در B2 وارد می کنیم:
=ReplaceChars(A2:A4, D2, E2)
و دقیقاً نتایجی را که به دنبالش بودیم بدست آورید:
همچنین می توان کاراکترها را مستقیماً در فرمول تایپ کرد. در مورد ما، فقط به یاد داشته باشید که نقل قول های مستقیم را مانند این "تکراری" کنید:
=ReplaceChars(A2:A4, "“ ” ’", """ "" '")
این فرمول چگونه کار می کند
ReplaceChars تابع در میان رشتههای old_chars و new_chars چرخش میکند و هر بار یک جایگزین را از اولین کاراکتر سمت چپ شروع میکند. این قسمت توسط تابع SUBSTITUTE انجام می شود:
SUBSTITUTE(text, LEFT(old_chars), LEFT(new_chars))
با هر تکرار، تابع RIGHT یک کاراکتر را از سمت چپ هر دو کاراکترهای_قدیمی و حذف می کند. رشته های new_chars ، به طوری که LEFT می تواند جفت کاراکترهای بعدی را برای جایگزینی واکشی کند:
ReplaceChars(SUBSTITUTE(text, LEFT(old_chars), LEFT(new_chars)), RIGHT(old_chars, LEN(old_chars)-1), RIGHT(new_chars, LEN(new_chars)-1))
قبل از هر تماس بازگشتی، تابع IF رشته old_chars را ارزیابی می کند. . اگر خالی نباشد، تابع خود را فراخوانی می کند. به محض اینکه آخرین کاراکتر جایگزین شد، فرآیند تکرار به پایان رسید، فرمول متن شکل فعلی خود را برمی گرداند و خارج می شود.
توجه داشته باشید. از آنجایی که تابع SUBSTITUTE مورد استفاده در فرمول های اصلی ما حساس به حروف بزرگ و کوچک است ، هر دو لامبدا ( MultiReplace و ReplaceChars ) حروف بزرگ و کوچک را به عنوان کاراکترهای متفاوت در نظر می گیرند.
یافتن انبوه و جایگزینی با UDF
در صورتی که تابع LAMBDA در اکسل شما در دسترس نباشد، می توانید یک تابع تعریف شده توسط کاربر برای چند جایگزینی به روش سنتی با استفاده از VBA بنویسید.
برای تمایز UDF از تابع MultiReplace تعریف شده توسط LAMBDA، نام آن را متفاوت میگذاریم، مثلا MassReplace . کد تابع به صورت زیر است:
تابع MassReplace(InputRng به عنوان محدوده، FindRng به عنوان محدوده، ReplaceRng به عنوان محدوده) به عنوان Variant () DimarRes() بهعنوان آرایه متغیر برای ذخیره نتایج: Dim arSearchReplace()، sTmp بهعنوان رشته «آرایه جایی که جفتهای find/replace ذخیره شوند، رشته موقت کمنور iFindCurRow، cntFindRows به عنوان طولانی» فهرست ردیف فعلی آرایه SearchReplace، شمارش از سطرها کم رنگ iInputCurRow، iInputCurCol، cntInputRows، cntInputCols تا زمانی که 'شاخص ردیف فعلی در محدوده منبع، نمایه ستون فعلی در محدوده منبع، تعداد سطرها، تعداد ستون ها cntInputRows = InputRng.Rows.Count.Count cnt =InputRng .Columns.Count cntFindRows = FindRng.Rows.Count ReDim arRes(1 به cntInputRows، 1 به cntInputCols) ReDim arSearchReplace(1 برای cntFindRows، 1 تا 2) 'آماده سازی آرایه از جفت های find/Replace arRes1/Replace برای cntInputCols برای iiFi iFindCurRow, 1) = FindRng.Cells(iFindCurRow, 1).Value arSearchReplace(iFindCurRow, 2) = ReplaceRng.Cells(iFindCurRow, 1).Value Next 'جستجو و جایگزینی در محدوده منبع برای iInput1RowsC =Input1RowCur 1 به cntInputCols sTm p = InputRng.Cells(iInputCurRow، iInputCurCol).Value 'جایگزینی همه جفتهای find/replace در هر سلول برای iFindCurRow = 1 برای cntFindRows sTmp = Replace(sTmp, arSearchReplace(iFindCurRow, arSearch) NextCurRow, 1, iFindCurRow, 1,i (iInputCurRow، iInputCurCol) = sTmp بعدی بعدی MassReplace = تابع پایانی arResمانند توابع تعریف شده توسط LAMBDA، UDF ها کتاب کار گسترده هستند . یعنی