如何正确地写下面的嵌套For Each循环?

所以,我有一个数据sorting问题。 本质上,我必须排第2行的单元格在第1行的近似值之下。

数据通常会显示为:

不匹配

但是我要求Row2的数据在它的Row1对象的近似值(在1.2之内)被sorting,如下所示:

排序

我相信最好的办法是创build一个For Each循环的嵌套集合,如下所示:

Dim F As Range Dim Q As Range For Each F In Range("A1:C1") For Each Q In Range("A2:C2") If Q.Cell.Value <= (F.Cell.Value + 1.2) Then F.Offset(1, 0).Value = Q.Cell.Value Exit For End If Next Q Next F 

虽然这已被certificate是具有挑战性的 我的意图是反复检查Row1的值,并且,如果在Row2中find了具有必要条件的值,请将其置于Row1中的对应项下。

代码已经暂停,但是,由于“运行时错误'438':对象不支持此属性或方法”。

如何正确编写代码以避免这样或类似的错误?

非常感谢! 如果您有任何改进build议,请随时提出build议。

最好,

GD Liamwilt,

根据@Scott Cramer的回答。

尝试这个:

 Sub t() Dim F As Range Dim Q As Range For Each F In Range("A1:C1").Cells For Each Q In Range("A2:C2").Cells If Q.Value <= (F.Value + 1.2) Then F.Offset(1, 0).Value = Q.Value Exit For End If Next Q Next F End Sub 

评论和以前的答案告诉你如何解决运行时错误

为了得到最终的结果,你可以使用这样的代码:

 Option Explicit Public Sub hSort() Dim row1 As Range, c1 As Range, cr1 As Double Dim row2 As Range, c2 As Range, cr2 As Double Dim tmp As Variant With Worksheets("Sheet1") Set row1 = .Range("A1:D1") Set row2 = .Range("A2:D2") For Each c1 In row1 For Each c2 In row2 If IsNumeric(c1) And IsNumeric(c2) And c2.Column <> c1.Column Then cr1 = Round(c1, 1) cr2 = Round(c2, 1) If cr2 <= cr1 + 1.2 And cr2 >= cr1 - 1.2 Then tmp = row2.Cells(, c1.Column) row2.Cells(, c1.Column) = c2 c2 = tmp Exit For End If End If Next Next End With End Sub 

 Row1 68.39817 70.79805 73.1977 Row2 73.68835 68.88472 

hSort