質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Q&A

解決済

1回答

649閲覧

数式をfor構文に組み込み、QUERYの展開結果だけを取得する方法

0000a

総合スコア18

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

0グッド

0クリップ

投稿2021/10/03 03:20

編集2021/10/07 03:01
```function myFunctionXX() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getSheetByName("展開"); const lastRow = sheet.getLastRow(); for(let i = 2; i <= lastRow; i++) { console.log(sheet.getRange(i, 1).getValue()); sheet.getRange(i, 4).setValue(`= IF(isblank(A5),"", IF(not(iferror(match(A5,$A$2:A4,0))),1, IF(A5=A4,D4, IF(countblank(indirect("A"&Query(transpose(ARRAYFORMULA(QUERY({$A$2:A4,row($A$2:A4)},"select max(Col2) where Col1=date '"& TEXT(A5,"YYYY-MM-DD")&"'"))),"select Col2")&":"&address(row(A5),column(A5),4)))=0,value(INDIRECT("D"&Arrayformula(Query(transpose(QUERY({$A$2:A4,row($A$2:A4)},"select max(Col2) where Col1=date '"& TEXT(A5,"YYYY-MM-DD")&"'")),"select Col2")))),value(INDIRECT("D"&Arrayformula(Query(transpose(QUERY({$A$2:A4,row($A$2:A4)},"select max(Col2) where Col1=date '"& TEXT(A5,"YYYY-MM-DD")&"'")),"select Col2"))))+1)))) +iferror( IF(isblank(A5),"",Query(transpose(Query({ indirect("'日記帳'!A1:A"&MAX(MATCH(MAX('日記帳'!A:A)+1,'日記帳'!A:A,1),MATCH("",'日記帳'!A:A,-1))), QUERY({"No";arrayformula(value(Query(split( indirect("'日記帳'!C1:C"&MAX(MATCH(MAX('日記帳'!A:A)+1,'日記帳'!A:A,1),MATCH("",'日記帳'!A:A,-1))) ,"."),"select Col3")))})},"select max(Col2) where Col1=date '"& TEXT(A5,"YYYY-MM-DD")&"'")),"select Col2")),1)`); }}

こちらで、展開シートの(1,4)セルを起点として展開されると思いますが、この結果の数字だけを取得する方法をお教えいただけますでしょうか?
(現状ではD列に数式がうまっているから展開されておりますが、その表を適宜修正して利用したいため)
また、現状ですとA5を起点にした計算結果のみが反映されるのですが、for構文を適用した場合のように、iに応じた結果を入手するにはどう変えればよろしいでしょうか?

どなたかどうぞよろしくお願い致します

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sawa

2021/10/06 00:09

=query('B'!A5:D) なら、特に抽出に際して条件等がないので単純に getValuesとsetVlauesの記述に変えてしまえば良いんじゃないでしょうか?
0000a

2021/10/06 11:02 編集

ご返信ありがとうございます。実際はもっと複雑な数式が入っております。。 コード初心者のため具体的にどう書き換えれば良いのかまで、お教えいただけますでしょうか? お手数ですが、ご教示のほどよろしくお願い致します。
sawa

2021/10/06 10:40 編集

なるほど。とりあえずアドバイスとしては、まずは正確で具体的なな情報を提示した質問をしましょう。あと、Gooogle Apps Scriptのタグつけましょう。 回答しても、いや実はリアルは違うんですってなると二度手間です。あと、追加の質問をやめましょう。掲載された質問が解決したら、まずはご自身で理解し、その質問を解決済みとしてクローズ。その後エラーが出たら、まずは自分で検索、検証、試行錯誤した上で、どうしても解決できない際に別質問を。 余計なお世話かもしれませんが、過去の質問で上記が満たされてないのを繰り返してると、回答しても面倒なんで回答がつかなくなる傾向があります。(そもそもgas はまだまだvbaやjsに比べればニッチなんで回答してくれる人も少ないですし) お金もらって仕事として対応してるなら別ですが、ぶっちゃけ回答者なんてのは暇つぶしか、自分のスキルアップのためか、承認欲求を満たすためか、あわよくばマネタイズ狙いって感じの人達ですから。
0000a

2021/10/06 11:10

内容を改めました、恐れ入ります、質問についてご不明点がございましたらお問い合わせください。どうぞよろしくお願い致します。
sawa

2021/10/07 00:38

Google APIじゃなくて Gooogle Apps Script です。 あとコードは 他の質問者と同じように コードボタン押して記入をしましょう。
papinianus

2021/10/08 20:10

> あわよくばマネタイズ ばれてた。全然もうける方法がわからない…
guest

回答1

0

ベストアンサー

質問の修正ありがとうございました。
適切なタグが付いていて、コードが見やすいだけでも正確な回答が得られる確率が上がるかと思います。

あまりに長い数式なんで、確かにこれ見ると回答躊躇しますね。簡略化して質問したくなるのもわかります。
本当にこのような式が必要なのかは置いといて、とりあえず式が正しく動くものと仮定して回答します。

for構文を適用した場合のように、iに応じた結果を入手

数式をバッククォートで囲ってるので、その中で 変数を扱うことが出来ます。
たとえば式内のA5の箇所は 変数 iを使って iが2からスタートするので
A${i+3} とすることで A5、A6、A7 とループの中で変動していきます。

参考
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Template_literals

この結果の数字だけを取得

手動と同じ感覚で、
「一度式を貼って表示された結果を再度コピーして同じ場所に値を貼付け」
をGASでやるのが最も簡単です。

式が展開される範囲がわからないので具体的なコードは書けませんが、

forループ終了後に、
SpreadsheetApp.flush()
でシートを更新

そのご数式が展開される範囲を getRange で取得して
getValuesした計算結果(値)をsetValuesで。

投稿2021/10/07 04:18

編集2021/10/07 04:20
sawa

総合スコア3002

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0000a

2021/10/07 13:23

お忙しいところありがとうございました。参考になりました、こちらをもとになんとか改善できそうです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問