Excel 使用VBA在第一个块下面剪切并粘贴数据块
我一直在试图找到一个VBA代码,它将数据块复制到我的第一个块下。每个块由19列组成,后跟一个空格。每个块的行数可能不同 请参见下面我的屏幕截图: 因此,我希望所有数据在第一列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
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
如果结束
接下来我
以
因此,您知道每个数据块的起始单元格。我的意思是,所有数据块的列数都相同