اکسل مدتهاست که توانایی ادغام سلولهای مجاور را در یک سلول بزرگتر و منفرد دارد. این توانایی توسط بسیاری از طراحان کاربرگ استفاده شده است تا به صفحات کاری خود ظاهری صیقلی و حرفه ای ببخشند.
با این حال، استفاده از سلول های ادغام شده یک اشکال بزرگ دارد: شما نمی توانید جداول را که شامل آنها می شوند مرتب کنید. اگر تلاش کنید، پیامی دریافت خواهید کرد که می گوید: "عملیات نیاز به اندازه یکسان سلول های ادغام شده دارد."
واضح ترین راه حل مشکل استفاده نکردن از سلول های ادغام شده است. به عنوان مثال، اجازه دهید بگوییم که شما یک کاربرگ دارید که در آن هر "رکورد" در واقع از دو ردیف تشکیل شده است، و ستون اول کاربرگ حاوی سلول های ادغام شده است. (هر رکورد دو ردیفه با دو سلول ادغام شده که در دو ردیف قرار دارند شروع می شود. این سلول ادغام شده حاوی نام پروژه است.)
بهتر است سلول های ستون اول را از حالت ادغام خارج کنید، اما ممکن است تعجب کنید که چگونه رکوردها را به درستی در کاربرگ مرتب کنید. چگونه جفت های ردیف را در طول مرتب سازی کنار هم نگه داریم. برای این کار می توانید نام پروژه خود را در ردیف اول قرار دهید و نام پروژه را با "zz" در ردیف دوم اضافه کنید. به عنوان مثال، اگر ردیف اول حاوی "Wilburn Chemical" (نام پروژه) باشد، ردیف دوم می تواند حاوی "Wilburn Chemicalzz" باشد. سلول ردیف دوم را فرمت کنید تا نام نمایش داده نشود (مانند متن سفید در پسزمینه سفید)، و سپس میتوانید با موفقیت هر طور که میخواهید مرتب کنید.
راه حل دیگر این است که از یک ماکرو برای جابجایی کاربرگ خود و انجام مرتب سازی استفاده کنید. با فرض اینکه سلول های ادغام شده در ستون A هستند (همانطور که قبلا توضیح داده شد)، می توانید از ماکرو زیر برای مرتب کردن داده ها بر اساس محتوای ستون A استفاده کنید:
Sub SortList()
Dim sAddStart As String
Dim rng As Range
Dim rng2 As Range
Dim lRows As Long
Application.ScreenUpdating = False
sAddStart = Selection.Address
Set rng = Range("A1").CurrentRegion
With rng
lRows = .Rows.Count - 1
.Cells(1).EntireColumn.Insert
.Cells(1).Offset(0, -1) = "Temp"
.Cells(1).Offset(1, -1).FormulaR1C1 = _
"=+RC[1]&"" ""&ROW()"
.Cells(1).Offset(2, -1).FormulaR1C1 = _
"=+R[-1]C[1]&"" ""&ROW()"
Set rng2 = .Cells(1).Offset(1, -1).Resize(lRows, 1)
Range(.Cells(2, 0), .Cells(3, 0)).AutoFill _
Destination:=rng2
rng2.Copy
rng2.PasteSpecial Paste:=xlValues
.Columns(1).MergeCells = False
.CurrentRegion.Sort _
Key1:=Range("A2"), Order1:=xlAscending, _
Header:=xlYes, OrderCustom:=1, _
MatchCase:=False, Orientation:=xlTopToBottom
rng2.EntireColumn.Delete
With Range(.Cells(2, 1), .Cells(3, 1))
.Merge
.Copy
.Cells(3, 1).Resize(lRows - 2, 1). _
PasteSpecial Paste:=xlFormats
End With
End With
Application.CutCopyMode = False
Range(sAddStart).Select
Application.ScreenUpdating = True
End Sub
ماکرو یک ستون موقت درج می کند، موارد را از ستون اول لیست می خواند، شماره ردیف را اضافه می کند، آن را در ستون موقت کپی می کند، سلول ها را از هم ادغام می کند، لیست را مرتب می کند، ستون موقت را حذف می کند و ستون A را دوباره ادغام می کند. (مرتب کردن جدول با سلول های ادغام شده کار بسیار زیادی است!)
این ماکرو برای چیدمان خاصی از داده های شما بسیار خاص است و بنابراین باید آزمایش شود و احتمالاً اصلاح شود تا مطمئن شوید که با داده های فرمت شده به روش دیگری کار می کند.