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

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

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

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

Google Apps Script

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

Slack

Slackは、Tiny Speckという企業からリリースされたコミュニケーションツールです。GoogleDriveやGitHubなど、さまざまな外部サービスと連携することができます。

Q&A

解決済

2回答

3346閲覧

統合しているセルの値の取得方法について

dell_0

総合スコア25

Google スプレッドシート

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

Google Apps Script

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

Slack

Slackは、Tiny Speckという企業からリリースされたコミュニケーションツールです。GoogleDriveやGitHubなど、さまざまな外部サービスと連携することができます。

0グッド

0クリップ

投稿2020/10/16 04:47

編集2020/10/19 03:45

下記のようなスプレッドシートがあり、表にある日付の5日前になったら、隣のセルの値を取得し、slackに通知したのですが、うまくいきません。

統合している値を取得するにはどのようにしたらよろしいでしょうか?

宜しくお願い致します。

function alertContract() { var mySheet = SpreadsheetApp.openById('xxxxxxxxx').getSheetByName('xxxxx'); //スプレッドシートを取得 var lastRow = mySheet.getLastRow(); //スプレッドシートの最終行を取得 var today = new Date(); //今日の日付を取得 var today_format = Utilities.formatDate(today, "JST", "yyyy/MM/dd"); /* 契約見直日まで5日切っていたらSlack投稿 */ for (var i = 2; i <= lastRow; i++) { var jname = mySheet.getRange(i, 3).getValue(); var dateHi = new Date(mySheet.getRange(i, 4).getValue()); var strLimit_format = Utilities.formatDate(dateHi, "JST", "yyyy/MM/dd"); var strLimit_30Date = new Date(dateHi.getFullYear(), dateHi.getMonth(), dateHi.getDate() - 5); //期限の5日前 var strLimit_30Date_format = Utilities.formatDate(strLimit_30Date,"JST","yyyy/MM/dd"); if ( today_format == strLimit_30Date_format ) { //5日前に告知 //通知文を作成 Logger.log(today_format); var strText = "jname + "の期限です。"; //Slackへ投稿 postSlack(strText); } } } function postSlack(strText) { //payload var payload = { channel: "xxxxxxxx", 'text' : strText, 'link_names' : "1", // }; var options = { 'method' : 'post' , 'contentType' : 'application/json' , 'payload' : JSON.stringify(payload), }; // Webhook URL へPOSTする var url = 'https://xxxxxxxxxxxxxxxxxxx';  //「2.SlackのIncoming WebHooksの登録しよう」で払い出したURLを指定 UrlFetchApp.fetch(url,options); }

![イメージ説明]

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

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

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

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

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

sawa

2020/10/19 02:26

内容を見る限り Excelでなく Googleスプレッドシートの質問 なので、Excelタグを外して、Googleスプレッドシート のタグに差し替えください。
dell_0

2020/10/19 03:45

ご指摘ありがとうございます。 修正いたしました。 宜しくお願い致します。
guest

回答2

0

ベストアンサー

結合セルは 実質的には左上のセル以外は 空欄とみなされてしまうので、解決策としては ifを使って 空欄じゃなければ セルの値をゲット(jname)を更新 としてあげると良いと思います。

//このforループの最初のとこだけ 変更 for (var i = 2; i <= lastRow; i++) {      if(mySheet.getRange(i, 3).getValue() != ""){     var jname =mySheet.getRange(i, 3).getValue();        //falseの時は前のループ時にセットされた jnameが使われる    } var dateHi = new Date(mySheet.getRange(i, 4).getValue());

結合セルがデータ的によくないのは、まさにこういったことが発生するからで、データベースの考え方だと 行単位で 一つの関連データの塊(レコード)として扱うことが多いのですが、人間の目では結合されたセルの右側の日付が 全て test1に紐づくって簡単に理解できても、コンピュータには理解できなくて空欄だと判断されてしまうのです。

投稿2020/10/19 04:16

sawa

総合スコア3002

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

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

dell_0

2020/10/20 01:17

ありがとうございます。 問題解決できました。 大変勉強になりました。ベストアンサーとさせていただきます。
guest

0

統合されたセルはもっとも左上のセルにしか情報が含まれません。
セルの統合をやめて全セルに同じ値を入れるか、それを関数で実装した計算用シートを作成します。
GAS内で処理を書くこともできますが、無駄にGASでやる必要もないと思いますし、そもそもエクセルやスプレッドシートでセルの結合はデータ分析の観点からするべきではありません。

あと、質問時、ソースコードは ``` で囲いましょう。

投稿2020/10/16 08:09

Hogeike

総合スコア293

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

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

dell_0

2020/10/19 02:13

ありがとうございます。 大変勉強になりました。 すみません、自分のリテラシーが足りないため、スプレッドシートでセルの結合はデータ分析の観点からするべきではないという理由がわかりません。ご教授頂けたら幸いです。 宜しくお願いい致します。
Hogeike

2020/10/19 07:44

> 理由がわかりません 今回のようなことがあるからですね。 データベースのレコードのように、1行にそのレコードの特性を判断できる情報がまとまっていないと、集計できません。 毎回毎回結合されたセルの一番上を見るということもできますが、関数やGASの実装が煩雑になるだけでなく、空欄と結合の区別がつかなくなります。 見やすい表を作るためなら結合することもあるとは思いますが、集計という意味で、一般的にセルの結合は嫌われています。 どうしても見やすい表にしたいなら、計算用のシートと表示用のシートを作ると良いと思います。
Hogeike

2020/10/19 07:45

あと、ソートができなくなるなど、通常の集計で使用する機能が使えなくなってしまうという点も挙げられます。
dell_0

2020/10/19 10:04

コメントありがとうございます。 大変勉強になりました。 今回は集計用ではない既存の表に、gasで通知を行うという依頼でしたので、今後はHogeike様のおっしゃる通り、見る表と集計表は区別して、運用を行おうと思います。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問