我有A2:A34
的一系列数据,其中包含各种名称,我需要将其复制到范围E9:E14
。我只需要复制和粘贴唯一的名称(我不需要同名的双倍)。我很确定使用嵌套的For Next
循环是可行的方法,但是我无法让外循环进入下一次迭代。现在,这只是给我A2:A34
中重复范围E9:14
中的姓氏。我正在研究使用Exit For
但是当我在代码中添加它时,外部循环迭代但内部循环从2开始。
对此的任何帮助将不胜感激。谢谢! 以下是我的代码:
Sub FillTable()
Dim tableCount As Integer
Dim rowCount As Integer
For tableCount = 9 To 13
If Range("E" & tableCount).Value = "" Then
For rowCount = 2 To 34
If Range("E" & tableCount).Value = Range("A" & rowCount).Value Then
ElseIf Range("E" & tableCount).Value <> Range("A" & rowCount).Value Then
Range("E" & tableCount).Value = Range("A" & rowCount).Value
End If
Next rowCount
End If
Next tableCount
End Sub
答案 0 :(得分:0)
我不确定VBA是否真的需要这个确切的问题,但希望下面的代码会有所帮助。我切换循环,以便您只迭代大型名称列表一次,然后遍历第二个列表检查重复项。我还添加了一个变量,因此它允许超过5个唯一名称(与tablecount为9到13时不同)。
公平警告 - 这是一种快速简便的解决方案。既不优雅也不优化。
Sub FillTable()
Dim tableCount As Integer
Dim rowCount As Integer
Dim n As Integer
n = 0
For rowCount = 2 To 34
For tableCount = 9 To 9 + n
If Range("E" & tableCount).Value = Range("A" & rowCount).Value Then
' name already found, break out of loop
Exit For
ElseIf Range("E" & tableCount).Value = "" Then
Range("E" & tableCount).Value = Range("A" & rowCount).Value
n = n + 1
End If
Next tableCount
Next rowCount
End Sub
答案 1 :(得分:0)
您的目标描述似乎与代码不符。
您正在复制(简化一下)col A到col E. col E是否已包含数据?如果没有,为什么第一个&#34;如果&#34; stmt查看某个单元格是否为空? 如果是,E已经包含数据,那么您想要遍历E以查看E是否已包含新名称。 我还要指出,E有6个名字的空间(按照你的规格),而来源有33个名字。
在不了解您的目标的情况下,我不会建议真正的代码,但也许是一种解决问题的方法: 创建仅执行非常简单的小事的函数。例如,也许最简单,一个函数来查看名称是否已在列表中。请注意,我假设使用最高行的值,请务必定义它,无论是14还是某个计数器。
Function Is_Name_Already_Present_in_E( Name-to-check as String ) As Bool
Is_Name_Already_Present_in_E = False ; Default we'll return if don't find name.
for r = 9 to highest-so-far-used
if Name-to-check = Range( "E" & r ).value then ; If found name in list,
Is_Name_Already_Present_in_E = true ; then return true.
exit function
end if
next r
end function ; If scan whole list, and not found,false.
我确定存在一些语法错误,但它们应该很容易解决。
然后,创建一个简单的函数将你的新名字添加到E.也许就像(当心假设!):
Function Add_New_Name_To_List( Name as string ) as bool
if highest_used_so_far >= 14 then
Error "No room to insert name:" & Name & ". Rejected."
Add_New_Name_To_List = false
exit function
end if
highest_used_so_far = highest_used_so_far + 1
range( A & h_u_s_r ).value = Name
Add_New_Name_To_List = true
exit function
然后,你的主要变得非常简单(假代码示例,因为我不知道你的意图):
for r = 2 to 34
if not Is_Name_Already_Present_in_E( range( "A" & r ).value ) then
if not Add_Name_to_E( range( "A" & r ).value ) then
... what to do if add fails. ...
end if
end if
next name
将问题分解成碎片,应该清楚如何写出每一件。祝你好运。