【问题标题】:Transpose values from a row where criteria are met转置满足条件的行中的值
【发布时间】:2016-09-02 11:59:18
【问题描述】:

我正在尝试分析各个公司为特定火车旅程提供的折扣,并相应地列出公司名称和折扣。

输入数据集如下图所示:

我想要做的基本上是转置数据集并创建折扣大于 0 的以下输出并返回公司/列名称。 (见下文)

我尝试使用以下公式:

{=INDEX(A1:F7,SMALL(IF(AND(A2:A7=H2,B2:F2>0),COLUMNS(B1:F1)),COLUMNS(1:1))-1,3)} 

- 这似乎总是产生#NUM!错误

=INDEX(A1:F7, MATCH(H2,A2:A7,0),MATCH(I2,B1:F1,0))
  • 这只有在我列出了所有可能的路线并且每个公司都有一条路线时才有效,即使折扣为 0。鉴于我有 40 家公司和 15000 多条路线,我真的不想创建一长串 LONPAR 列表,B 列中的每家公司,后跟 LONFRA 等。

有什么我遗漏的,或者任何指导,或您可以提供帮助我获得解决方案的功能吗?

【问题讨论】:

    标签: arrays excel excel-formula lookup-tables


    【解决方案1】:

    以下代码似乎相当有效地拆分了您的火车折扣表。

    Option Explicit
    
    Sub qwewretq()
        Dim a As Long, b As Long, h As Long, aDISs As Variant
    
        With Worksheets("Sheet10")
            With .Cells(1, 1).CurrentRegion
                aDISs = .Cells.Value2
                h = .Columns.Count + 2
            End With
            .Cells(1, h).CurrentRegion.ClearContents
            .Cells(1, h).Resize(1, 3) = Array("route", "company", "discount")
            For a = 2 To UBound(aDISs, 1)
                For b = 2 To UBound(aDISs, 2)
                    If aDISs(a, b) > 0 Then
                        If IsError(Application.Match(aDISs(a, 1), .Columns(h), 0)) Then
                            .Cells(Rows.Count, h + 1).End(xlUp).Offset(1, -1) = aDISs(a, 1)
                        End If
                        .Cells(Rows.Count, h + 1).End(xlUp).Offset(1, 0).Resize(1, 2) = _
                            Array(aDISs(1, b), aDISs(a, b))
                    End If
                Next b
            Next a
        End With
    End Sub
    

    有些区域可以进行调整以提高效率,尤其是应用程序环境设置,例如 .ScreenUpdating property.EnableEvents property。对于非常大的数据块,构建目标数组并将解析的数据转储回工作表 en masse 也可能有所帮助。您应该能够相当轻松地格式化目标表的百分比和任何视觉美化。

    【讨论】:

    • 非常感谢,这段代码非常棒。只是在此基础上,如果我现在想填写路线列,以删除空格,我会沿着路线列向下,如果该行不为空白,则向下移动到下一行,如果该行为空白,复制上一行的值。这是正确的说服逻辑吗?我找不到任何内置函数(除了闪存填充)来执行此操作,直到最后一行。
    • this 快​​速填空方法。当然,您可以只修改上面提供的代码,以便在构建原始表时填写它们。
    猜你喜欢
    • 2021-11-28
    • 1970-01-01
    • 2019-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-02
    • 2019-04-24
    • 2020-08-29
    相关资源
    最近更新 更多