从C#到VBA转换(是的,一种愚蠢的)

double [] numbers = new numbers[200]; numbers[0] = 123; numbers[1] = 456; // // and so on. // var n0 = numbers; var n1 = numbers.Skip(1); var n2 = numbers.Skip(2); var n3 = numbers.Skip(3); var x = from a in n0 from b in n1 from c in n2 from d in n3 where a + b + c + d == 2341.42 select new { a1 = a, b1 = b, c1 = c, d1 = d }; foreach (var aa in x) { Console.WriteLine("{0}, {1}, {2}, {3}", aa.a1, aa.b1, aa.c1, aa.d1 ); } 

有我的C#代码。 我需要将其转换为vba。

我的主要问题是这样的:

  var x = from a in n0 from b in n1 from c in n2 from d in n3 where a + b + c + d == 2341.42 select new { a1 = a, b1 = b, c1 = c, d1 = d }; 

我们将如何做到这一点在vba?

 Type NumberSet A As Double B As Double C As Double D As Double End Type Public Sub TheSub() Dim numbers(0 To 199) As Double numbers(0) = 123 numbers(1) = 456 ' ' and so on. ' 'iterators Dim ai As Integer Dim bi As Integer Dim ci As Integer Dim di As Integer 'data set Dim x() As NumberSet 'temp record holder Dim ns As NumberSet Dim count As Integer count = 0 'simulate the select query For ai = LBound(numbers) To UBound(numbers) For bi = LBound(numbers) + 1 To UBound(numbers) For ci = LBound(numbers) + 2 To UBound(numbers) For di = LBound(numbers) + 3 To UBound(numbers) 'fill the record With ns .A = numbers(ai) .B = numbers(bi) .C = numbers(ci) .D = numbers(di) 'test record If .A + .B + .C + .D = 2341.42 Then 'append to the data set ReDim Preserve x(0 To count) x(count) = ns count = count + 1 End If End With Next di Next ci Next bi Next ai 'iterate through data set and print results For i = LBound(x) To UBound(x) ns = x(i) With ns Debug.Print .A & ", " & .B & ", " & .C & ", " & .D End With Next i End Sub 

不是最有效的..但试图遵循原来的代码stream..它会运行缓慢,因为它就像蛮力循环(大约四分钟在这里)..也许使用临时数据库/访问表通过ADO / DAO你在哪里可以使用SQL将有所帮助。

 Dim N(200) For I0 = 0 To 199 For I1 = 1 To 199 For I2 = 2 To 199 For I3 = 3 To 199 If N(I0)+N(I1)+N(I2)+N(I3) = 2341.42 Then Debug.Print N(I0) & "," & N(I1) & "," & N(I2) & "," & N(I3) End If Next Next Next Next