|
本帖最后由 luchao124 于 2017-5-26 09:33 编辑
多列数据区域转换成一列
F1:J4是数据局域 转换的结果是A1:A20
Sub rangetoonecol()
Dim TheRng, TempArr
Dim i As Integer, j As Integer, elemCount As Integer
On Error GoTo line1
Range("a:a").ClearContents
If Selection.Cells.Count = 1 Then
Range("a1") = Selection
Else
TheRng = Selection
elemCount = UBound(TheRng, 1) * UBound(TheRng, 2)
ReDim TempArr(1 To elemCount, 1 To 1)
For i = 1 To UBound(TheRng, 1)
For j = 1 To UBound(TheRng, 2)
TempArr((i - 1) * UBound(TheRng, 2) + j, 1) = TheRng(i, j)
Next
Next
Range("a1:a" & elemCount) = TempArr
End If
line1:
End Sub
以上代码可以实现图中效果,但是它是必须先选择数据区域,然后执行代码后直接转换到A列
我现在的要求效果是,不用先选择数据区域 直接执行代码后,弹出提示框 选择需要转换的数据区域,然后再弹出提示框,选择存放区域起始单元格。
请大神实现代码 谢谢!
- Sub rangetoonecol()
- Dim TheRng, TempArr, rng As Range
- Dim i As Integer, j As Integer, elemCount As Integer
- On Error GoTo line1
- Range("a:a").ClearContents
- Set rng = Application.InputBox("", , , , , , , 8)
- If rng.Cells.Count = 1 Then
- Range("a1") = rng
- Else
- TheRng = rng
- elemCount = UBound(TheRng, 1) * UBound(TheRng, 2)
- ReDim TempArr(1 To elemCount, 1 To 1)
- For i = 1 To UBound(TheRng, 1)
- For j = 1 To UBound(TheRng, 2)
- TempArr((i - 1) * UBound(TheRng, 2) + j, 1) = TheRng(i, j)
- Next
- Next
- Range("a1:a" & elemCount) = TempArr
- End If
- line1:
- End Sub
复制代码
|
|