اگر یک لیست داده را به اکسل وارد کنید، غیرعادی نیست که در پایان با داده های زیادی در ستون A به پایان برسانید. در واقع، غیرعادی نیست که در هیچ یک از ستون های دیگر چیزی نداشته باشید. (البته این همه به ماهیت دادههایی که وارد میکنید بستگی دارد.) به عنوان بخشی از کار با دادهها در اکسل، ممکن است بخواهید دادهها را سازماندهی مجدد کنید تا به ستونهای بیشتری از ستون A کشیده شوند. .
به عنوان مثال، تصور کنید که دادههای خود را وارد کردهاید، و در نهایت ردیفهای 1 تا 212 ستون A را اشغال کردهاید. آنچه واقعاً میخواهید این است که دادهها ستونهای A تا F را اشغال کنند، هر چند ردیف برای نگهداری دادهها لازم باشد. بنابراین، A2 باید به B1، A3 به C1، A4، به D1، A5 به E1، A6 به F1، و سپس A7 به A2، A8 به B2 و غیره منتقل شود.
برای سازماندهی مجدد داده ها به این روش، می توانید از ماکرو زیر استفاده کنید. داده هایی را که می خواهید سازماندهی مجدد کنید انتخاب کنید و سپس ماکرو را اجرا کنید. از شما پرسیده می شود که چند ستون در داده های سازماندهی مجدد شده می خواهید، و سپس جابجایی داده ها آغاز می شود.
Sub CompressData()
Dim rSource As Range
Dim rTarget As Range
Dim iWriteRow As Integer
Dim iWriteCol As Integer
Dim iColCount As Integer
Dim iTargetCols As Integer
Dim J As Integer
iTargetCols = Val(InputBox("How many columns?"))
If iTargetCols > 1 Then
Set rSource = ActiveSheet.Range(ActiveWindow.Selection.Address)
If rSource.Columns.Count > 1 Then Exit Sub
iWriteRow = rSource.Row + (rSource.Cells.Count / iTargetCols)
iWriteCol = rSource.Column + iTargetCols - 1
Set rTarget = Range(Cells(rSource.Row, rSource.Column), _
Cells(iWriteRow, iWriteCol))
For J = 1 To rSource.Cells.Count
rTarget.Cells(J) = rSource.Cells(J)
If J > (rSource.Cells.Count / iTargetCols) Then _
rSource.Cells(J).Clear
Next J
End If
End Sub
ماکرو اطلاعات را با تعریف دو محدوده انتقال می دهد: محدوده منبعی که هنگام اجرای ماکرو انتخاب کرده اید و محدوده هدف که با اندازه محاسبه شده بر اساس تعداد ستون های مورد نظر شما تعریف شده است. محدوده منبع با شی متغیر rSource و محدوده هدف با rTarget نمایش داده می شود. حلقه For ... Next برای انتقال واقعی مقادیر استفاده می شود.