|
- Sub 行列转换()
- Dim Rng As Range, R As Range, Rt As Range, N&, Arr, I&
- On Error Resume Next
- Set Rng = Application.InputBox("请选择源数据区:", "数据行转列 步骤 1/3", IIf(TypeName(Selection) = "Range", Selection.Address, ""), , , , , 8)
- If Rng Is Nothing Then Exit Sub
- N = Int(Application.InputBox("请输入转换后的列数:", "数据行转列 步骤 2/3", 1, , , , 1))
- If N <= 0 Then Exit Sub
- Set R = Application.InputBox("请选择目标数据区:", "数据行转列 步骤 3/3", IIf(TypeName(Selection) = "Range", Selection.Address, ""), , , , , 8)
- If R Is Nothing Then Exit Sub
- ReDim Arr(1 To IIf(Int(Rng.Cells.Count / N) = Rng.Cells.Count / N, Rng.Cells.Count / N, Int(Rng.Cells.Count / N) + 1), 1 To N)
- I = 1
- For Each Rt In Rng
- If Rt <> "" Then
- Debug.Print IIf(N > 1, (I - 1) \ N + 1, I), (I - 1) Mod N + 1
- Arr(IIf(N > 1, (I - 1) \ N + 1, I), (I - 1) Mod N + 1) = Rt.Value
- I = I + 1
- End If
- Next Rt
- R(1).Resize(UBound(Arr), N) = Arr
- End Sub
复制代码 |
评分
-
查看全部评分
|