Range.Find适用于单个单元格,但在放入循环中时会跳过它



这是完整的代码。它从表格底部提取一个关键字或短语,在表格顶部找到它,并在关键字旁边粘贴一个相邻的单元格。因此,如果底部写着"人口",它会在顶部找到人口,将一个单元格移到35987,并将35987粘贴在表格底部的人口旁边。(实际上,这是粘贴公式,但复制/粘贴不是问题所在(。

Sub FindTest()
'
' FindTest Macro
'
Dim cArray As Variant
Dim rArray As Variant

Application.ScreenUpdating = False
cArray = Array(1, 3, 5, 7, 9, 11)
rArray = Array(1, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 42, 44, 46, 48, 54, 56, 58, 60, 63, 65, 67, 69, 71, 73, 75, 77, 79)
For Each i In cArray
For Each j In rArray
'Start one cell up and one cell to the left of BI ILF
Range("Q141").Offset(j, i).Select
fname = Selection.Text
'Range for floc is entire original Attributes section
Set floc = Range("P5:Y130").Find(fname, LookIn:=xlValues, LookAt:=xlWhole)
If Not floc Is Nothing Then
faddy = floc.Address
Range(faddy).Offset(0, 1).Select
Selection.Cut
'Range matches original starting cell
Range("Q141").Offset(j, i + 1).Activate
ActiveSheet.Paste
Else
GoTo Skip
End If
Skip:
Next j
Next i
Application.ScreenUpdating = True
End Sub

一般来说,这是有效的,但有几个关键词即使完全匹配,也找不到。为了测试find函数,我创建了下面的代码,以针对原始代码找不到的特定关键字。这一次,它确实发现它完全符合预期。

Sub Searcher()
'
' FindTest Macro
'
Range("AF153").Select
fname = Selection.Text
'Range for floc is entire original Attributes section
Set floc = Range("P5:Y130").Find(fname, LookIn:=xlValues, LookAt:=xlWhole)
If Not floc Is Nothing Then
faddy = floc.Address
Range(faddy).Offset(0, 1).Select
Selection.Cut
'Range matches original starting cell
Range("AG153").Activate
ActiveSheet.Paste
End If
End Sub

那么:为什么当我硬编码一个特定的单元格,但当它执行相同的功能但在循环中时,它会跳过它?不起作用的关键词范围从单个单词到字母数字短语。作为提醒,原始代码确实找到了大约60%的关键词。

谢谢!

这个怎么样?

for i = 1 to 11 step 2
for j = 2 to 79 step 2
''Your code
next j
next i

如果两个变量之间的差异相同,我认为您不需要数组。

但如果你想定义一个数组,那么就这样做:

dim rArray(1 to 6) as integer
rArray(1) = 1
rArray(2) = 3
rArray(3) = 5 
rArray(4) = 7
rArray(5) = 9
rArray(6) = 11
''Do same for cArray
for i = 1 to 6
'' Your code
range("Q141").offset(rArray(j),cArray(i))
next i
etc.

最新更新