我目前在excel vba工作,虽然我的编程很糟糕。我想执行以下功能。我有2个数据范围:
一个范围(a1:a10)是指需要针对另一个范围(b1:b250)进行检查的变量。变量检查的条件应该是,如果变量小于(<)范围内的值(b1:b250),那么它应该吐出变量,否则应该显示" 0&#34 ;
因此a = 1到10应该检查b = 1到250的所有值,就好像循环应该运行2500次以确保范围(a1:a10)中的所有值都已经检查了范围(b1:b250) 。如果您能提供帮助或需要其他信息,请告诉我。
答案 0 :(得分:2)
你可以做到这一点,没有任何循环。 SQL查询适合您。这是你如何做到的。
Sub tadaaa()
Dim con As Object, rs As Object
Dim query As String, query1 As String
Dim connector As String
Dim address As String
Dim sht As Worksheet
Set sht = Sheets("Sheet1")
Set con = CreateObject("adodb.connection")
Set rs = CreateObject("adodb.recordset")
address = ThisWorkbook.FullName
connector = "provider=microsoft.ace.oledb.12.0;data source=" & _
address & ";extended properties=""Excel 12.0 Macro;hdr=yes"""
con.Open connector
query = "select Defender from [sheet1$] where Defender < "
'Source sheet
For i = 2 To sht.Range("b" & Rows.Count).End(xlUp).Row
query1 = query & sht.Cells(i, 2).Value
Set rs = con.Execute(query1) 'Execute the query
'Recording query results to any sheet you want.
sht.Cells(6500, 2 * i).End(3).Offset(1, 0).CopyFromRecordset rs
sht.Cells(1, 2 * i).Value = rs.Fields(0).Name & " vs A" & i
Set rs = Nothing
query1 = Empty
Next
Set con = Nothing
End Sub
这是后vba代码。
答案 1 :(得分:1)
感谢Ali SM展示了一种出色但却鲜为人知的方式! 在阿里之前,我会建议再采用一种无环路方法:
Sub WithoutLoop()
Range("E1").FormulaR1C1 = "=""Vs Examiner ""&OFFSET(R2C2,COLUMN()-5,0)"
Range("E2").FormulaR1C1 = "=IF(OFFSET(R2C2,COLUMN()-5,0)<RC4,OFFSET(R2C2,COLUMN()-5,0),0)"
Range("E1").Copy
Range("E1", Range("E1").Offset(0, 9)).PasteSpecial xlPasteFormulas
Range("E2").Copy
Range("E2", Range("E2").Offset(2500, 9)).PasteSpecial xlPasteFormulas
End Sub
之前的宏:
宏观之后: