Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 使用宏在excel的下一行获取列_Vba_Excel - Fatal编程技术网

Vba 使用宏在excel的下一行获取列

Vba 使用宏在excel的下一行获取列,vba,excel,Vba,Excel,正如标题所说,我需要将一列中的数据放到下一行。 经过大量的研究,我知道它可以用宏来完成,这就是我需要你帮助的地方 我需要做的示例: 我的意思是我有一个4列的excel文档 A B C D 1 Data1 Data2 Data3 Data4 2 Data5 Data6 Data7 Data8 我希望每个D列数据都像这样转到下一行 A B C 1 Data1 Data2 Data3

正如标题所说,我需要将一列中的数据放到下一行。 经过大量的研究,我知道它可以用宏来完成,这就是我需要你帮助的地方

我需要做的示例:

我的意思是我有一个4列的excel文档

   A      B       C        D
1  Data1   Data2  Data3   Data4
2  Data5   Data6  Data7   Data8
我希望每个D列数据都像这样转到下一行

   A      B       C       
1  Data1   Data2  Data3   
2  Data4   // First Data of D column on below line moved on line 2
3  Data5   Data6  Data7 
4  Data8  // Second Data of D column on below line moved on line 4.
所以我录制了一个宏,在“2”上添加一行,并在新的2上粘贴第一个D。代码如下:

Sub Data1()
'
' Data1 Macro
'
' 
'
    ActiveCell.Offset(1, 0).Range("A1:D1").Select
    Selection.EntireRow.Insert , CopyOrigin:=xlFormatFromLeftOrAbove
    ActiveCell.Offset(-1, 3).Range("A1").Select
    Selection.Cut
    ActiveCell.Offset(1, -3).Range("A1").Select
    ActiveSheet.Paste
End Sub
结果:

问题是有很多数据需要运行很多次,所以这里确实需要一个循环

尝试使用循环,但我需要你的帮助

这就是我的目标,但它现在不能正常工作

Dim x As Integer

Sub Data1()
'
' Data1 Macro
'
' 
'
    x = 1


    Do While x <= 20 ' that i will change as how many columns i have.
        ActiveCell.Offset(x, 0).Range("A1:D1").Select
        Selection.EntireRow.Insert , CopyOrigin:=xlFormatFromLeftOrAbove
        ActiveCell.Offset(x - 2, x + 2).Range("A1").Select
        Selection.Cut
        ActiveCell.Offset(x, x - 4).Range("A1").Select
        ActiveSheet.Paste

        x = x + 2 ' if it starts from cell no1 and we have a blank to fill with Data4 or Data8 of D row then we need x+2 i believe and not x+1.
    Loop
End Sub
Dim x作为整数
子数据1()
'
'数据1宏
'
' 
'
x=1

执行While x执行此操作的最佳方法是通过D中的所有数据进行简单循环,尽管循环运行时添加行会使循环参数变得复杂。这可以通过使用do while循环并将check条件与计数器一起递增来解决

Sub ConvertColDtoRow()
'Note that this code is written specifically for column D, but it can be adjusted as needed by changing the column specified

Dim Count As Long, LastRow As Long
Count = 1
LastRow = ActiveSheet.UsedRange.Rows.Count
Do While Count <= LastRow
    If Not IsEmpty(ActiveSheet.Cells(Count,4)) Then
        Range(Cells(Count,4).Address).Offset(1,0).EntireRow.Insert
        Cells(Count + 1,1).Value = Cells(Count,4).Value
        Cells(Count,4).Value = ""
        Count = Count + 2
        LastRow = LastRow + 1
    Else
        Count = Count + 1
    End If
Loop

End Sub
子转换器Coldtorow()
'请注意,此代码是专门为D列编写的,但可以根据需要通过更改指定的列进行调整
按长度计算,最后一行按长度计算
计数=1
LastRow=ActiveSheet.UsedRange.Rows.Count

你能解释得更清楚些吗?输出是什么?第一个录制的宏我得到了这个。使用第二个并在数组中添加更多数据,我得到了这个结果。在此基础上,您应该编辑您的问题,将这些图片添加到评论中,而不是将它们保留在评论中,因为我并没有代表,但还行。非常感谢@RGA。您在这里为我节省了很多时间。如果您可以编辑Count