0

我正在从 Excel 中的 SQL 表中检索 10 个最大的行。有时不止一排,有时只有一排。

结果显示在具有数组公式的单元格区域中。我的问题是,当 SQL 查询只返回一行时,该行会在该范围内垂直复制。

这是我使用静态命名范围的问题的简化打印屏幕:


复制的一维数组

我不希望重复发生。这就是我想要实现的目标:

在此处输入图像描述

任何想法?

编辑

这是生成我的单元格数组的代码:

=SQL("SELECT IT_Project_Name, SUM(Oct), SUM(YTD)
      FROM SD_Source.sdSourceCells
      GROUP BY IT_Project_Name
      ORDER BY SUM(Oct) DESC")

SQL 是一个自定义 UDF 函数,它允许我对工作簿中的命名范围执行 SQL 查询。

我发现我的问题的一个技巧是将整个函数放入一个命名范围,然后使用 =INDEX()。缺点是代码变得难以访问/编辑。

4

2 回答 2

0

我采用了这个技巧:

{=INDEX(singleABC;ROW();COLUMN())}

这样,当我复制一维数组时,我会得到 #REF 而不是重复项。

感谢您的回答,非常感谢。

于 2013-11-15T12:31:17.613 回答
0

尝试这个:

用法:{=Adjust(singleABC)}

Public Function Adjust(rng As Range)
    Dim c, r, rD, cD, rS, cS, arr, tmp

    rD = Application.Caller.Rows.Count
    cD = Application.Caller.Columns.Count

    rS = rng.Rows.Count
    cS = rng.Columns.Count

    ReDim arr(1 To rD, 1 To cD)

    For r = 1 To rD
    For c = 1 To cD
        If r <= rS And c <= cS Then
            tmp = rng.Cells(r, c).Value
            arr(r, c) = IIf(Len(tmp) > 0, tmp, "")
        Else
            arr(r, c) = CVErr(xlErrNA)
        End If
    Next c
    Next r

    Adjust = arr
End Function
于 2013-11-14T19:43:57.903 回答