جیمز داده هایی در یک کاربرگ دارد که در یک سری ردیف قرار دارد. یکی از ستون های داده شامل سلول هایی است که در هر سلول دارای چندین خط هستند. (دادههای سلول با فشار دادن Alt+Enter بین آیتمها به خطوط جدا شدند.) جیمز میخواهد این دادهها را به چند ردیف تقسیم کند. به عنوان مثال، اگر سه خط داده در یک سلول در یک ردیف وجود داشته باشد، داده های آن سلول باید به سه ردیف تقسیم شوند.
اکسل با استفاده از ابزار Text to Columns روشی مفید برای تقسیم داده ها به ستون های جداگانه ارائه می دهد. این می تواند برای تقسیم داده ها بر اساس وجود کاراکتر ASCII 10، که اکسل با فشار دادن Alt+Enter وارد می کند، استفاده شود . مشکل این است که در حالی که این با موفقیت دادهها را به ستونهای جداگانه تقسیم میکند، مانند درخواست جیمز آنها را در ردیفهای جداگانه قرار نمیدهد.
یعنی راه حل این مشکل باید شامل استفاده از یک ماکرو باشد. یک رویکرد در کد زیر نشان داده شده است. در این مثال، ماکرو فرض میکند که میخواهید همه چیز را در کاربرگ «بسط» کنید و دادههای کاربرگ از ردیف 1 شروع میشوند.
Sub CellSplitter()
Dim Temp As Variant
Dim CText As String
Dim J As Integer
Dim K As Integer
Dim L As Integer
Dim iColumn As Integer
Dim lNumCols As Long
Dim lNumRows As Long
iColumn = 4
Set wksSource = ActiveSheet
Set wksNew = Worksheets.Add
iTargetRow = 0
With wksSource
lNumCols = Cells(1,Columns.Count).End(xlToLeft).Column
lNumRows = Cells(Rows.Count,1).End(xlUp).Row
For J = 1 To lNumRows
CText = .Cells(J, iColumn).Value
Temp = Split(CText, Chr(10))
For K = 0 To UBound(Temp)
iTargetRow = iTargetRow + 1
For L = 1 to lNumCols
If L <> iColumn Then
wksNew.Cells(iTargetRow, L) _
= .Cells(J, L)
Else
wksNew.Cells(iTargetRow, L) _
= Temp(K)
End If
Next L
Next K
Next J
End With
End Sub
توجه داشته باشید که برای اجرای ماکرو، باید با استفاده از متغیر iColumn، ستونی را مشخص کنید که حاوی سلولهایی است که باید از هم جدا شوند. همانطور که در اینجا نوشته شده است، ماکرو اطلاعات را در ستون چهارم از هم جدا می کند. علاوه بر این، نسخههای تقسیمشده سلولها در یک کاربرگ جدید ذخیره میشوند تا کاربرگ اصلی به هیچ وجه تحت تأثیر قرار نگیرد.