/ / VBA-excel condición de doble bucle - excel, vba, excel-vba

Condición de doble bucle VBA-excel - excel, vba, excel-vba

Actualmente estoy trabajando en excel vba, aunque mi programación es simplemente terrible. Me gustaría realizar la siguiente funcionalidad. Tengo 2 rangos de datos:

Un rango (a1:a10) se refiere a la variable que debe verificarse con el otro rango (b1: b250). La condición contra la cual se está verificando la variable debería ser que si la variable es más pequeña (<) que los valores en el rango (b1: b250), debería escupir la variable, de lo contrario debe mostrar "0".

Por lo tanto, a = 1 a 10 debe verificar contra todoslos valores de b = 1 a 250 como si el bucle se ejecutara 2500 veces para garantizar que todos los valores en el rango (a1: a10) hayan sido comparados con el rango (b1: b250). Por favor, avíseme si puede ayudar o qué otra información es necesaria.

Respuestas

2 para la respuesta № 1

Puedes hacerlo sin ningún tipo de bucles. Una consulta SQL funciona para usted. Aquí es cómo puedes hacer eso.

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

Es mi hoja inicial. Sus valores B están en la columna A y los valores A están en la columna B. enter image description here

Y este es el código vba posterior.

enter image description here


1 para la respuesta № 2

¡Gracias a Ali SM por mostrar una manera excelente, pero menos conocida! Antes de Ali, hubiera sugerido un enfoque más de Loop-Less más:

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

Antes de Macro:

enter image description here

Después de Macro:

enter image description here