web-dev-qa-db-ja.com

IMPORTRANGE、SUMIFS、QUERYを数値とテキストを含むセルと組み合わせる

GoogleスプレッドシートでSUMIFSImportRangeを組み合わせると問題が発生します。 QUERYでネストすることを提案する回答が見つかりました。しかし、問題は私の基準の1つが非数値であることです。

スプレッドシート2の数式:

_=query(ImportRange("https://docs.google.com/spreadsheets/d/1p_F-1tyYhlHfjjE2151T52FvcwGrtKUvB12WSJR0WRT",
 "inquiries.app date.bonus!a4:u"), 
 "select sum (Col13) where (Col13='<>' 
  and Col14 >= date'"&TEXT(today()-30, "yyyy-mm-dd")&"') label sum (Col13) ''")`
_
  • ImportRangeを使用してスプレッドシート1からデータをインポートします
  • 列Mの値の合計(スプレッドシート1)
  • m列が空白でない場合N列の日付が過去1か月以内の場合(スプレッドシート1)

エラーメッセージが表示されます。

_#VALUE!_関数QUERYパラメータ2のクエリ文字列を解析できません:AVG_SUM_ONLY_NUMERIC

ご参考までに
列Mの値は

  • ブランク
  • テキスト(はい、NA)

列Nの値は

  • ブランク
  • テキスト(NA)
  • 日付

クエリ条件1を「Col 13 is number」にするにはどうすればよいですか?

オンラインで見つけたすべての回答から、QUERYは非数値データ/混合データは好きではありません。一部のソリューションではArrayFormulaまたはFILTERの使用を提案しましたが、これらは同じスプレッドシート内のデータを使用していました(ImportRangeではありませんでした。

他のソリューションは、私の式にネストされたIF(ISNUMBER))を使用しました。また、列の形式を「プレーンテキスト」に変更してみましたが、機能しませんでした。

私が試したいくつかの式:

_=query(isnumber(ImportRange("https://docs.google.com/spreadsheets/d/1p_F-1tyYhlHfjjE2151T52FvcwGrtKUvB12WSJR0WRT",
"inquiries.app date.bonus!a4:u")),
"select Sum (Col13) where (Col13)='<>' 
 and (Col14)>=date'"&TEXT(today()-30,"yyyy-mm-dd")&"' label sum (Col13) ''")`
_

値エラー:関数QUERYパラメーター2のクエリ文字列を解析できません:NO_COLUMN:Col13

_=query(ImportRange("https://docs.google.com/spreadsheets/d/1p_F-1tyYhlHfjjE2151T52FvcwGrtKUvB12WSJR0WRT",
 "inquiries.app date.bonus!a4:u"), 
 "select,sum (Col13) where (Col13)='<>' 
  and Col14= date'"&TEXT(today()-30, "yyyy-mm-dd")&"' label sum (Col13) ''")`
_

値のエラー:関数QUERYパラメーター2のクエリ文字列を解析できません:PARSE_ERROR:1行目、7列目に「」、「」、「」が見つかりました:「true」...「false」...のいずれかが予期されていましたdate "..." timeofday "..." datetime "..." timestamp "..." min "..." max "..." avg "..." count "..." sum " ... "no_values" ... "no_format" ... "is" ... "null" ... "year" ... "month" ... "day" ... "hour" .. 。 "分" ... "秒" ... "ミリ秒" ... "with" ... "contains" ... "starts" ... "ends" ... "matches" ... "のような」...「今」...「dateDiff」...「quarter」...「lower」...「upper」...「dayOfWeek」...「toDate」... ... ... ... ... ... "(" ... "*" ... "-" ...


ソースデータに新しい列を追加せずに数式を機能させる方法はありますか? ISNUMBERまたはArrayFormulaを使用できるかどうか疑問に思っています。


編集

以下にサンプルシートをいくつか示します。 Sheet 2(contains formula)Sheet 1(source data)

要約すると、私の問題はQUERYで、列M(列13)の数値を合計していません。 QUERYで私は試してみました:

  • _<>_および_<>""_(空白ではない)
  • _Col13 is not null_
  • _Col13>0_
1
que syrah sarah
=ARRAYFORMULA(SUM(IFERROR(QUERY(IFERROR(IMPORTRANGE(
 "1HrEGCH-MCfeGh952VkpONRfSoLbZVLir5BNgFWK0PH8", "inquiries.app date.bonus!A5:O")*1),
 "select Col13 
  where Col13 is not null 
    and Col14 >="&DATEVALUE(TODAY()-30), 0))))

0

スプレッドシートのデモ

1
user0

問題は、ソーススプレッドシートの_Column M_および_Column N_にテキストと数値/日付が含まれていることです。空白のセルは問題を引き起こしません。

両方の列で、インポートされた値をQUERYに渡す前にテキスト値を削除する必要があります。

すべての仕事を1つの数式で行うのは明らかに「エレガント」かもしれませんが、これによりスプレッドシートの理解、トラブルシューティング、保守が難しくなるため、少なくとも各タスクの実行方法を理解している間は、使用を避けてください「オールインワン式」アプローチ。

  • IMPORTRANGE式(=IMPORTRANGE(...))には1つのシートを使用します。次の手順では、この数式が_Sheet1_という名前のシートに追加されていることを前提としています。
  • 数式ではCol13とCol14のみを使用するため、QUERY の最初の引数として次のようなものを使用できます。
    • =ARRAYFORMULA({IF(ISNUMBER(Sheet1!M:M),Sheet1!M:M,),IF(ISNUMBER(Sheet1!N:N),Sheet1!N:N,)})。この数式が_Sheet2_という名前のシートに追加されたとします。
  • Sheet2!A:BをQUERYの最初の引数として使用しますが、_Col13_および_Col14_の代わりに、それぞれAおよびBを使用します。
1
Rubén