2013-11-04 104 views
0

我正在尝试将信息粘贴到表格的第一个空白单元格中?我怎样才能做到这一点?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 

回答

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

+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

感谢您的详细回复。我仍然习惯于一般的excel /编程,并且非常感谢您花时间解释一种更高效的方法。 –

相关问题