1

同じ Googleワークブック内のシートの QUERY で、Col# 形式の列名を置換できるスクリプトを使用しましたが、IMPORTRANGE を使用して別の Google スプレッドシートから QUERY を呼び出すと、次のエラーが発生します。

範囲が見つかりません (11 行目、ファイル「SQLfunction」)

私の呼び出しセルは次のようになります。

=QUERY(
  IMPORTRANGE("long-hairy-key","MASTER!A:BN"),
  IMPORTRANGE("long-hairy-key",SQL("MASTER!A:BN",STATS!D33,true)),
  1
 )

STATS!D33 は次のとおりです。

select TRACT,PARID,LINE,OWN1,T_STATUS,ExhibitDate,FEET2,NewEase,TWSacres,ExistEase,PrevDistTWS,ATWSacres,ARdistance,StagingArea,Damages,UpdateReason,ACQ_STATUS where Col51 <>'' ORDER BY LINE ASC, TRACT ASC Label OWN1 'Landowner'

SQL 関数はhereからです。

IMPORTRANGEに対応するためにスクリプトを調整する方法を誰かが推奨できますか?

4

2 に答える 2

0

参照された SQL() カスタム関数は、外部スプレッドシートにアクセスできません。SQL() カスタム関数を調整して、外部スプレッドシートにアクセスできるようにするか、数式を再設計する必要があります。

数式を再設計する場合、1 つの方法は、外部データのインポートを「メインの数式」から移動することです。これをする、

  1. まず、外部範囲を取得します。新しいシートを追加し (その名前が であると仮定しますSheet1)、次の数式を A1 に追加します=IMPORTRANGE("long-hairy-key","MASTER!A:BN")
  2. 次に、「主な式」を次のような別のものに置き換えます。
=クエリ(
   Shee1!A:BN,
   SQL("Sheet1!A:BN",STATS!D33,true)),
   1
 )
于 2016-06-07T23:36:12.727 に答える
0

数式を使用して sql ステートメントを生成できます。

ステップ1。ヘッダーのみを取得するには、importrange を使用します。

次の数式を Sheet1 A1 に貼り付けます。

=transpose(IMPORTRANGE("long-hairy-key","MASTER!A1:BN1"))

フィールド名の垂直リストを作成するには、データを転置する必要があります。

ステップ2。列番号を追加します。

この数式を B1 に貼り付けます。

=ARRAYFORMULA(ROW(OFFSET(A1,,,counta(A:A))))

このステップでは、次のようなテーブルを取得します。

  A               B
1 FieldName1      1
2 FieldName2      2
3 FieldName3      3
4 FieldName4      4
5 FieldName5      5

Step3. SQL ステートメントを結合します。

列 C を使用して、クエリで選択する列を示します。

  A               B    C
1 FieldName1      1    1
2 FieldName2      2
3 FieldName3      3    1
4 FieldName4      4
5 FieldName5      5    1

フリー セル (F1) で次の式を使用します。

="select Col"&JOIN(", Col",FILTER(B:B,C:C=1))

私の場合、この式は string を与え、select Col1, Col3, Col5これはクエリ式で使用できます:

=query(IMPORTRANGE("long-hairy-key","MASTER!A:BN"), F1)

追加の列を使用して、SQL をよりスマートにしたり、句を追加したりしwhereます。order bylabel


アップデート

したがって、この段階的な解決策では、列の再配置に関する問題は解決されません。

トリックは、列名リストを使用して値として保存することです。

  1. ステップ 1 の式を貼り付けます。=transpose(IMPORTRANGE("long-hairy-key","MASTER!A1:BN1"))
  2. それをコピーする→スペースを貼り付ける→値

次に、現在の最初の番号のリストを作成するために、手順 1 と 2 を実行する必要があります。

そして、実際には 2 つのテーブルができます。最初のものは、ステップ 1 とステップ 2 の式によって生成された実際のフィールド リストとフィールド番号を保持します。ここにありTable1ます:

  A               B
1 FieldName1      1
2 FieldName2      2
3 FieldName3      3
4 FieldName4      4
5 FieldName5      5

2 番目のテーブルには SQL 設定が含まれます。こちらTable2です::

  A               B    C
1 FieldName1      1    1
2 FieldName3      3
3 FieldName2      2    1
4 FieldName4      4
5 FieldName5      5    1

その中のフィールド名は、値として入力する必要があります。列 B にはvlookup関数が含まれます。

= vlookup(A1, table1!A:B, 2, 0)

またはさらにArrayFormula

= arrayformula(vlookup(offset(A1,,,counta(A1:A)), table1!A:B, 2, 0))

開始する必要があるのはそれだけです。次に、クエリをよりスマートにします。

于 2016-06-08T06:33:16.973 に答える