Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.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,我有一些从其他地方输入的数据。如你所见,这张表主要是通过将数据从F和G向上移动一行来解决的,问题出现在我需要的第10行到第13行,这将是在数据向上移动之后,一个将是10到12。我需要让它在9到单元格A到D的数据向下复制到F行的末尾。然后继续向下,如果任何其他行有相同的“问题”,则执行相同的操作 我希望我是清楚的,如果没有请问,但有人可以帮我吗?我曾考虑过使用“直到最后一次复制”的概念,但我可以看出它不起作用,因为并非所有细胞都需要它。。。它只需要在机会出现时发生 附上了一个链接,希望能澄清这个问

我有一些从其他地方输入的数据。如你所见,这张表主要是通过将数据从F和G向上移动一行来解决的,问题出现在我需要的第10行到第13行,这将是在数据向上移动之后,一个将是10到12。我需要让它在9到单元格A到D的数据向下复制到F行的末尾。然后继续向下,如果任何其他行有相同的“问题”,则执行相同的操作

我希望我是清楚的,如果没有请问,但有人可以帮我吗?我曾考虑过使用“直到最后一次复制”的概念,但我可以看出它不起作用,因为并非所有细胞都需要它。。。它只需要在机会出现时发生

附上了一个链接,希望能澄清这个问题


我刚刚用您提供的数据测试了这段代码。根据工作表中的数据,应良好。当然,如果数据范围发生变化,可能需要稍微调整

Sub clean_data()

Dim wks As Worksheet
Dim cel As Range

Set wks = ThisWorkbook.Sheets("Imported Data")

With wks

    'first bring columns F:G up to match their line
    For Each cel In Intersect(.UsedRange, .UsedRange.Offset(1), .Columns(6))

        If cel = vbNullString And cel.Offset(, -2) <> vbNullString Then
            .Range(cel.Offset(1), cel.Offset(1, 1)).Copy cel
            cel.Offset(1).EntireRow.Delete
        End If

    Next

    'now fil columns A:D to match PO Date and PO#
    For Each cel In Intersect(.UsedRange, .UsedRange.Offset(1), .Columns(1))

        If cel = vbNullString And cel.Offset(, 5) <> vbNullString Then
            .Range(cel.Offset(-1), cel.Offset(-1, 3)).Copy cel
        End If

    Next

End With

End Sub
Sub-clean_data()
将工作作为工作表
暗淡的cel As范围
Set wks=ThisWorkbook.Sheets(“导入的数据”)
有工作
'首先使F:G列与它们的行匹配
对于相交中的每个单元格(.UsedRange、.UsedRange.Offset(1),.Columns(6))
如果cel=vbNullString和cel.Offset(,-2)vbNullString,则
.范围(单元格偏移量(1),单元格偏移量(1,1))。复制单元格
单元偏移量(1).EntireRow.Delete
如果结束
下一个
'现在填写A:D列以匹配采购订单日期和采购订单#
对于相交中的每个单元格(.UsedRange、.UsedRange.Offset(1)、.Columns(1))
如果cel=vbNullString和cel.Offset(,5)vbNullString,则
.范围(单元格偏移(-1),单元格偏移(-1,3))。复制单元格
如果结束
下一个
以
端接头

我想这会满足您的要求:

Sub CleanUpImport()
    Dim LastCleanUpRow as Long
    Dim FirstSORow as Long
    Dim LastSORow
    Dim TitleRow As Long
    Dim ws As Worksheet

    Set ws = ThisWorkbook.Sheets(ActiveSheet.Name)
    LastCleanUpRow = ws.Range("F" & ws.Rows.Count).End(xlUp).Row
    TitleRow = 1
    If Range("A1").Value = "" Then
        TitleRow = Range("A1").End(xlDown).Row
    End If

    ' Delete cells to line up columns F and G
    If Range("F3").Value = "" And Range("G3").Value = "" Then
        Range("F3:G3").Delete Shift:=xlUp
    End If

    ' Set rows for first SO
    LastSORow = LastCleanUpRow
    FirstSORow = LastSORow
    If Range("F" & LastSORow).Offset(-1).Value <> "" Then
        FirstSORow = Range("F" & LastCleanUpRow).End(xlUp).Row
    End If

    ' Copy SO header to any SOs that have multiple POs
    Do Until FirstSORow = TitleRow

        Range("A" & FirstSORow & ":D" & FirstSORow).Copy Range("A" & FirstSORow & ":D" & LastSORow)
        LastSORow = Range("F" & FirstSORow).End(xlUp).Row
        FirstSORow = LastSORow
        If Range("F" & LastSORow).Offset(-1).Value <> "" Then
            FirstSORow = Range("F" & LastSORow).End(xlUp).Row
            If FirstSORow = TitleRow Then FirstSORow = FirstSORow + 1
        End If
    Loop

End Sub
子清理导入()
阴暗的,一拖再拖的
第一次变暗或变长
昏暗的拉斯索罗
暗淡的标题和长的一样
将ws设置为工作表
Set ws=ThisWorkbook.Sheets(ActiveSheet.Name)
lastcleanupw=ws.Range(“F”&ws.Rows.Count).End(xlUp).Row
TitleRow=1
如果范围(“A1”).Value=“”,则
标题箭头=范围(“A1”)。结束(xlDown)。行
如果结束
'删除单元格以对齐F列和G列
如果范围(“F3”).Value=”“和范围(“G3”).Value=“”,则
范围(“F3:G3”)。删除移位:=xlUp
如果结束
'为第一个SO设置行
LastSORow=lastscleanuprow
FirstSORow=LastSORow
如果范围为(“F”&LastSORow).Offset(-1).Value“,则
FirstSORow=范围(“F”和LastCleanUpRow).End(xlUp).Row
如果结束
'将SO标题复制到具有多个PO的任何SOs
直到第一个箭头=标题箭头
范围(“A”&FirstSORow&“:D”&FirstSORow)。复制范围(“A”&FirstSORow&“:D”&LastSORow)
LastSORow=范围(“F”和FirstSORow).End(xlUp).Row
FirstSORow=LastSORow
如果范围为(“F”&LastSORow).Offset(-1).Value“,则
FirstSORow=范围(“F”和LastSORow).End(xlUp).Row
如果FirstSORow=TitleRow,则FirstSORow=FirstSORow+1
如果结束
环
端接头

它们工作得很好,非常感谢,你做的比我预想的要多。我喜欢这段代码的简单性。代码的简单性很好。随着你在编码方面的成长,你将学会如何编写简单的代码,捕捉到许多常见的错误。我100%同意,我只是希望更多的人遵循这种思维过程。俗话说,“不能传输你没有的东西”