Excel:如何粘贴到第一个空白单元格?

时间:2013-11-04 13:42:16

标签: excel

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

这就是我所做的,但它将信息粘贴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

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:0)

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

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

Source