来自另一张纸的VBA循环

时间:2017-03-30 14:58:45

标签: excel vba excel-vba loops

我的循环没有在整张纸上运行时遇到问题1.如果表1和#34中的值测试"存在于表2和癌症中#34;那么我想要表2中的价值"癌症"放入表1和#34;测试"。除循环外,代码可以正常工作。目前它只适用于我的第一张纸上的第一张记录然后停止。

Sub Testing()

Dim x As Long
Dim y As Long

x = 2
y = 2

Do While Sheets("Cancer").Cells(y, 1).Value <> ""
     If LCase(Trim(Sheets("Cancer").Cells(y, 1).Text)) = LCase(Trim(Sheets("Tests").Cells(x, 3).Text)) Then
           If Sheets("Tests").Cells(x, 4).Value = "" Then
                 Cells(x, 4) = (Trim(Sheets("Cancer").Cells(y, 3).Text))
                 x = x + 1
           End If
     End If
     y = y + 1
Loop

End Sub

2 个答案:

答案 0 :(得分:2)

我会使用两个for循环

for y = 2 to 10000 'the range your values are found
  if Sheets("Cancer").Cells(y, 1).Value <> "" then
    for x = 2 to 10000 'the range your values are in
      If LCase(Trim(Sheets("Cancer").Cells(y, 1).Text)) = LCase(Trim(Sheets("Tests").Cells(x, 3).Text)) and Sheets("Tests").Cells(x, 4).Value = "" Then
            Cells(x, 4) = (Trim(Sheets("Cancer").Cells(y, 3).Text))
      End If
    next
  end if
next

循环未在整个工作表1中运行的原因是因为这两行: If LCase(Trim(Sheets("Cancer").Cells(y, 1).Text)) = LCase(Trim(Sheets("Tests").Cells(x, 3).Text)) and Sheets("Tests").Cells(x, 4).Value = "" 如果这些条件都不是真的,则x将永远不会循环到下一次迭代,并且您将完成循环遍历Sheet2“Cancer”的每个值,同时仅检查Sheet1“Tests”的相同记录。

答案 1 :(得分:1)

你几乎完全符合你的所有范围。你错过了一个。尝试更改行:

Cells(x, 4) = (Trim(Sheets("Cancer").Cells(y, 3).Text))

Sheets("Tests").Cells(x, 4) = (Trim(Sheets("Cancer").Cells(y, 3).Text))