Googleスプレッドシートクエリで名前付き範囲を使用して、列参照を最新の状態に保つことはできますか?


9

Googleスプレッドシートを使用すると、クエリを作成できます。ただし、引用符で囲まれた列文字がある場合、列の順序が変更されても列文字は更新されません。

これらのクエリを作成して、列が追加または削除されるたびに更新する必要がないようにする方法はありますか?

この問題を解決するためにクエリで名前付き範囲を使用することは可能ですか?

次に例を示します。「F」の後に列を追加すると、列「G」が「H」にプッシュされ、式の意味が変わります。

= Query(B:J、 "select avg(J)group by G")

関連する質問

この質問は名前付き範囲の使用に焦点を当てているため、この質問は、列文字の代わりに列ヘッダーでクエリを使用することと同じではありません。

回答:


5

これは一種のトリッキーですが、ヘルパーRangeといくつかの連結で可能です。

なすべきこと:

  1. 名前付き範囲COLSを作成して、次のような列文字を保持します。

    A  
    B  
    C  
    D  
    E  
    ...
    

    図のように垂直に行います。

  2. 次のようにクエリ文字列を組み立てます。

    =QUERY( B:J, "SELECT AVG(" & INDEX(**COLS**, COLUMN(J1)) & ") GROUP BY " & INDEX(**COLS**, COLUMN(G1)) )
    

1
名前付き範囲は、垂直または水平の両方の形で機能します。
ルベン・

@Rubénはおそらく正しい。
Oneide '15年

3

これらのクエリを作成して、列が追加または削除されるたびに更新する必要がないようにする方法はありますか?

この問題を解決するためにクエリで名前付き範囲を使用することは可能ですか?

はい、組み込みの列ヘッダーの代わりに名前付き範囲を使用することもできますが、基本的な考え方はこれに対する他の回答と同じであり、このサイトの他の同様の質問が示唆しています:動的SQL文字列を作成するようにスプレッドシートを設定する必要があります

名前付き範囲にそれぞれ対応しているJとしましょう。GGradesClass


次のアプローチは、列が列AとZの間にある場合にのみ機能します。


CELL("address",Grades)戻り"$J:$J"ます。列参照MID(CELL("address",Grades),2,1)を取得するには、getを使用します"J"。最終的な式は

= QUERY(B:J、 "SELECT AVG("&
MID(CELL( "住所"、Grades)、2,1)&
")GROUP BY"&
MID(CELL( "住所"、クラス)、2,1))


次のアプローチはすべてのケースで機能します


COLUMN(Grades)整数(1、2、3などの形式の数)を返します。SQLステートメント引数を作成する式を簡略化するには、配列を使用してSQLにCOL1、COL2などの形式の列参照を使用させることをお勧めします表記({B:J})。最終的な式は

= QUERY({B:J}、 "SELECT AVG(Col"&COLUMN(Grades)-1& ")GROUP BY Col"&COLUMN(Class)-1)

デモスプレッドシート

参考文献

Googleスプレッドシートで配列を使用する-Googleドキュメントエディタヘルプ


1

範囲がのような2文字の列に移動されるとMID(CELL("address",Grades),2,1)失敗するため、ルーベンの答えはすべての場合の問題を解決しません。Grades$AA:$AA

その場合、式MID(CELL("address",Grades),2,2)が必要です。範囲にまたがる、または隣接する名前付き範囲の場合$Z:$AA、この式は問題になります。

この式REGEXEXTRACT( CELL("address", Grades), "\$([a-zA-Z]+)\$")は一般的な場合の問題を解決しますが、大きなスプレッドシート全体で使用した場合のCPU効率には強く疑問があります。


私の回答では2つのアプローチがありますが、この回答はそのうちの1つのみを批評します。2番目のアプローチは、すべてのケースで機能するはずです。
ルベン・

これは別のシートにある名前付き範囲では機能しないと思います。+2年後かどうか、これに対するより良い解決策があるかどうか...クエリ自体で
darn

0

私が出会ったこのページ infoinspired.comそれを行う1つの方法を説明することに。私は彼が与えた例とまったく同じようにそれをテストしました、そしてそれはうまくいきました。セットアップ:

      A        B        F                                     G
 1  names     Age   =left(address(row(B1),column(B1),4))   =QUERY(A:B,"Select "&Age)
 2  joey      32
 3  nicole    26
 4  sally     66

彼のF1の説明:ROW関数とCOLUMN関数を含むADDRESS数式は、B1のセルアドレスを返します。LEFT関数は、列見出しである最初の文字をそこから抽出します。

---セルF1をクリックし、[データ]> [名前付き範囲]メニューに移動して、範囲に「Age」と名前を付けます(引用符なし)。

これで、クエリを次のように作成できます。 =QUERY(A:B,"Select "&Age)

彼のページには、これからテストするより複雑な例がありますが、最初の例が機能することをお勧めします。

編集-これが他の人が答えを提案しているものとまったく同じである場合は、申し訳ありません。私はこの例をはっきりと見つけ、それを理解することができました。同じ質問で他の人を助けるかもしれないと思った。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.