我需要编写一个VBA循环,找到一个非空白单元格,然后选择该行中的特定单元格复制到另一张图纸
首先,我要说我对Excel中的VBA非常陌生,并且是自学成才的。 我有一个电子表格,可以在上面记录训练时间。我试图编写一个代码,在“a”、“B”或“a&B”三列中查找非空白单元格。一旦代码找到了非空白列,我希望它选择一个特定的范围(例如,A1:C1&D1&F1:J1),但在非空白单元格的行上,它需要将这些值复制到表a、表B或表a和表B,根据哪一列有值。我希望它粘贴到这些工作表上的下一个非空白行(在清除工作表之后,这样我就不会得到重复的内容),粘贴范围为A1:F1(抱歉,这些范围是atm)。 然后我需要这段代码循环遍历第一页中不是完全空白的每一行 我尝试了各种方法,并设法让其中的一些小元素单独工作,但我很难让循环工作到列中的下一个非空白单元格,以及如何告诉它根据找到值的列(小时数)选择不同的范围 到目前为止,我已经尝试:我需要编写一个VBA循环,找到一个非空白单元格,然后选择该行中的特定单元格复制到另一张图纸,vba,copy,paste,Vba,Copy,Paste,首先,我要说我对Excel中的VBA非常陌生,并且是自学成才的。 我有一个电子表格,可以在上面记录训练时间。我试图编写一个代码,在“a”、“B”或“a&B”三列中查找非空白单元格。一旦代码找到了非空白列,我希望它选择一个特定的范围(例如,A1:C1&D1&F1:J1),但在非空白单元格的行上,它需要将这些值复制到表a、表B或表a和表B,根据哪一列有值。我希望它粘贴到这些工作表上的下一个非空白行(在清除工作表之后,这样我就不会得到重复的内容),粘贴范围为A1:F1(抱歉,这些范围是atm)。 然后
'Sub Macro1()
'' Dim r1, r2, r3, myMultipleRange As Range
'' Set r1 = Sheets("Record").Range(ActiveCell.Offset(0, -3), ActiveCell.Offset(0, -2))
'' Set r2 = Sheets("Record").Range(ActiveCell.Offset(0, 0))
'' Set r3 = Sheets("Record").Range(ActiveCell.Offset(0, 2), ActiveCell.Offset(0, 5))
'' Set myMultipleRange = Union(r1, r2, r3)
' Sheets("Record").Select
' Range("D4:D6").Select
' Selection.End(xlDown).Select
' Range(ActiveCell.Offset(0, 2), ActiveCell.Offset(0, 5)).Select
'' myMultipleRange.Select
'End Sub
Sub Macro1()
Dim r1, r2, r3, myMultipleRange As Range
Set r1 = Sheets("Record").Range("A4:b4")
Set r2 = Sheets("Record").Range("D4")
Set r3 = Sheets("Record").Range("F4:I4")
Set myMultipleRange = Union(r1, r2, r3)
myMultipleRange.Select
End Sub
我希望将第一张表拆分为相关的其他表,以便提取总计以及该行上的所有其他信息
这是输入选项卡“记录”
这是两个输出选项卡“CPD”中的一个(另一个是“非在职培训”)
编辑:我现在对此有了进一步的了解。我不是试图一次选择整个范围,而是试图分别复制每个部分。如果我发表评论,我不确定我将如何能够循环这个来运行所有的行和三列,这些都是变量,有什么想法吗
Sub Macro1()
Sheets("CPD").Select
Range("H7:N1449").Select
Selection.ClearContents
Sheets("Record").Select
Range("D4:D6").Select
Selection.End(xlDown).Select
Range(ActiveCell.Offset(0, -3), ActiveCell.Offset(0, -2)).Select
Selection.Copy
Sheets("CPD").Select
Range("H3:K3").Select
Selection.End(xlDown).Offset(1, 0).Select
Range(ActiveCell.Offset(0, 0), ActiveCell.Offset(0, 1)).Select
ActiveSheet.Paste
Sheets("Record").Select
Range("D4:D6").Select
Selection.End(xlDown).Select
Selection.Copy
Sheets("CPD").Select
Range("H3:K3").Select
Selection.End(xlDown).Offset(1, 2).Select
ActiveSheet.Paste
Sheets("Record").Select
Range("D4:D6").Select
Selection.End(xlDown).Select
Range(ActiveCell.Offset(0, 2), ActiveCell.Offset(0, 5)).Select
Selection.Copy
Sheets("CPD").Select
Range("H3:K3").Select
Selection.End(xlDown).Offset(1, 3).Select
ActiveSheet.Paste
End Sub
好吧,经过一点尝试和错误,我想我已经设法想出了一个可行的解决方案。尽管如此,请随时检查我的代码
Sub Calculate()
Dim x As Long
Sheets("CPD").Select
Range("H7:N1449").Select
Selection.ClearContents
Sheets("Off the job training").Select
Range("H7:N1449").Select
Selection.ClearContents
For x = 1 To 50
Sheets("Record").Select
Range("C7").Offset(x - 1, 0).Select
If IsEmpty(ActiveCell) Then
Range("D7").Offset(x - 1, 0).Select
If IsEmpty(ActiveCell) Then
Range("E7").Offset(x - 1, 0).Select
If IsEmpty(ActiveCell) Then
Exit For
Else
Range(ActiveCell.Offset(0, -4), ActiveCell.Offset(0, -3)).Select
Selection.Copy
Sheets("CPD").Select
Range("H500").Select
Selection.End(xlUp).Offset(1, 0).Select
ActiveSheet.Paste
Sheets("Off the job training").Select
Range("H500").Select
Selection.End(xlUp).Offset(1, 0).Select
ActiveSheet.Paste
Sheets("Record").Select
Range("E7").Offset(x - 1, 0).Select
Selection.Copy
Sheets("CPD").Select
Range("H500").Select
Selection.End(xlUp).Offset(0, 2).Select
ActiveSheet.Paste
Sheets("Off the job training").Select
Range("H500").Select
Selection.End(xlUp).Offset(0, 2).Select
ActiveSheet.Paste
Sheets("Record").Select
Range("E7").Offset(x - 1, 0).Select
Range(ActiveCell(1, 2), ActiveCell(1, 5)).Select
Selection.Copy
Sheets("CPD").Select
Range("H500").Select
Selection.End(xlUp).Offset(0, 3).Select
ActiveSheet.Paste
Sheets("Off the job training").Select
Range("H500").Select
Selection.End(xlUp).Offset(0, 3).Select
ActiveSheet.Paste
End If
Else
Range(ActiveCell.Offset(0, -3), ActiveCell.Offset(0, -2)).Select
Selection.Copy
Sheets("Off the job training").Select
Range("H500").Select
Selection.End(xlUp).Offset(1, 0).Select
ActiveSheet.Paste
Sheets("Record").Select
Range("D7").Offset(x - 1, 0).Select
Selection.Copy
Sheets("Off the job training").Select
Range("H500").Select
Selection.End(xlUp).Offset(0, 2).Select
ActiveSheet.Paste
Sheets("Record").Select
Range("D7").Offset(x - 1, 0).Select
Range(ActiveCell.Offset(0, 2), ActiveCell.Offset(0, 5)).Select
Selection.Copy
Sheets("Off the job training").Select
Range("H500").Select
Selection.End(xlUp).Offset(0, 3).Select
ActiveSheet.Paste
End If
Else
Range(ActiveCell.Offset(0, -2), ActiveCell.Offset(0, -1)).Select
Selection.Copy
Sheets("CPD").Select
Range("H500").Select
Selection.End(xlUp).Offset(1, 0).Select
ActiveSheet.Paste
Sheets("Record").Select
Range("C7").Offset(x - 1, 0).Select
Selection.Copy
Sheets("CPD").Select
Range("H500").Select
Selection.End(xlUp).Offset(0, 2).Select
ActiveSheet.Paste
Sheets("Record").Select
Range("C7").Offset(x - 1, 0).Select
Range(ActiveCell.Offset(0, 3), ActiveCell.Offset(0, 6)).Select
Selection.Copy
Sheets("CPD").Select
Range("H500").Select
Selection.End(xlUp).Offset(0, 3).Select
ActiveSheet.Paste
End If
Next x
End Sub
欢迎来到SO,你能补充一下你尝试过的吗?到目前为止,这是我所能做到的。第一个不起作用,所以我开始尝试第二个。我想先解决选择问题,然后是复制粘贴,最后是3列的循环扫描你也请添加一个excel文件的屏幕截图和例外输出的屏幕截图,这样我可以可视化你对输出选项卡范围的要求从H列开始,纯粹是因为我目前让它通过公式手动执行,但使用这种方法速度非常慢。我宁愿让它从A列开始使用宏,如果您避免选择“我应该使用什么”会更好?还是我只是复制/粘贴?