EXCEL如何用VBA实现多条件查询数据?
在两个文本框中分别输入模具的“长度”和“宽度”,点击按钮,系统就会查询出符合条件( 长度-1<=长度<=长度+1 & 宽度-1<=宽度<=宽度+1 )的结果并把它显示在下面的表格中,查询出的结果和输入的数值完全匹配的,就填充浅绿色背景以突出显示(如图)。
求附有注释的代码,谢谢
提问者不能上传文件?
做好的工作簿在这里,就缺代码
http://pan.baidu.com/s/1jHseMDS 展开
1、以商场2015年第一季度电器销售统计为例子,“产品”、“品牌”、“月份”3个条件的销售额进行查询。
2、假设要查询“康佳”的“1月”份“各类家电”的销售额,先建一个对应列的工作簿。如图,输入条件1:“成品名称”,条件2:“品牌名称”,条件3:“月份”,
3、下面到了建立宏的步骤:单击菜单栏中的“开发工具”——插入——表单控件——按钮,在出现的十字箭头上拖住画出一个按钮,如图所示。
4、在弹出的查找红对话框中选择“录制”,在弹出的“录制新宏”对话框中,修改宏名称为“查找”,单击确定。
5、单击“开发工具”——查看代码,打开VBA编辑器,如图所示。
6、在VBA编辑器点击插入-模块,如图,
7、现在来输入代码:
Sub 查找()
Dim i As Integer, j As Integer
arr1 = Sheets("数据").Range("A2:D" & Sheets("数据").Cells(Rows.Count, "A").End(xlUp).Row)
arr2 = Sheets("查找").Range("A2:D" & Sheets("查找").Cells(Rows.Count, "A").End(xlUp).Row)
For i = 1 To UBound(arr2)
For j = 1 To UBound(arr1)
If arr2(i, 1) = arr1(j, 1) And arr2(i, 2) = arr1(j, 2) And arr2(i, 3) = arr1(j, 3) Then
arr2(i, 4) = arr1(j, 4)
GoTo 100
End If
Next
arr2(i, 4) = ""
100:
Next
Sheets("查找").Range("A2:D" & Sheets("查找").Cells(Rows.Count, "A").End(xlUp).Row) = arr2
End Sub
8、现在回到EXCEL表格,右击按钮,选择“编辑文字”,修改按钮名称为“统计”。
9、那么就完成了。
Private Sub CommandButton1_Click()
Application.ScreenUpdating = False
Dim Conn As New ADODB.Connection
Dim Rs As New ADODB.Recordset
Dim Str_sql As String
Conn.Open ("provider=microsoft.ace.oledb.12.0;extended properties='Excel 12.0;HDR=YES';data source=" & ThisWorkbook.FullName)
Str_sql = "SELECT 编号,类别,长度,宽度,库存 FROM [数据表$] WHERE (长度>=" & TextBox1.Value - 1 & " AND 长度<=" & TextBox1.Value + 1 & ") AND (宽度>=" & TextBox2.Value - 1 & " AND 宽度<=" & TextBox2.Value + 1 & ")"
Rs.Open Str_sql, Conn, adOpenKeyset, adLockReadOnly
If Not Rs.RecordCount = 0 Then
Range("A3:E65536").ClearContents
Range("A3:E65536").Interior.Color = RGB(255, 255, 255)
Range("A3").CopyFromRecordset Rs
Dim A As Long
Dim T1, T2 As Double
T1 = CDbl(TextBox1.Value)
T2 = CDbl(TextBox2.Value)
For A = 3 To Rs.RecordCount + 3
If Cells(A, 3).Value = T1 And Cells(A, 4).Value = T2 Then
Range(Cells(A, 1), Cells(A, 5)).Interior.Color = RGB(169, 208, 142)
End If
Next A
Else
TextBox1.Value = ""
TextBox2.Value = ""
Range("A3:E65536").ClearContents
Range("A3:E65536").Interior.Color = RGB(255, 255, 255)
MsgBox "没有找到合适的刀模!"
End If
Rs.Close
Set Rs = Nothing
Conn.Close
Set Conn = Nothing
Application.ScreenUpdating = True
End Sub
以上代码缺陷在于没有对Textbox1和Textbox2输入的值进行数据验证,这里只能输数字和小数点,如果你输入别的程序就会报错。
可以用【正则表达式】来做数据验证,可惜我不会:(