Vba 如何在第一个空单元格中复制和粘贴,并在完成时结束

Vba 如何在第一个空单元格中复制和粘贴,并在完成时结束,vba,Vba,我有一个产品的电子表格,特别是字体和背景。我正在尝试创建一个宏,以便在执行查找功能(CLTR-F)时,可以单击宏按钮复制我的选择,并将其粘贴到第N行的第一个可用单元格中,从第二行(“N2”)开始,到第12行(“N12”)结束 我在N中有更多的数据,例如在N13和N14中,所以我不能简单地计算占用的行数并添加一行。我想让这段代码正常工作,这样一旦第一个单元格被粘贴到其中,这个过程就会退出。目前,我的代码只是将所选单元格粘贴到N2和N3中。目标是,一旦粘贴了值,过程就结束了。但如果未粘贴该值,则该值

我有一个产品的电子表格,特别是字体和背景。我正在尝试创建一个宏,以便在执行查找功能(CLTR-F)时,可以单击宏按钮复制我的选择,并将其粘贴到第N行的第一个可用单元格中,从第二行(“N2”)开始,到第12行(“N12”)结束

我在N中有更多的数据,例如在N13和N14中,所以我不能简单地计算占用的行数并添加一行。我想让这段代码正常工作,这样一旦第一个单元格被粘贴到其中,这个过程就会退出。目前,我的代码只是将所选单元格粘贴到N2和N3中。目标是,一旦粘贴了值,过程就结束了。但如果未粘贴该值,则该值将转到下一个可用单元格并粘贴,如果单元格被占用,则该值将结束,依此类推,直到粘贴到第一个空单元格。下面是我得到的,到目前为止,它粘贴到N2和N3中(如果N2没有被占用)


非常感谢您的收听。我已经查看了相关的线程,还没有找到足够的答案,如果这个答案已经公开存在,我很抱歉。

我创建了变量,并将它们添加到最终变量中以确定范围

子副本()
'复制所选内容
选择,复制
'创建变量
作为整数的Dim intN2
作为整数的Dim intN3
作为整数的Dim intN4
作为整数的Dim intN5
作为整数的Dim intN6
作为整数的Dim intN7
整数形式的Dim intN8
整数形式的Dim intN9
作为整数的Dim intN10
作为整数的Dim intN11
作为整数的Dim intN12
将finalint设置为整数
'创建If-Then语句以增加finalint
'对于N2
如果IsEmpty(范围(“N2”))=真,则
intN2=0
ElseIf IsEmpty(范围(“N2”))=则为False
intN2=1
如果结束
'对于N3
如果IsEmpty(范围(“N3”))=真,则
intN3=0
ElseIf IsEmpty(范围(“N3”))=则为False
intN3=1
如果结束
'对于N4
如果IsEmpty(范围(“N4”))=真,则
intN4=0
ElseIf IsEmpty(范围(“N4”))=则为False
intN4=1
如果结束
'对于N5
如果IsEmpty(范围(“N5”))=真,则
intN5=0
ElseIf IsEmpty(范围(“N5”))=则为False
intN5=1
如果结束
'对于N6
如果IsEmpty(范围(“N6”))=真,则
intN6=0
ElseIf IsEmpty(范围(“N6”))=则为False
intN6=1
如果结束
'对于N7
如果IsEmpty(范围(“N7”))=真,则
intN7=0
ElseIf IsEmpty(范围(“N7”))=则为False
intN7=1
如果结束
'对于N8
如果IsEmpty(范围(“N8”))=真,则
intN8=0
ElseIf IsEmpty(范围(“N8”))=则为False
intN8=1
如果结束
'对于N9
如果IsEmpty(范围(“N9”))=真,则
intN9=0
ElseIf IsEmpty(范围(“N9”))=则为False
intN9=1
如果结束
'对于N10
如果IsEmpty(范围(“N10”))=真,则
intN10=0
ElseIf IsEmpty(范围(“N10”))=则为False
intN10=1
如果结束
'对于N11
如果IsEmpty(范围(“N11”))=真,则
intN11=0
ElseIf IsEmpty(范围(“N11”))=则为False
intN11=1
如果结束
'对于N12
如果IsEmpty(范围(“N12”))=真,则
intN12=0
ElseIf IsEmpty(范围(“N12”))=则为False
intN12=1
如果结束
'使finalint成为所有其他整数的总和
finalint=intN2+intN3+intN4+intN5+intN6+intN7+intN8+intN9+intN10+intN11+intN12
'根据最终林量进行放置选择
如果finalint=0,则
选择。复制范围(“N2”)
ElseIf finalint=1,则
选择。复制范围(“N3”)
ElseIf finalint=2,则
选择。复制范围(“N4”)
ElseIf finalint=3,则
选择。复制范围(“N5”)
ElseIf finalint=4,则
选择。复制范围(“N6”)
ElseIf finalint=5,则
选择。复制范围(“N7”)
ElseIf finalint=6,则
选择。复制范围(“N8”)
ElseIf finalint=7,则
选择。复制范围(“N9”)
ElseIf finalint=8,则
选择。复制范围(“N10”)
ElseIf finalint=9,则
选择。复制范围(“N11”)
ElseIf finalint=10,则
选择。复制范围(“N12”)
如果结束
端接头

大多数情况下,只需使用vba函数
Range(“N2”).End(XLDown)
将光标向下移动到第一个空单元格。您的方法无效。我找到了方法。在阅读了你的代码后,我对你的问题有了更好的理解。但是,
End
函数适合移动到列或行中的第一个空单元格。如果有多个列,则必须检查每一列,这很清楚。我很高兴,你找到了答案。出于某种原因,当我使用你的代码时,我的工作表一直跳转到“N15”,当我使用“N2”中的End(XLdown)函数时,即使列完全为空,没有格式,单元格对IsEmpty函数回答“是”。我不太清楚为什么。我相信在大多数情况下,终端功能都会工作,我感谢您的帮助。
Sub CopyPasteFirstEmptyCell()

'Copy the selection

Selection.Copy

'Test for N2

If IsEmpty(Range("N2")) = True Then
Selection.Copy Range("N2")


End If

'Test for N3

If IsEmpty(Range("N2")) = True Then
Selection.Copy Range("N3")

'Test For N4-N12 etc. etc. 

End Sub