Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.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
Excel 使用VBA在第一个块下面剪切并粘贴数据块_Excel_Vba - Fatal编程技术网

Excel 使用VBA在第一个块下面剪切并粘贴数据块

Excel 使用VBA在第一个块下面剪切并粘贴数据块,excel,vba,Excel,Vba,我一直在试图找到一个VBA代码,它将数据块复制到我的第一个块下。每个块由19列组成,后跟一个空格。每个块的行数可能不同 请参见下面我的屏幕截图: 因此,我希望所有数据在第一列A:S中保持连续。非常感谢您的帮助 我在网上找到了以下代码,但这只是将所有内容粘贴到第一列中 Sub Column() Dim iLastcol As Long Dim iLastRow As Long Dim jLastrow As Long Dim ColNdx As Long Dim ws As Worksheet

我一直在试图找到一个VBA代码,它将数据块复制到我的第一个块下。每个块由19列组成,后跟一个空格。每个块的行数可能不同

请参见下面我的屏幕截图:

因此,我希望所有数据在第一列
A:S
中保持连续。非常感谢您的帮助

我在网上找到了以下代码,但这只是将所有内容粘贴到第一列中

Sub Column()

Dim iLastcol As Long
Dim iLastRow As Long
Dim jLastrow As Long
Dim ColNdx As Long
Dim ws As Worksheet
Dim myRng As Range
Dim ExcludeBlanks As Boolean
Dim mycell As Range

ExcludeBlanks = (MsgBox("Exclude Blanks", vbYesNo) = vbYes)
Set ws = ActiveSheet
iLastcol = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column
On Error Resume Next

Application.DisplayAlerts = False
Worksheets("Alldata").Delete
Application.DisplayAlerts = True

Sheets.Add.Name = "Alldata"

For ColNdx = 1 To iLastcol

iLastRow = ws.Cells(ws.Rows.Count, ColNdx).End(xlUp).Row

Set myRng = ws.Range(ws.Cells(1, ColNdx), _
                   ws.Cells(iLastRow, ColNdx))

If ExcludeBlanks Then
  For Each mycell In myRng
     If mycell.Value <> "" Then
        jLastrow = Sheets("Alldata").Cells(Rows.Count, 1) _
                   .End(xlUp).Row
        mycell.Copy
        Sheets("Alldata").Cells(jLastrow + 1, 1) _
           .PasteSpecial xlPasteValues
      End If
    Next mycell
      Else
       myRng.Copy
          jLastrow = Sheets("Alldata").Cells(Rows.Count, 1) _
            .End(xlUp).Row
      mycell.Copy
      Sheets("Alldata").Cells(jLastrow + 1, 1) _
     .PasteSpecial xlPasteValues
    End If
   Next

   Sheets("Alldata").Rows("1:1").EntireRow.Delete

   ws.Activate
 End Sub
子列()
暗淡的伊拉司考一样长
暗淡的伊拉斯特罗一样长
昏暗的天空和长的一样
暗淡的ColNdx如长
将ws设置为工作表
暗myRng As范围
Dim exclude空格作为布尔值
暗淡的迈塞尔山脉
ExcludeBlanks=(MsgBox(“ExcludeBlanks”,vbYesNo)=vbYes)
设置ws=ActiveSheet
iLastcol=ws.Cells(1,ws.Columns.Count).End(xlToLeft.Column)
出错时继续下一步
Application.DisplayAlerts=False
工作表(“所有数据”)。删除
Application.DisplayAlerts=True
Sheets.Add.Name=“所有数据”
对于ColNdx=1到iLastcol
iLastRow=ws.Cells(ws.Rows.Count,ColNdx).End(xlUp).Row
设置myRng=ws.Range(ws.Cells(1,ColNdx)_
ws.Cells(iLastRow,ColNdx))
如果是空白的话
对于myRng中的每个迈塞尔
如果mycell.Value为“”,则
jLastrow=表格(“所有数据”).单元格(行数,1)_
.End(xlUp).Row
迈塞尔,收到
表格(“所有数据”).单元格(jLastrow+1,1)_
.Paste特殊XLPaste值
如果结束
下一个迈塞尔
其他的
收到
jLastrow=表格(“所有数据”).单元格(行数,1)_
.End(xlUp).Row
迈塞尔,收到
表格(“所有数据”).单元格(jLastrow+1,1)_
.Paste特殊XLPaste值
如果结束
下一个
工作表(“所有数据”)。行(“1:1”)。EntireRow.Delete
ws.Activate
端接头
基本方法:

Sub Tester()

    Dim c As Range, addr

    Set c = ActiveSheet.Range("T1")

    Do
        Set c = c.End(xlToRight)
        If c.Column = Columns.Count Then Exit Do
        addr = c.Address 'strire the address since Cut will move c
        c.CurrentRegion.Cut c.Parent.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
        Set c = ActiveSheet.Range(addr) '<< reset c
    Loop


 End Sub
子测试仪()
尺寸c作为范围,地址
设置c=ActiveSheet.Range(“T1”)
做
设置c=c.End(xlToRight)
如果c.Column=Columns.Count,则退出Do
addr=c。Address'是因为剪切将移动c而指定的地址
c、 CurrentRegion.Cut c.Parent.Cells(Rows.Count,1).End(xlUp).Offset(1,0)

Set c=ActiveSheet.Range(addr)“这比@TimWilliams更基本一些

With ThisWorkbook.Sheets("Alldata")

Dim lRow As Long, lCol As Long, cpyrng As Range

lCol = Cells(1, Columns.Count).End(xlToLeft).Column

    For i = 21 To lCol Step 20
        If .Cells(1, i).Value <> "" And .Cells(1, i).Offset(, -1).Value = "" Then

            lRow = .Cells(.Rows.Count, 1).End(xlUp).Row

            Set cpyrng = .Cells(1, i).CurrentRegion

            cpyrng.Cut
            Sheets("Sheet2").Cells(lRow, 1).Offset(2).Insert Shift:=xlDown
        End If
    Next i
End With
使用此工作簿.Sheets(“所有数据”)
变暗低为长,lCol为长,cpyrng为范围
lCol=单元格(1,Columns.Count).End(xlToLeft).Column
对于i=21至lCol步骤20
如果.Cells(1,i).Value“”和.Cells(1,i).Offset(,-1).Value=”“,则
lRow=.Cells(.Rows.Count,1).End(xlUp).Row
设置cpyrng=.Cells(1,i).CurrentRegion
cpyrng.Cut
图纸(“图纸2”)。单元格(lRow,1)。偏移量(2)。插入移位:=xlDown
如果结束
接下来我
以

因此,您知道每个数据块的起始单元格。我的意思是,所有数据块的列数都相同