【问题标题】:Excel: how to paste to first blank cell?Excel:如何粘贴到第一个空白单元格?
【发布时间】:2013-11-15 03:27:53
【问题描述】:

我正在尝试将信息粘贴到工作表 A 列中的第一个空白单元格?我该怎么做?

这就是我所做的,但它粘贴了 1000 次信息。我需要改变什么?

提前致谢。

Range("B2:E2").Select                                        'Selet info to copy
Selection.Copy                                               'Copy
Sheets(Range("A2").Value).Select                             'Goto Sheet Listed in cell A2

Dim i                                                        'define i
    For i = 3 To 1000                                        'Set up loop size
        If Range("A" & CStr(i)).Value = "" Then              'If Cell Ai is blank
            Range("A" & i).Select
            ActiveSheet.Paste                                'Paste info
        End If
    Next i
    End If

【问题讨论】:

    标签: excel


    【解决方案1】:

    虽然使用 Exit For 修改循环会起作用,但还有一种更好的方法 - 可以通过以下方式找到列中的最后一个单元格

    Set lastCell = Range("A1").End(xlDown)
    set freeCell = lastCell.Offset(1,0)
    

    这假定A1 下至少有一个单元格。如果您知道(如在您的示例中)占用的行数永远不会超过 1000 行,则可以在另一个方向执行此操作:

    Function freeCell(r As Range) As Range
    ' returns first free cell below r
      Dim lc As Range     ' last used cell on sheet
      Set lc = r.Offset(1000, 0).End(xlUp).Offset(1, 0)
      Set freeCell = lc
    End Function
    
    Sub testIt()
      Dim p As Range
      Set p = freeCell(Range("A3"))
      MsgBox "the address of p is " & p.Address
    End Sub
    

    函数freeCell返回你要查找的单元格;子testIt 表明它可以工作(以及它是如何被调用的)。在您的情况下,您可以将代码大大简化为

    Sub doIt()
      Dim sh As Worksheet, tCell As Range
      Sheets("Sheet1").Range("B2:E2").Copy
      Set sh = Sheets(Range("A2").Value)
      Set tCell = freeCell(sh.Range("A3"))
      sh.Paste tCell
    End Sub
    

    注意 - 当你录制一个宏时,你会得到很多 ActivateSelect 等命令潜入。这些通常可以避免 - 并且在线(和本网站)有很多优秀的文章解释你为什么会想避开他们。上面的片段显示了如何在没有任何这些的情况下从一张纸复制到另一张纸。

    如果您不确定目标工作表上是否有任何内容(例如,第 2 行中没有标题行),您可以修改您的代码,使目标单元格永远不会高于第 3 行:

    If tCell.Row < 3 Then Set tCell = tCell.Offset(3 - tCell.Row)
    

    【讨论】:

    • 感谢您的详细回复。我仍然习惯于一般的 excel/编程,感谢您花时间解释一种更有效的方法。
    【解决方案2】:

    您的FOR LOOP 将从单元格A3 运行到A1000,并且对于每个空单元格,它将粘贴该值。您希望在条件匹配后立即退出循环。你想添加一个Exit For 条件。

    If Range("A" & CStr(i)).Value = "" Then
        Range("A" & i).Select
        ActiveSheet.Paste
        Exit For
    End If
    

    Source

    【讨论】:

      猜你喜欢
      • 2015-02-03
      • 2021-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多