Here are two subsets. The one that contains the columns - the one that stacks the rows - the input is your choice. Try them out and look at the differences:
Sub MakeOneColumnStackColumns() Dim vaCells As Variant Dim vOutput() As Variant Dim i As Long, j As Long Dim lRow As Long If TypeName(Selection) = "Range" Then If Selection.Count > 1 Then If Selection.Count <= Selection.Parent.Rows.Count Then vaCells = Selection.Value ReDim vOutput(1 To UBound(vaCells, 1) * UBound(vaCells, 2), 1 To 1) For j = LBound(vaCells, 2) To UBound(vaCells, 2) For i = LBound(vaCells, 1) To UBound(vaCells, 1) If Len(vaCells(i, j)) > 0 Then lRow = lRow + 1 vOutput(lRow, 1) = vaCells(i, j) End If Next i Next j Selection.ClearContents Selection.Cells(1).Resize(lRow).Value = vOutput End If End If End If End Sub
Here is another one:
Sub MakeOneColumnStackRows() Dim vaCells As Variant Dim vOutput() As Variant Dim i As Long, j As Long Dim lRow As Long If TypeName(Selection) = "Range" Then If Selection.Count > 1 Then If Selection.Count <= Selection.Parent.Rows.Count Then vaCells = Selection.Value ReDim vOutput(1 To UBound(vaCells, 1) * UBound(vaCells, 2), 1 To 1) For j = LBound(vaCells, 1) To UBound(vaCells, 1) For i = LBound(vaCells, 2) To UBound(vaCells, 2) If Len(vaCells(j, i)) > 0 Then lRow = lRow + 1 vOutput(lRow, 1) = vaCells(j, i) End If Next i Next j Selection.ClearContents Selection.Cells(1).Resize(lRow).Value = vOutput End If End If End If End Sub
Good luck.
And only FYI, this is how you want to change the original macro:
Sub Data_to_Column() Dim rData As Range Dim r As Range, c As Range Dim rStart As Range Dim counter As Integer Set rData = Selection On Error Resume Next Application.DisplayAlerts = False Set rStart = Application.InputBox( _ Prompt:="Select the 1st cell you want to copy the data to.", _ Title:="Select Output Location", _ Type:=8) On Error GoTo 0 Application.DisplayAlerts = True If rStart Is Nothing Then Exit Sub For Each r In rData.Rows For Each c In rData.Columns If Not IsEmpty(Cells(r.Row, c.Column)) Then rStart.Offset(counter, 0) = Cells(r.Row, c.Column) counter = counter + 1 End If Next c: Next r End Sub