vba - 如何有条件地将一行中的数据排序为第二行中的近似数据匹配?

标签 vba excel sorting for-loop

所以,我遇到了数据排序问题。

本质上,我想对第 2 行到第 48 行的单元格进行排序,使它们低于第 1 行中的近似值(下图中的省略号用作该行中所有其他单元格的占位符;所有行, 1 到 48,将从 EG 延伸到 IB,使每行总共 100 个单元格)。

数据通常如下所示:

have

但我要求第 2 行到第 48 行的数据以近似值(1.2 以内)排序在第 1 行对应项的下方,如下所示:

want

现在对值进行排序,使用第 1 行作为所有其他行排序的主行。如果第 2-48 行中没有单元格值满足与其第 1 行对应值的 1.2 以内的条件,则该行中的单元格必须留空。

我最初的代码是这样写的:

Sub t()

Dim F As Range
Dim Q As Range

For Each F In Range("EG1:IB1").Cells
    For Each Q In Range("EG2:IB2").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

显然,这段代码没有产生预期的结果,但我不知道为什么。目的是对照第 2 行迭代检查第 1 行的数据值,如果在第 2 行中找到符合必要条件的值(在当前第 1 行单元格值的 1.2 范围内),则将其放置在行中相应值的下方1.

所以,假设:

  1. 第 1 行将在所有 100 个单元格中包含数据值,并且
  2. 第 2-48 行不会在所有 100 个单元格中都有数据,并且
  3. 不包含数据的单元格将为空,并且
  4. 我希望将代码限制为一次对一行进行排序(为了安全起见,在每个程序运行时根据第 1 行检查并排序单行)

如何重写(如果需要的话,完全重写)我的代码,以便可以对数据进行排序(如第一张图片中所示),以最适合第二张图片中示例的数据组织?

提前谢谢您,如果这实际上是一个我忽略的非常简单的解决方案,请原谅我!!

最好,

最佳答案

对每行进行横向排序应该纠正所有无序值,并将它们全部“挤在一起”在 EG1:IB48 范围的左端。之后,插入一个新单元格(向右移动行上的其他值)应该可以纠正位置。

Sub sort_and_push()
    Dim rw As Long, cl As Long

    With Worksheets("Sheet4")   '<~~ set this correctly!
        With .Range("EG1:IB48")
            With .Rows(1)
                .Cells.sort Key1:=.Rows(1), Order1:=xlAscending, _
                            Orientation:=xlLeftToRight, Header:=xlNo
            End With
            For rw = 2 To .Rows.Count
                .Rows(rw).Cells.sort Key1:=.Rows(rw), Order1:=xlAscending, _
                            Orientation:=xlLeftToRight, Header:=xlNo
                For cl = 1 To 99
                    If IsEmpty(.Cells(rw, cl)) Then
                        Exit For
                    ElseIf .Cells(rw, cl).Value2 > .Cells(1, cl + 1).Value2 Then
                        .Cells(rw, cl).Insert Shift:=xlToRight
                    End If
                Next cl
            Next rw
        End With
    End With
End Sub

   enter image description here

关于vba - 如何有条件地将一行中的数据排序为第二行中的近似数据匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33335926/

相关文章:

excel - 在 Excel 中将 A 列中的所有 @提及和 #hashtags 复制到 B 列和 C 列

sql - Access : how to detect with VBA whether a query is opened?

regex - 特殊字符的 VBA 正则表达式

vba - 使用 for 循环在工作簿中添加新工作表

excel - 将 Excel 工作簿的一部分复制/粘贴到当前未打开的工作簿

mysql - 如何将 MySQL 中的数据插入/选择到 Excel/VBA?

excel - Visual Studio 在线 : No Reports on Team Server possible?

java - 如何水平打印整数数组?

sorting - GLSL奇偶合并排序

sorting - 我如何为有序/排序的数据结构寻求帮助?