我的问题的数据如下:
#define apple
#define mango
#define banana
animals{
dog,
cat,
bird
#define guava
#define avocado
#define的字符串设置为颜色索引= 50,其余字符串设置为颜色索引= 23
我想要做的是我想找到“动物”这个词,我希望它能看到下一栏,直到下一栏有#define。如果下一列没有#define,则将其编号为“0”,下一列为“1”,依此类推,因此结果如下:
#define apple
#define mango
#define banana
animals{
dog, 0
cat, 1
bird 2
#define guava
#define avocado
我的代码如下,但它没有按计划移动到下一列。
For Each cell In DataRange.Cells
If InStr(cell.Value, "animals") <> 0 Then
Do Until ActiveCell.Font.ColorIndex = 50
cell.Value = cell.Value & o
o = o + 1
cell.Offset(0, 1).Select
Loop
End If
Next
谢谢
通常,代码中的错误是您没有选择要循环的单元格。这可能是理解循环如何工作的一个很好的例子。
我不想成为编写此代码的人,但请尝试:
For Each cell In DataRange.Cells
cell.Select
If InStr(cell.Value, "animals") <> 0 Then
Do Until ActiveCell.Font.ColorIndex = 50
cell.Value = cell.Value & o
o = o + 1
cell.Offset(0, 1).Select
Loop
End If
Next
如果它有效,请在阅读之后尝试重构它:How to avoid using Select in Excel VBA
尝试通过将ActiveCell
设置为Range
并且不使用Select
而不是ActiveCell
来避免选择。您可以考虑水平循环的第二个Range
变量。试试看!
像这样的东西可能会好的:
Public Sub TestMe()
Dim myCellH As Range
Dim myCellV As Range
Dim DataRange As Range
Dim o As Long
Set DataRange = Range("A1:A10")
For Each myCellH In DataRange.Cells
If InStr(myCellH, "animals") <> 0 Then
Set myCellV = myCellH
Do Until myCellV.Font.ColorIndex = 50
myCellV.Value = myCellV.Value & o
o = o + 1
Set myCellV = myCellV.Offset(0, 1)
Loop
End If
Next
End Sub