VBA-excel双循环条件

时间:2016-04-12 08:40:36

标签: excel vba excel-vba

我目前在excel vba工作,虽然我的编程很糟糕。我想执行以下功能。我有2个数据范围:

一个范围(a1:a10)是指需要针对另一个范围(b1:b250)进行检查的变量。变量检查的条件应该是,如果变量小于(<)范围内的值(b1:b250),那么它应该吐出变量,否则应该显示" 0&#34 ;

因此a = 1到10应该检查b = 1到250的所有值,就好像循环应该运行2500次以确保范围(a1:a10)中的所有值都已经检查了范围(b1:b250) 。如果您能提供帮助或需要其他信息,请告诉我。

2 个答案:

答案 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

这是我的初始表。您的B值在A列中,A值在B列中。 enter image description here

这是后vba代码。

enter image description here

答案 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

之前的宏:

enter image description here

宏观之后:

enter image description here