【问题标题】:Offset and end function偏移和结束功能
【发布时间】:2015-03-26 20:04:36
【问题描述】:

我正在尝试将数据从 Q3 Sheet 1 粘贴到 Q3 Sheet 2。每条数据都应粘贴到 Q3 Sheet 2 上最后一条数据下方的一行(从单元格 A4 开始)。不幸的是,这条线

Worksheets("Q3 Sheet 2").Range("A3").End(xlUp).Offset(1, 0) = .Offset(iRow, 0) 

不这样做。相反,它将所有数据粘贴到 A4 中,并且它们继续相互覆盖,因此当从 A4 一直到 A14 应该有多个条目时,A4 中只有一个条目。请帮忙。谢谢!

  With Worksheets("Q3 Sheet 1").Range("A3")
        'Count total number of entries
        nCustomers = Range(.Offset(1, 0), .Offset(1, 0).End(xlDown)).Rows.Count
        'Loop through all entries looking for amounts owed > 1000
        For iRow = 1 To nCustomers
            AmountOwed = .Offset(iRow, 1) - .Offset(iRow, 2)
            'If amount owed > 1000 then transfer customer ID and amount owing to Q3 Sheet 2
            If AmountOwed > 1000 Then
                Worksheets("Q3 Sheet 2").Range("A3").End(xlUp).Offset(1, 0) = .Offset(iRow, 0)

            End If
        Next iRow
    End With

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    只需要做两个小改动。

    Worksheets("Q3 Sheet 2").Range("A3").End(xlUp).Offset(1, 0) = .Offset(iRow, 0)
    

    应该阅读

    Worksheets("Q3 Sheet 2").Range("A2").End(xlDown).Offset(1, 0) = .Offset(iRow, 0)
    

    【讨论】:

    • 这只会将单个值粘贴到单元格 A3 中。它不会粘贴多个值。由于某种原因,这些值不会进入下一个单元格,而是在 A3 中相互覆盖。这段代码并没有给我一个错误。
    • 您是否已将 xlUp 更改为 xlDown?单元格 A1 和 A2 中也应该有数据以创建连续范围,以便 xlDown 正常工作。
    • 是的,我有。仍然只带来一个值。而不是多个。如果单元格 A1 和 A2 中没有数据怎么办?那我该如何处理呢?
    • 我将数据放在 A1 和 A2 中,它工作正常。但是,我不能在这些单元格中保存数据。如果那里没有数据,是否有解决方法?谢谢。
    • 我只需将虚拟数据添加到单元格 A1 和 A2 并将文本颜色更改为白色。
    【解决方案2】:

    我重写了代码以使用范围(而不是使用范围来获取行然后循环行号),为变量设置维度并关闭屏幕更新(为了速度),而且向上查找比向下查找更健壮找到最后一条记录时

    如果拥有的数量超过 1000,此版本会将 整行从 Q3 Sheet 1 复制到 Q3 Sheet 2。它可以削减到您想要的任何数量的单元格(我认为您可能想要两个单元格?)

    [pdate:进一步整理代码,添加了ws2 变量,删除了AmountOwned 和多余的nCustomers]

       Sub Update()
       Dim ws As Worksheet
        Dim ws2 As Worksheet
        Dim rng1 As Range
        Dim rng2 As Range
        Application.ScreenUpdating = False
        Set ws = Worksheets("Q3 Sheet 1")
        Set ws2 = Worksheets("Q3 Sheet 2")
        Set rng1 = ws.Range(ws.[a4], ws.Cells(Rows.Count, "A").End(xlUp))
        For Each rng2 In rng1
            'If amount owed > 1000 then transfer customer ID and amount owing to Q3 Sheet 2
            If rng2.Offset(0, 1) - rng2.Offset(0, 2) > 1000 Then rng2.EntireRow.Copy ws2.Cells(Rows.Count, "A").End(xlUp).Offset(1, 0)
        Next
        Application.ScreenUpdating = True        
        End Sub
    

    【讨论】:

      【解决方案3】:

      将此行改为

      Worksheets("Q3 Sheet 2").Range("A3").End(xlDown).Offset(1, 0) = .Offset(iRow, 0) 
      

      []的

      【讨论】:

      • 我之前做过这个,它给了我一个错误。应用程序定义或对象定义的错误。这是什么意思?谢谢。
      【解决方案4】:
      Worksheets("Q3 Sheet 2").cells(rows.count,1).End(xlUp).Offset(1, 0) = .Offset(iRow, 0)
      

      假设在 A 列的表格下方没有数据

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-02
        • 1970-01-01
        • 2016-06-08
        • 2020-08-25
        • 1970-01-01
        相关资源
        最近更新 更多