我需要编写一个VBA循环,找到一个非空白单元格,然后选择该行中的特定单元格复制到另一张图纸

我需要编写一个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)。 然后

首先,我要说我对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列开始使用宏,如果您避免选择“我应该使用什么”会更好?还是我只是复制/粘贴?