Sub MoveRangeToColumn()
''moves a block of cells into a single column
Dim srcRange As Range
Dim dstRange As Range
Dim ic As Integer
Dim ir As Integer
Dim cel As Range
Dim numCells As Integer
Dim ws As Worksheet
Dim numRows As Integer
Dim numCols As Integer
Dim newColumn As Range
Dim newColCount As Integer
On Error Resume Next
''have the user select the range of cells to be stacked
Set srcRange = Application.InputBox(Title:="Source Range", Prompt:="Select the source range to stack. Do not include headers.", Type:=8)
On Error GoTo 0
'Test for cancel.
If srcRange Is Nothing Then Exit Sub
'Test for single-cell selection.
'Remove comment character if single-cell selection is okay.
If srcRange.Rows.Count = 1 Then
MsgBox "You’ve selected only one cell." & "Please select multiple contiguous cells.", vbOKOnly
Exit Sub
End If
MsgBox srcRange.Address
''have the user select the first cell of the destination range
Set dstRange = Application.InputBox(Title:="Source Range", Prompt:="Please select the first cell of the destination column. Select one cell only.", Type:=8)
On Error GoTo 0
'Test for cancel.
If dstRange Is Nothing Then Exit Sub
''test if the user has selected more than one cel
If dstRange.Rows.Count > 1 Then
MsgBox "You’ve selected more than one cell." & "Please select only one cells", vbOKOnly
Exit Sub
End If
MsgBox dstRange.Address
''Set srcRange = ActiveSheet.Range("E4:J12")
''Set dstRange = ActiveSheet.Range("N4")
numCells = srcRange.Cells.Count
numRows = srcRange.Rows.Count
numCols = srcRange.Columns.Count
newColCount = 1
''MsgBox numCells & "," & numRows & "," & numCols
''Debug.Print srcRange.Item(1, 1).Address
For ic = 1 To numCols
For ir = 1 To numRows
dstRange(newColCount, 1).Value = srcRange.Cells(ir, ic).Value
Debug.Print dstRange(newColCount, 1).Value
newColCount = newColCount + 1
Next ir
Next ic
End Sub
Comments
0 B
|👍
/👎
0 B
|👍
/👎