在excel表中查找数据,如果存在数据,则向列H添加yes

时间:2014-08-24 22:30:32

标签: excel vba excel-vba

嘿伙计我需要你的帮助。我目前有以下代码通过名为“数据”的工作表进行搜索。如果存在符合所有条件的行,我想在“H”列中添加“是”,并提供一个“数据组合存在”的消息框,如果没有提供“数据不存在”的消息。提前谢谢。

Private Sub Cmdnext_Click()

  'With Sheets("data")

  'we initialize the row number where we will start comparing the data because the worksheet has headers in row 1
 'Sheet = Data
 Row = 2
 'Now we start the looping process
 Do While Sheets("DATA").Cells(Row, 1).Value <> ””
 'We compare the entered data with the worksheet data
 If Sheets("DATA").Cells(Row, 1).Value = Txtscan.Text And Sheets("DATA").Cells(Row, 2).Value = TxtsourceID.Text And Sheets("Data").Cells(Row, 3).Value = txtcardbin.Text And Sheets("DATA").Cells(Row, 6).Value = txtcardstock.Text Then


MsgBox ("Data combination exists")

 End
 Else



 'we go to the next row to compare data
 Row = Row + 1
 End If
 Loop

'If the user is not found based on his inputs in the login form, we give out a message

 MsgBox ("Data Does not Exist")

 'End With
End Sub

1 个答案:

答案 0 :(得分:1)

您的邮件格式不是很好,因此很难理解您的代码是如何构造的......您应该使用code函数使其更清晰。

这对我来说看起来非常像是一个功课问题,所以我不会为你编写代码(我觉得关于SO的问题应该提供自己的代码......你真正提供的是伪 - 码)。

我将如何构建我的代码:

我会宣布一个bolean,说:

data_exist: True

然后我会循环我的细胞。如果任何标准不匹配,我会将我的bolean设置为&#34; False&#34;。

您可以使用for循环从代码中的第1个单元格循环到最后一个单元格。在for循环的开头,插入一个if,检查你的bolean是否= = True(因为如果它等于false,则没有任何进一步的迭代点)。

然后你可以有一个IF检查bolean == True,如果是,那么运行你的msgbox&amp;一切。

===================编辑后格式================

先生,谢谢你,这样更清楚。根据您在此提供的内容,我会做什么 我会添加另一张表,&#34; check_data&#34;。在那里,我将输入我想要检查的每一行中必须存在的所有值。优点是,您可以轻松编辑您的检查值(即它们不是硬编码的),然后另一个用户可以编辑它,甚至不知道VBA正用于此。比代码中的答案硬编码更好的方法。我决定把数据放在我新表的第2行,&#34; check_data&#34;

所以,让我们假设我有这张表,&#34; check_data&#34;。让我们假设我将数据检查(您的Txtscan.txt,Source.txt等),使得它们的列号与您检查数据的表格完全相同。通过这种方式,您可以使用相同的变量来迭代这两个变量并简单地完成代码....

    Private Sub Cmdnext_Click()
    dim data_exist As Bolean, dim row as integer, dim columns As integer, dim max_row As integer, dim i as integer 'You should declare variable here

 row = 2, columns = 1 max_row = ????????
    'Not sure what your situation for max_row, but you can figure out a way to determine
    'that I am sure. If fixed number it's easy, otherwise there are command to find last used row of a worksheet.


  for i=row to max_row: 'This will iterate over all your rows
    columns = 2, data_exist = True    'Each time you are about to check a new row, you must reset the column number so it increments from 1 to 6 and start by assuming that the data will match

    While data_exist == True And columns < 7  'Check each column in current row ideally again I wouldn't hard-code it but you can just adapt that later

      If Sheets("Data").Cells(row, columns) != Sheets("check_data").Cells(2, columns) Then
        data_exist = False
      Else 
        columns = columns + 1
      End If
    End While

  If data_exist == True Then
    'Put your msgbox or whatever code you want to run here in case data are identical

  Else 
    'Put any code you want to run if the data aren't identical for that row

  End if
  next i

End sub

从广义上讲应该是这样。我实际上无法访问安装在这里的MS Excel,所以我无法真正测试代码,它来自内存并且如您所知(或者如果您在VBA中编写很多代码,很快就会知道)这个东西是充满沮丧的小怪癖和黑客,但除了应该工作的小细节。我认为它是一个更灵活的结构,你开始的......基本上我的想法是硬编码尽可能少,使用函数来计算/找到一个值。另外,由于上面详述的原因,在长期运行中添加检查单独表格的答案会更好...