首页 > 解决方案 > 如何在第一个空单元格中复制和粘贴并在完成时结束

问题描述

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

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

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

非常感谢您的聆听。我查看了相关主题,但尚未找到足够的答案,如果该答案已经公开存在,我深表歉意。

标签: vba

解决方案


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

Sub Copy()

'Copy the selection
Selection.Copy

'Create variables
Dim intN2 As Integer
Dim intN3 As Integer
Dim intN4 As Integer
Dim intN5 As Integer
Dim intN6 As Integer
Dim intN7 As Integer
Dim intN8 As Integer
Dim intN9 As Integer
Dim intN10 As Integer
Dim intN11 As Integer
Dim intN12 As Integer
Dim finalint As Integer

'Create If Then statements to increaes finalint
'For N2
If IsEmpty(Range("N2")) = True Then
    intN2 = 0
ElseIf IsEmpty(Range("N2")) = False Then
    intN2 = 1
End If

'For N3
If IsEmpty(Range("N3")) = True Then
    intN3 = 0
ElseIf IsEmpty(Range("N3")) = False Then
    intN3 = 1
End If

'For N4
If IsEmpty(Range("N4")) = True Then
    intN4 = 0
ElseIf IsEmpty(Range("N4")) = False Then
    intN4 = 1
End If

'For N5
If IsEmpty(Range("N5")) = True Then
    intN5 = 0
ElseIf IsEmpty(Range("N5")) = False Then
    intN5 = 1
End If

'For N6
If IsEmpty(Range("N6")) = True Then
    intN6 = 0
ElseIf IsEmpty(Range("N6")) = False Then
    intN6 = 1
End If

'For N7
If IsEmpty(Range("N7")) = True Then
    intN7 = 0
ElseIf IsEmpty(Range("N7")) = False Then
    intN7 = 1
End If

'For N8
If IsEmpty(Range("N8")) = True Then
    intN8 = 0
ElseIf IsEmpty(Range("N8")) = False Then
    intN8 = 1
End If

'For N9
If IsEmpty(Range("N9")) = True Then
    intN9 = 0
ElseIf IsEmpty(Range("N9")) = False Then
    intN9 = 1
End If

'For N10
If IsEmpty(Range("N10")) = True Then
    intN10 = 0
ElseIf IsEmpty(Range("N10")) = False Then
    intN10 = 1
End If

'For N11
If IsEmpty(Range("N11")) = True Then
    intN11 = 0
ElseIf IsEmpty(Range("N11")) = False Then
    intN11 = 1
End If

'For N12
If IsEmpty(Range("N12")) = True Then
    intN12 = 0
ElseIf IsEmpty(Range("N12")) = False Then
    intN12 = 1
End If

'Make finalint the total of all other integers
finalint = intN2 + intN3 + intN4 + intN5 + intN6 + intN7 + intN8 + intN9 + intN10 + intN11 + intN12

'Place selection depending on amount of finalint
If finalint = 0 Then
    Selection.Copy Range("N2")
ElseIf finalint = 1 Then
    Selection.Copy Range("N3")
ElseIf finalint = 2 Then
    Selection.Copy Range("N4")
ElseIf finalint = 3 Then
    Selection.Copy Range("N5")
ElseIf finalint = 4 Then
    Selection.Copy Range("N6")
ElseIf finalint = 5 Then
    Selection.Copy Range("N7")
ElseIf finalint = 6 Then
    Selection.Copy Range("N8")
ElseIf finalint = 7 Then
    Selection.Copy Range("N9")
ElseIf finalint = 8 Then
    Selection.Copy Range("N10")
ElseIf finalint = 9 Then
    Selection.Copy Range("N11")
ElseIf finalint = 10 Then
    Selection.Copy Range("N12")
End If

End Sub

推荐阅读