فهرست مطالب
سریعترین راه برای تبدیل یک ستون یا ردیف مقادیر به یک آرایه دو بعدی، استفاده از تابع WRAPCOLS یا WRAPROWS است.
از اولین روزهای اکسل، این کار انجام شده است. در محاسبه و تجزیه و تحلیل اعداد بسیار خوب است. اما دستکاری آرایه ها به طور سنتی یک چالش بوده است. معرفی آرایه های پویا استفاده از فرمول های آرایه را بسیار آسان تر کرد. و اکنون، مایکروسافت مجموعهای از توابع جدید آرایه پویا را برای دستکاری و شکلدهی مجدد آرایهها منتشر میکند. این آموزش به شما یاد می دهد که چگونه از دو تابع WRAPCOLS و WRAPROWS برای تبدیل یک ستون یا ردیف به یک آرایه دو بعدی در کمترین زمان استفاده کنید.
عملکرد اکسل WRAPCOLS
تابع WRAPCOLS در اکسل یک سطر یا ستون از مقادیر را بر اساس تعداد مقادیر مشخص شده در هر ردیف به یک آرایه دو بعدی تبدیل می کند.
نحو دارای آرگومان های زیر است:
WRAPCOLS(بردار، wrap_count، [pad_with])کجا:
- بردار (الزامی) - آرایه یا محدوده یک بعدی منبع.
- wrap_count (الزامی) - حداکثر تعداد مقادیر در هر ستون.
- pad_with (اختیاری) - مقداری که باید با آخرین ستون اضافه شود اگر موارد کافی برای پر کردن آن وجود نداشته باشد. اگر حذف شود، مقادیر از دست رفته با #N/A (پیشفرض) اضافه میشوند.
برای مثال، برای تغییر محدوده B5:B24 به یک آرایه دو بعدی با 5 مقدار در هر ستون، فرمول این است:
=WRAPROWS(B5:B24, 5)
شما وارد کنیدآرگومان بردار یک آرایه یک بعدی نیست.
#NUM! error
اگر مقدار wrap_count 0 یا عدد منفی باشد، یک خطای #NUM رخ می دهد.
#SPILL! error
اغلب، یک خطای #SPILL نشان می دهد که سلول های خالی کافی برای ریختن نتایج در آن وجود ندارد. سلول های همسایه را پاک کنید و از بین خواهد رفت. اگر خطا ادامه داشت، معنی #SPILL در اکسل و نحوه رفع آن را بررسی کنید.
این نحوه استفاده از توابع WRAPCOLS و WRAPROWS برای تبدیل یک محدوده یک بعدی به یک آرایه دو بعدی در اکسل است. از شما سپاسگزارم که خواندید و امیدوارم هفته آینده شما را در وبلاگ خود ببینیم!
کتاب کار برای دانلود تمرین کنید
توابع WRAPCOLS و WRAPROWS - مثالها (فایل xlsx.)
<3 <3 <3
3> 3>فرمول در هر سلول منفرد و به طور خودکار به تعداد سلول های مورد نیاز ریخته می شود. در خروجی WRAPCOLS، مقادیر به صورت عمودی، از بالا به پایین، بر اساس مقدار wrap_count مرتب می شوند. پس از رسیدن به تعداد، یک ستون جدید شروع می شود.عملکرد اکسل WRAPROWS
تابع WRAPROWS در اکسل یک سطر یا ستون از مقادیر را بر اساس تعداد مقادیری که در هر ردیف مشخص میکنید به یک آرایه دو بعدی تبدیل میکند.
نحو به شرح زیر است:
WRAPROWS(بردار، wrap_count، [pad_with])کجا:
- بردار (ضروری) - منبع یک بعدی است آرایه یا محدوده.
- wrap_count (الزامی) - حداکثر تعداد مقادیر در هر ردیف.
- pad_with (اختیاری) - مقدار به pad با ردیف آخر اگر موارد کافی برای پر کردن آن وجود نداشته باشد. پیشفرض #N/A است.
برای مثال، برای تبدیل محدوده B5:B24 به یک آرایه دو بعدی با 5 مقدار در هر ردیف، فرمول این است:
=WRAPROWS(B5:B24, 5)
فرمول را در سلول سمت چپ بالای محدوده ریخته شده وارد می کنید و تمام سلول های دیگر را به طور خودکار پر می کند. تابع WRAPROWS مقادیر را به صورت افقی، از چپ به راست، بر اساس مقدار wrap_count مرتب میکند. پس از رسیدن به شمارش، یک ردیف جدید شروع می شود.
در دسترس بودن WRAPCOLS و WRAPROWS
هر دو عملکرد فقط در اکسل برای مایکروسافت 365 (ویندوز و مک) و اکسل برای وب در دسترس هستند.
قبلیدر نسخه های مختلف، می توانید از فرمول های سنتی پیچیده تر برای انجام تبدیل ستون به آرایه و ردیف به آرایه استفاده کنید. در ادامه در این آموزش، راه حل های جایگزین را به طور مفصل مورد بحث قرار خواهیم داد.
نکته. برای انجام یک عملیات معکوس، یعنی تغییر یک آرایه دو بعدی به یک ستون یا ردیف، به ترتیب از تابع TOCOL یا TOROW استفاده کنید.
نحوه تبدیل ستون / سطر به محدوده در اکسل - مثالها
اکنون که کاربرد اصلی را درک کردید، اجازه دهید نگاهی دقیق تر به چند مورد خاص بیندازیم.
حداکثر تعداد مقادیر در هر ستون یا ردیف را تنظیم کنید
بسته به ساختار داده های اصلی شما، ممکن است برای شما مناسب باشد که دوباره در ستون ها (WRAPCOLS) یا ردیف ها (WRAPROWS) مرتب شوند. از هر تابعی که استفاده می کنید، آرگومان wrap_count است که حداکثر تعداد مقادیر را در هر ستون/ردیف تعیین می کند.
برای مثال، برای تبدیل محدوده B4:B23 به یک آرایه دو بعدی، به طوری که هر ستون حداکثر 10 مقدار داشته باشد، از این فرمول استفاده کنید:
=WRAPCOLS(B4:B23, 10)
برای تنظیم مجدد همان محدوده به سطر، به طوری که هر ردیف حداکثر 4 مقدار داشته باشد، فرمول به صورت زیر است: :
=WRAPROWS(B4:B23, 4)
تصویر زیر نشان می دهد که چگونه به نظر می رسد:
مقادیر را در آرایه به دست آمده خالی کنید
در صورتی که مقادیر کافی برای پر کردن وجود نداشته باشد تمام ستونها/ردیفهای محدوده حاصل، WRAPROWS و WRAPCOLS برای حفظ ساختار آرایه دو بعدی، خطاهای #N/A را برمیگردانند.
برای تغییر پیشفرضرفتار، می توانید یک مقدار سفارشی برای آرگومان pad_with اختیاری ارائه دهید.
به عنوان مثال، برای تبدیل محدوده B4:B21 به یک آرایه دو بعدی با حداکثر 5 مقدار، و pad آخرین اگر دادههای کافی برای پر کردن آن وجود ندارد، از این فرمول استفاده کنید:
=WRAPROWS(B4:B21, 5, "-")
برای جایگزینی مقادیر از دست رفته با رشتههای با طول صفر (جایهای خالی)، فرمول این است:
=WRAPROWS(B4:B21, 5, "")
لطفاً نتایج را با رفتار پیش فرض مقایسه کنید (فرمول در D5) که در آن pad_with حذف شده است:
ادغام چند ردیف در محدوده دو بعدی
برای ترکیب چند ردیف جداگانه در یک آرایه 2 بعدی، ابتدا ردیف ها را با استفاده از تابع HSTACK به صورت افقی روی هم قرار می دهید و سپس مقادیر را با استفاده از WRAPROWS یا WRAPCOLS قرار می دهید.
برای مثال، برای ادغام مقادیر از 3 ردیف (B5:J5، B7:G7 و B9:F9) و در ستونهایی قرار دهید که هر کدام شامل 10 مقدار است، فرمول این است:
=WRAPCOLS(HSTACK(B5:J5, B7:G7, B9:F9), 10)
برای ترکیب مقادیر از چندین ردیف در یک محدوده دو بعدی که در آن هر ردیف دارای 5 مقدار است، فرمول به این شکل است:
=WRAPROWS(HSTACK(B5:J5, B7:G7, B9:F9), 5)
C چند ستون را در آرایه دو بعدی ترکیب کنید
برای ادغام چندین ستون در یک محدوده دو بعدی، ابتدا آنها را به صورت عمودی با استفاده از تابع VSTACK روی هم قرار می دهید و سپس مقادیر را در ردیف ها (WRAPROWS) یا ستون ها (WRAPCOLS) قرار می دهید.
برای مثال، برای ترکیب مقادیر از 3 ستون (B5:J5، B7:G7 و B9:F9) در یک محدوده 2 بعدی که در آن هر ستون دارای 10 مقدار است، فرمول این است:
=WRAPCOLS(HSTACK(B5:J5, B7:G7, B9:F9), 10)
برای ترکیب کردنهمان ستون ها را در یک محدوده دو بعدی که در آن هر ردیف دارای 5 مقدار است، از این فرمول استفاده کنید:
=WRAPROWS(HSTACK(B5:J5, B7:G7, B9:F9), 5)
آرایه را بپیچید و مرتب کنید
در شرایطی که محدوده منبع دارای مقادیری در ترتیب تصادفی زمانی که میخواهید خروجی مرتب شود، به این ترتیب عمل کنید:
- آرایه اولیه را به روشی که میخواهید با استفاده از تابع SORT مرتب کنید.
- آرایه مرتبشده را به WRAPCOLS ارائه دهید. یا WRAPROWS.
برای مثال، برای قرار دادن محدوده B4:B23 در ردیف ها، 4 مقدار در هر ردیف، و مرتب سازی محدوده حاصل از A تا Z، فرمولی مانند این بسازید:
=WRAPROWS(SORT(B4:B23), 4)
برای قرار دادن همان محدوده در ستون ها، 10 مقدار در هر ستون، و مرتب سازی خروجی بر اساس حروف الفبا، فرمول این است:
=WRAPCOLS(SORT(B4:B23), 10)
نتایج به شرح زیر است :
نکته. برای مرتب کردن مقادیر در آرایه بهدست آمده به ترتیب نزولی ، آرگومان سوم ( sort_order ) تابع SORT را روی -1 تنظیم کنید.
جایگزین WRAPCOLS برای Excel 365 - 2010
در نسخه های قدیمی اکسل که تابع WRAPCOLS پشتیبانی نمی شود، می توانید فرمول خود را بسازید تا مقادیر را از یک آرایه یک بعدی در ستون ها قرار دهید. این را می توان با استفاده از 5 عملکرد مختلف با هم انجام داد.
جایگزین WRAPCOLS برای تبدیل یک ردیف به محدوده دو بعدی:
IFERROR(IF(ROW(A1)> n ، "" , INDEX( row_range , , ROW(A1) + (COLUMN(A1)-1)* n ))، "")WRAPCOLS جایگزین برای تبدیل ستون به دوبعدی محدوده:
IFERROR(IF(ROW(A1)> n ،""، INDEX( محدوده_ستون ، ROW(A1) + (COLUMN(A1)-1)* n ))، "")کجا n حداکثر تعداد مقادیر در هر ستون است.
در تصویر زیر از فرمول زیر برای تبدیل محدوده یک ردیفی (D4:J4) به یک آرایه سه ردیفی استفاده می کنیم.
=IFERROR(IF(ROW(A1)>3, "", INDEX($D$4:$J$4, , ROW(A1) + (COLUMN(A1)-1)*3)), "")
و این فرمول یک محدوده یک ستونی (B4:B20) را به یک آرایه پنج ردیفی تغییر می دهد:
=IFERROR(IF(ROW(A1)>5, "", INDEX($B$4:$B$20, ROW(A1) + (COLUMN(A1)-1)*5)), "")
راه حل های بالا فرمول های مشابه WRAPCOLS را تقلید می کنند. و نتایج یکسانی را تولید کنید:
=WRAPCOLS(D4:J4, 3, "")
و
=WRAPCOLS(B4:B20, 5, "")
لطفاً به خاطر داشته باشید که بر خلاف آرایه پویا تابع WRAPCOLS، فرمول های سنتی از رویکرد یک فرمول-یک سلول بنابراین، اولین فرمول ما در D8 وارد می شود و 3 سطر پایین و 3 ستون در سمت راست کپی می شود. فرمول دوم در D14 وارد شده و 5 سطر پایین و 4 ستون در سمت راست کپی شده است.
چگونه این فرمول ها کار می کنند
در قلب هر دو فرمول، از تابع INDEX استفاده می کنیم که مقداری را از آرایه ارائه شده بر اساس شماره ردیف و ستون برمی گرداند:
INDEX(آرایه، row_num، [column_num])از آنجایی که با آرایه یک ردیفی سروکار داریم، میتوانیم آرگومان row_num را حذف کنیم، بنابراین پیشفرض آن 1 است. ترفند این است که داشته باشیم col_num به طور خودکار برای هر سلولی که فرمول در آن کپی می شود محاسبه می شود. و در اینجا چگونه این کار را انجام می دهیم:
ROW(A1)+(COLUMN(A1)-1)*3)
تابع ROW شماره ردیف مرجع A1 را برمی گرداند که 1 است.
تابع COLUMN شماره ستون را برمی گرداند.مرجع A1 که آن هم 1 است. با تفریق 1 آن را به صفر تبدیل می کنیم. و با ضرب 0 در 3 0 به دست می آید.
سپس، 1 برگردانده شده توسط ROW و 0 برگردانده شده توسط COLUMN را جمع می کنید و در نتیجه 1 می گیرید.
به این ترتیب، فرمول INDEX در بالا -سلول سمت چپ محدوده مقصد (D8) این تغییر را انجام می دهد:
INDEX($D$4:$J$4, ,ROW(A1) + (COLUMN(A1)-1)*3))
به
INDEX($D$4:$J$4, ,1)
تغییر می کند و مقدار را از ستون 1 برمی گرداند. از آرایه مشخص شده، که در D4 "Apples" است.
وقتی فرمول در سلول D9 کپی می شود، مراجع سلولی نسبی بر اساس موقعیت نسبی ردیف ها و ستون ها تغییر می کنند در حالی که مرجع محدوده مطلق بدون تغییر باقی می ماند:
INDEX($D$4:$J$4,, ROW(A2)+(COLUMN(A2)-1)*3))
تبدیل به:
INDEX($D$4:$J$4,, 2+(1-1)*3))
می شود:
INDEX($D$4:$J$4,, 2))
و مقدار را از ستون دوم آرایه مشخص شده، که در E4 "Apricots" است.
تابع IF شماره ردیف را بررسی می کند و اگر از تعداد ردیف هایی که شما مشخص کرده اید بیشتر باشد (در مورد ما 3) یک رشته خالی برمی گرداند ( "")، در غیر این صورت نتیجه تابع INDEX:
IF(ROW(A1)>3, "", INDEX(…))
در نهایت، تابع IFERROR یک #REF را برطرف می کند! خطایی که زمانی رخ میدهد که فرمول در سلولهای بیشتری از آنچه واقعاً مورد نیاز است کپی میشود.
فرمول دوم که یک ستون را به محدوده دو بعدی تبدیل میکند با همان منطق کار میکند. تفاوت این است که از ترکیب ROW + COLUMN برای کشف آرگومان row_num برای INDEX استفاده میکنید. پارامتر col_num در این مورد مورد نیاز نیست زیرا فقط وجود داردیک ستون در آرایه منبع.
جایگزین WRAPROWS برای Excel 365 - 2010
برای قرار دادن مقادیر از یک آرایه یک بعدی در ردیفهایی در اکسل 2019 و قبل از آن، میتوانید استفاده کنید جایگزین های زیر برای تابع WRAPROWS.
تبدیل یک ردیف به محدوده دو بعدی:
IFERROR(IF(COLUMN(A1)> n , "", INDEX( row_range , , COLUMN(A1)+(ROW(A1)-1)* n ))، "")تغییر یک ستون به محدوده دو بعدی:
IFERROR(IF( COLUMN(A1)> n ، ""، INDEX( محدوده_ستون ، COLUMN(A1)+(ROW(A1)-1)* n )) , "")جایی که n حداکثر تعداد مقادیر در هر ردیف است.
در مجموعه داده های نمونه ما، از فرمول زیر برای تبدیل محدوده یک ردیفی (D4) استفاده می کنیم. :J4) به یک محدوده سه ستونی. فرمول در سلول D8 قرار می گیرد و سپس در 3 ستون و 3 ردیف کپی می شود. فرمول زیر را در D14 وارد کنید و آن را بین 5 ستون و 4 سطر بکشید.
=IFERROR(IF(COLUMN(A1)>5, "", INDEX($B$4:$B$20, COLUMN(A1)+(ROW(A1)-1)*5)), "")
در Excel 365، نتایج مشابهی را می توان با فرمول های WRAPCOLS معادل بدست آورد:
=WRAPROWS(D4:J4, 3, "")
and
=WRAPROWS(B4:B20, 5, "")
چگونه این فرمول ها کار می کنند
اساساً، این فرمول ها مانند مثال قبلی کار می کنند. تفاوت در نحوه تعیین مختصات row_num و col_num برای تابع INDEX است:
INDEX($D$4:$J$4,, COLUMN(A1)+(ROW(A1)-1)*3))
برای بدست آوردن شماره ستون برای بالا سلول سمت چپ در محدوده مقصد (D8)، شما از این استفاده می کنیدعبارت:
COLUMN(A1)+(ROW(A1)-1)*3)
که به:
1+(1-1)*3
تغییر می کند و 1 می دهد.
در نتیجه فرمول زیر مقداری را از ستون اول آرایه مشخص شده برمی گرداند که عبارت است از "Apples":
INDEX($D$4:$J$4,, 1)
تا اینجای کار، نتیجه مشابه قبلی است. مثال. اما بیایید ببینیم در سلولهای دیگر چه اتفاقی میافتد…
در سلول D9، مراجع سلولی نسبی به صورت زیر تغییر میکنند:
INDEX($D$4:$J$4,, COLUMN(A2)+(ROW(A2)-1)*3))
بنابراین، فرمول به:
تبدیل میشود: INDEX($D$4:$J$4,, 1+(2-1)*3))
می شود:
INDEX($D$4:$J$4,, 4))
و مقدار را از ستون 4 آرایه مشخص شده، که "Cherries" در G4 است، برمی گرداند.
0> تابع IF شماره ستون را بررسی می کند و اگر از تعداد ستون هایی که شما مشخص کرده اید بیشتر باشد، یک رشته خالی ("") برمی گرداند، در غیر این صورت نتیجه تابع INDEX:
IF(COLUMN(A1)>3, "", INDEX(…))
به عنوان یک لمس نهایی، IFERROR از #REF جلوگیری می کند! در صورت کپی کردن فرمول در سلولهای بیشتر از آنچه که واقعاً نیاز است، خطاهای ظاهر شدن در سلولهای "اضافی".
عملکرد WRAPCOLS یا WRAPROWS کار نمیکند
اگر توابع "wrap" در دسترس نیستند در اکسل شما یا منجر به خطا می شود، به احتمال زیاد یکی از دلایل زیر است.
#NAME؟ خطا
در اکسل 365، یک #NAME؟ ممکن است خطا رخ دهد زیرا نام تابع را اشتباه نوشتید. در نسخه های دیگر، نشان می دهد که توابع پشتیبانی نمی شوند. به عنوان یک راه حل، می توانید از جایگزین WRAPCOLS یا جایگزین WRAPROWS استفاده کنید.
#VALUE! error
یک خطای #VALUE رخ می دهد اگر