查找值并在 VBA 中插入一行
Find a Value and insert a row in VBA
Sub o()
Dim x As Integer
Dim y As Integer
For y = 2 To 2
For x = 1 To 600
If Cells(x, y).Value = "CD Sector Average" Then
Cells(x, y).EntireRow.Select
Selection.Insert Shift:=xlDown
Cells(x + 2, y).Select
End If
Next x
Next y
For y = 2 To 2
For x = 1 To 600
Next x
If Cells(x, y).Value = "CS Sector Average" Then
Cells(x, y).EntireRow.Select
Selection.Insert Shift:=xlDown
Cells(x + 2, y).Select
End If
Next x
Next y
For y = 2 To 2
For x = 1 To 600
Next x
If Cells(x, y).Value = "E Sector Average" Then
Cells(x, y).EntireRow.Select
Selection.Insert Shift:=xlDown
Cells(x + 2, y).Select
End If
Next x
Next y
End Sub
所以我正在寻找的是它找到第一个值并添加上面的行,然后继续搜索下一个值并添加一行。
它所做的是在第一个值之前插入行,直到它达到 600 范围,然后宏结束。
如何将其更改为仅 运行 查找并插入一次,然后移动到下一个值进行查找?
问题是你的工作方向错了。对于您的循环,如果它在第 5 行 (x = 5) 中找到值,例如,它将添加一行并将找到该值的行向下移动(在本例中从 5 到 6)。当您的 FOR 循环迭代时,它会移动到下一行 (x = 6) 并找到与我们刚刚移动的完全相同的行。
要解决此问题,您需要向后工作。在执行这样的功能或删除特定行时,这始终是一个好习惯。要向后工作,您只需要对 FOR 循环做一点小改动。尝试将其更改为:
For x = 600 to 1 Step -1
这告诉 Excel 从 600 到 1,每次迭代 -1,避免你看到的问题。
Sub o()
Dim x As Integer
Dim y As Integer
For y = 2 To 2
For x = 1 To 600
If Cells(x, y).Value = "CD Sector Average" Then
Cells(x, y).EntireRow.Select
Selection.Insert Shift:=xlDown
Cells(x + 2, y).Select
End If
Next x
Next y
For y = 2 To 2
For x = 1 To 600
Next x
If Cells(x, y).Value = "CS Sector Average" Then
Cells(x, y).EntireRow.Select
Selection.Insert Shift:=xlDown
Cells(x + 2, y).Select
End If
Next x
Next y
For y = 2 To 2
For x = 1 To 600
Next x
If Cells(x, y).Value = "E Sector Average" Then
Cells(x, y).EntireRow.Select
Selection.Insert Shift:=xlDown
Cells(x + 2, y).Select
End If
Next x
Next y
End Sub
所以我正在寻找的是它找到第一个值并添加上面的行,然后继续搜索下一个值并添加一行。
它所做的是在第一个值之前插入行,直到它达到 600 范围,然后宏结束。
如何将其更改为仅 运行 查找并插入一次,然后移动到下一个值进行查找?
问题是你的工作方向错了。对于您的循环,如果它在第 5 行 (x = 5) 中找到值,例如,它将添加一行并将找到该值的行向下移动(在本例中从 5 到 6)。当您的 FOR 循环迭代时,它会移动到下一行 (x = 6) 并找到与我们刚刚移动的完全相同的行。
要解决此问题,您需要向后工作。在执行这样的功能或删除特定行时,这始终是一个好习惯。要向后工作,您只需要对 FOR 循环做一点小改动。尝试将其更改为:
For x = 600 to 1 Step -1
这告诉 Excel 从 600 到 1,每次迭代 -1,避免你看到的问题。