初めて自分の家と他人の家が違う、と意識した時

google apps scriptをスプレッドシートでマクロ代わりに使用しています。

スプレッドシートの内容全体を配列取り込みし、
for文で上のセルから検索文字列に合うものを別の配列に追加するスクリプトを書きたいのですが、

var sheet_values = sheet.getDataRange().getValues();
var arry = [];
var s = '検索文字列';

for( i = 0 ; i < lastRow ; i++){
var v = sheet_values[i][15]; //15は検索したい列です
if( v === s ) {
arry.push(i);
}
}

のように記述すると
「TypeError: undefined からプロパティ「15」を読み取れません。」
というエラーメッセージが出ます。

var clmn_values = sheet.getDataRange(1,16,lastRow,1).getValues();
var arry = [];
var s = '検索文字列';

for( i = 0 ; i < lastRow ; i++){
var v = clmn_values[i]; //15は検索したい列です
if( v === s ) {
arry.push(i);
}
}

以上のように検索列単体で取り込みしてfor文にする場合このエラーメッセージは出ないのですが、
列で取り込むものがかなり多くなってしまうのでできれば全体から検証したいです。

何卒お答えいただけますと幸いです。よろしくお願いします。

A 回答 (1件)

こんにちは



google apps scriptは存じませんので、ご質問文を見た範囲での回答となっており、はずしているかも知れませんが・・・

>「TypeError: undefined からプロパティ「15」を読み取れません。」
とのことなので、 sheet_values[i]がundefinedかあるいは読み取れないなどと推測できます。

データを読み込んで解析するのに、いきなり「lastRow」や「15」を指定して読み出そうとなさっていますが、元データに空の行があったり、空のセルがある場合に、そもそも、どのような値が返されてくる仕様になっているのでしょうか?
通常で考えれば、(どこか他で決めている?)lastRowではなく、sheet_values.length等を用いてループするのが妥当ではないかと思いますが…

googleのリファレンスで見てみると、データサイズは当該配列のサイズを参照してループしていますし、個々のセルの値についても存在をチェックして処理を行うようにしているようです。
https://developers.google.com/apps-script/refere …
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます!

ご回答いただいた通り、空のセルを参照した場合に返す値を設定していませんでした。
lastRowで記述していたことで、配列にない位置を指定してしまいこのエラーが出ていたようです。
lengthにして解決しました!ありがとうございます。

お礼日時:2016/06/09 11:38

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報