0

Excel の SQL テーブルから最大 10 行を取得しています。複数の行がある場合もあれば、1 つの行しかない場合もあります。

結果は、配列数式を使用してセル範囲に表示されます。私の問題は、SQLクエリによって1行しか返されない場合、その行が範囲全体に垂直にコピーされることです。

これは、静的な名前付き範囲を使用した私の問題の簡略化された印刷画面です。


コピーされた 1 次元配列

その繰り返しはしたくない。これが私が達成したいことです:

ここに画像の説明を入力

何か案が?

編集

これは、私のセルの配列を生成するコードです:

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

SQL は、ワークブック内の名前付き範囲に対して SQL クエリを実行できるカスタム UDF 関数です。

私の問題に対して私が見つけたハックは、関数全体を名前付き範囲に入れてから =INDEX() を使用することでした。欠点は、コードへのアクセスや編集が困難になることです。

4

2 に答える 2

0

私はこのトリックに行きました:

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

このようにして、1 次元配列を下にコピーするときに、重複ではなく #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 に答える