If you import a data list into Excel, it is not unusual to end up with a lot of data in column A. In fact, it is not unusual to have nothing in any of the other columns. (This all depends on the nature of the data you are importing, of course.) As part of working with the data in Excel, you may want to "reorganize" the data so that it is pulled up into more columns than just column A.
As an example, imagine that you imported your data, and it ended up occupying rows 1 through 212 of column A. What you really want is for the data to occupy columns A through F, of however many rows are necessary to hold the data. Thus, A2 needs to be moved to B1, A3 to C1, A4, to D1, A5 to E1, A6 to F1, and then A7 to A2, A8 to B2, etc.
To reorganize data in this manner, you can use the following macro. Select the data you want to reorganize, and then run the macro. You are asked how many columns you want in the reorganized data, and then the data shifting begins.
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
The macro transfers information by defining two ranges: the source range you selected when you ran the macro and the target range defined by the calculated size based on the number of columns you want. The source range is represented by the rSource variable object, and the target range by rTarget. The For ... Next loop is used to actually transfer the values.
Note:
ExcelTips is your source for cost-effective Microsoft Excel training. This tip (8188) applies to Microsoft Excel 2007, 2010, and 2013. You can find a version of this tip for the older menu interface of Excel here: Reorganizing Data.
Solve Real Business Problems Master business modeling and analysis techniques with Excel and transform data into bottom-line results. This hands-on, scenario-focused guide shows you how to use the latest Excel tools to integrate data from multiple tables. Check out Microsoft Excel 2013 Data Analysis and Business Modeling today!
When reading information from a text file, your macro may need to start reading at a place other than the beginning of ...
Discover MoreIf you need to find out how many columns are set to be a specific width, you'll need a macro to help determine the info. ...
Discover MoreIf you've got a list of potential words, and you want to know which of those potential words are real, you'll appreciate ...
Discover MoreFREE SERVICE: Get tips like this every week in ExcelTips, a free productivity newsletter. Enter your address and click "Subscribe."
2016-04-06 11:22:18
Michael (Micky) Avidan
@To whom it may concern.
The same task can be achieved with a simple formula - as shown in the linked picture:
http://s14.postimg.org/jq7n3p6fl/NONAME.png
--------------------------
Michael (Micky) Avidan
“Microsoft® Answers" - Wiki author & Forums Moderator
“Microsoft®” MVP – Excel (2009-2016)
ISRAEL
2016-04-05 09:22:39
BananaTricky
This "worked" on a PowerPoint table copied from a PDF in that it sorted it into the requisite number of columns but it didn't take account of some columns having more than one entry in the original with the result that the results got skewed.
When I tried it on a more normal table of figures it crashed excel, getting stuck in a loop asking me how many columns I wanted.
2016-04-04 07:45:59
julie
I have tested this code and cannot get it to work for me - all it does is delete the info from the first cell of the column containing data.
2014-01-16 07:25:28
Jean-Baptiste Richard
Thanks for this hint. In addition, the "indirect()" function enables to do this without a macro by populating a table by "=indirect("A" & <whatever you need for calculating the number of the original line corresponding to your target cell>)". Then, if necessary, one can copy the values for getting rid of the initial column data.
2013-07-22 08:20:44
Bryan
It's a little confusing what's going on here and why you'd ever need to organize data in this way. A picture is worth 1000 words, and a concrete example is worth at least a couple hundred.
Got a version of Excel that uses the ribbon interface (Excel 2007 or later)? This site is for you! If you use an earlier version of Excel, visit our ExcelTips site focusing on the menu interface.
FREE SERVICE: Get tips like this every week in ExcelTips, a free productivity newsletter. Enter your address and click "Subscribe."
Copyright © 2021 Sharon Parq Associates, Inc.
Comments