我有一个VBA Excel 2010程序代码的问题。
我正试图从excel 2010上的电子表格中读取数据。我所拥有的是一组数据(见下文),我正试图编写一个代码,让我使用一个消息框,并要求我写下我正在寻找的名称,例如。从列中的名称列表中选择"Name 1",然后我想设置一个条件,如果列中的数字等于0,而另一列的数字等于0("Name 5"),那么"Name 8和Name 9"列中大于30的任何数字都突出显示为红色(只是一个随机的例子)。重要的是,只有当"姓名1"one_answers"姓名5"的数字等于零时,"姓名8/9"列的红色高亮才会出现。
我已经这样做了,但我只使用了列号,例如A1:A5。现在我需要使用列的名称,因为我想使用不同的excel电子表格的代码,但列的名称是在不同的位置为每个excel表格,但如果我使用的名称,无论哪个列沿着excel他们是我将始终找到正确的列,我正在寻找并设置标准。
"Name 1/5"的条件总是= 0或=1,但是当我搜索它时,程序必须要求我选择它。
如果您查看下面的示例,您可以看到红色高亮显示的是名称1和名称5满足=0的条件,并且名称8/9中的数字大于30。当它不大于30并且仍然满足条件时,它在excel电子表格示例中以蓝色突出显示。所有其他的名字必须被忽略。
参见下面的例子
Name 1 Name 2 Name 3 Name 4 Name 5 Name 6 Name 7 Name 8 Name 9 Name 10
0 0 1 0 0 1 58 35 14 19
0 0 0 0 0 1 41 45 68 74
1 0 1 0 1 0 23 18 98 87
0 0 1 0 0 1 65 36 52 89
0 0 0 0 1 1 24 95 47 75
1 1 1 0 1 0 58 87 59 14
0 1 0 0 0 0 74 41 84 32
1 1 0 0 1 0 96 25 74 96
0 0 0 0 0 0 87 35 15 53
0 0 1 0 0 1 57 49 48 47
1 0 1 0 1 1 63 84 23 65
0 1 0 0 0 0 21 54 69 12
0 0 1 0 0 0 54 23 54 54
1 1 0 0 1 1 88 34 77 88
0 0 1 0 0 0 78 48 68 69
1 0 1 0 0 1 96 87 14 65
1 0 0 0 1 0 21 96 54 25
0 1 0 0 0 0 54 72 78 29
0 1 1 0 0 1 62 38 22 78
0 0 0 0 0 0 21 49 65 54
1 0 1 0 1 1 17 65 98 99
0 0 0 0 0 0 59 15 56 70
0 1 1 0 0 0 36 12 29 54
1 0 0 0 1 0 29 49 55 54
代码:Private Sub CommandButton21_Click()
Cells.Interior.ColorIndex = 0
For Each rw In Range("A1:V22").Rows
If Application.Sum(rw.Resize(, 4)) = 0 Then
cll.Interior.ColorIndex = 3
For Each cll In rw.Offset(, 4).Resize(, 18).Cells
If cll.Value > 50 Then cll.Interior.ColorIndex = 3
Next cll
End If
Next rw
End Sub
如果我没看错的话,你可以试试这个。这将要求您输入名称,然后将在特定列上运行您的动作,作为循环的范围。这就是你想要的吗?
同时,我也改变了
If Application.Sum(rw.Resize(, 4)) = 0 Then
cll.Interior.ColorIndex = 3
到rw.Interior.Colorindex = 3 -因为我猜这是一个错误(因为你不能在其循环之外使用变量
)Private Sub CommandButton21_Click()
searchstring = InputBox("Input name?")
Set coll = Rows(1).Find(What:=searchstring, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)
If coll Is Nothing Then
MsgBox "Name not found"
Exit Sub
Else
coll = coll.Column
Lrow = Range(Cells(2, coll), Cells(2, coll)).CurrentRegion.Rows.Count
End If
Cells.Interior.ColorIndex = 0
For Each rw In Range(Cells(2, coll), Cells(Lrow, coll))
If Application.Sum(rw.Resize(, 4)) = 0 Then
rw.Interior.ColorIndex = 3
For Each cll In rw.offset(, 4).Resize(, 18).Cells
If cll.Value > 50 Then cll.Interior.ColorIndex = 3
Next cll
End If
Next rw
End Sub