创建用户输入以使用一组标准来操纵数据

时间:2015-09-02 09:53:52

标签: excel vba excel-vba

我遇到VBA Excel 2010程序代码问题。

我正在尝试从excel 2010上的电子表格中读取数据。我所拥有的是一组数据(见下文),我正在尝试编写一个代码,让我使用一个msg框并让我写下来我正在寻找的名字,例如列中的名称列表中的“名称1”,然后我想设置一个条件,如果列中的数字等于零,并再次为另一列= 0(“名称5”),然后突出显示红色任何“名称8和名称9”列中的数字大于30(仅为随机示例)。重要的是,只有当数字为“名称1”行且“名称5”等于零时,才会出现“名称8/9”列的红色突出显示。

我已经这样做但我只使用了列号,例如A1:A5。现在我需要使用列的名称,因为我想使用不同excel电子表格的代码,但列的名称在每个Excel工作表的不同位置,但如果我使用名称,无论哪个列沿着excel他们我将永远找到我正在寻找的正确的专栏并设定标准。

“名称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

1 个答案:

答案 0 :(得分:0)

如果我正确地阅读你想要的东西,你可以试试这个。这将要求您输入名称,然后将该特定列的动作作为循环的范围。这就是你追求的目标吗?

另外,我已经改变了

If Application.Sum(rw.Resize(, 4)) = 0 Then 
        cll.Interior.ColorIndex = 3 

to 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