みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

JavaScript、;がない?

Google Apps Scriptでプログラムを書きました。

すると、「ステートメントの前に;がありまあせん。(行6、ファイル「コード」)」と表示されます。

プログラムは、以下のとおりで、6行目とは、「If」文のところです。

しかし、私には、そのようなエラーが出ている理由が分からないのですが、どなかたお教えください。

function myFunction() {
var s = SpreadsheetApp.GetActiveSheet();
var l = s.getMaxRows();
for (var i = 1; i < l; i = i + 1) {
for (var j = 2; j <= l; j = j + 1) {
If (s.getRange(i, 1).getValue == s.getRange(j, 1).getValue && s.getRange(i, 2).getValue == s.getRange(j, 2).getValue) {
s.getRange(j, 1: j, 2).setBackgroundColor('aqua');
}
}
}
}

投稿日時 - 2016-07-28 21:23:10

QNo.9207950

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(6)

ANo.6

6行目でエラーが出たと言うことは、そこにある処理(If文の処理)でエラーが出た事を意味している訳ですから、If文全体(6~8行)を疑ってかかる。

全く別の行がおかしくてエラーが出ることは、プログラムでは日常茶飯事です。

投稿日時 - 2016-07-29 12:51:36

お礼

ありがとうございます。

function myFunction() {
var s = SpreadsheetApp.GetActiveSheet();
var l = s.getMaxRows();
for (var i = 1; i < l; i = i + 1) {
for (var j = i + 1; j <= l; j = j + 1) {
If (s.getRange(i, 1).getValue == s.getRange(j, 1).getValue && s.getRange(i, 2).getValue == s.getRange(j, 2).getValue) {
s.getRange(j, 1).setBackgroundColor('aqua');
s.getRange(j, 2).setBackgroundColor('aqua');
}
}
}
}

と直しましたが、やはり、同じところで同じエラーがでます。

投稿日時 - 2016-07-29 14:12:39

ANo.5

>「;」のエラー表示については、どうでしょうか?

それについては回答No.1さんの指摘されたとおりでしょう。
回答No.2に書いたとおり、書かれたプログラムを機械側から解釈すると、「1: j」と言うパラメータ記述を取り出すことになり、これは構文エラーとなります。
そのエラーが、6行目から始まるif文付近にある、と言う指摘になったんだと思います。

指摘された行自体にエラーが無いというのは、プログラミング言語で非常によくあることです。
「6行目」と言われたら、その前後で間違っていないか見る、場合によっては数十行も離れた位置にエラーが見つかることがある。
「; が無い」と言われても、それは原因が「;」の有無では無いこともある。(ずっと前の方の「"」閉じ忘れだったり、うっかり閉じかっこを1つ忘れただけだったり)

まあ、機械の方が単純バカすぎて、融通がきかないってことですから。
「わかるように書いてくんないと実行できません(泣)」と音を上げてるのがエラー表示なわけなんで、人間側が慣れて(合わせて)やんないといけません…。

投稿日時 - 2016-07-29 09:36:49

お礼

ありがとうございます。

function myFunction() {
var s = SpreadsheetApp.GetActiveSheet();
var l = s.getMaxRows();
for (var i = 1; i < l; i = i + 1) {
for (var j = i + 1; j <= l; j = j + 1) {
If (s.getRange(i, 1).getValue == s.getRange(j, 1).getValue && s.getRange(i, 2).getValue == s.getRange(j, 2).getValue) {
s.getRange(j, 1).setBackgroundColor('aqua');
s.getRange(j, 2).setBackgroundColor('aqua');
}
}
}
}

と直しましたが、やはり、同じところで同じエラーがでます。

投稿日時 - 2016-07-29 14:12:35

ANo.4

;がないと言うことは、本当書き忘れているか、式の構文が間違っていたり、データに意図しない値が入り構文的におかしくなって、;が無視もしくは増える場合なので、パッと見書き忘れが無いようなら、構文を疑うのがセオリーです。
それで構文にも間違いがないなら、読み込まれるデータに難あり。

「:」があったことで、それ以降がラベルとして認識、結果「;が無い」になっているのでは?

投稿日時 - 2016-07-29 07:49:29

お礼

プログラムを見て頂いて分かるように、「:」(コロン)は、最後の所で、範囲指定に使用していますが、エラーはその前の6行目(「if」文のところ)で出ています。

それ以外に、「:」(コロン)は、使っておりません。

質問したプログラムが、今回書いたプログラムのすべてですので、お気づきの点がありましたら、また、よろしくお願い致します。

投稿日時 - 2016-07-29 08:17:27

ANo.3

訂正

getRange(セル1縦,セル1横,セルの数縦,セルの数横)

投稿日時 - 2016-07-28 23:02:32

お礼

ご指摘、ありがとうございます。

ただ、「;」がない、というエラー表示についての質問ですので、それに対しては、どのようにお考えでしょうか?

投稿日時 - 2016-07-29 07:06:10

ANo.2

ここの部分がまずいんじゃないでしょうか
>s.getRange(j, 1: j, 2)

たぶんあなたの考えとしては「j,1」から「j,2」の範囲指定と言うつもりでしょうけど、
言語インタプリタからその命令を解釈すると
『「j」と「1:j」と「2」の範囲(Range)!?』
というおかしなことになっている気がします。

>セル(Range)オブジェクトを取得する
http://nevernoteit1419.blogspot.jp/2012/01/range.html

こちらのサンプルによると、「j,1」から「j,2」の範囲と言うのは
getRange(j, 1, 1, 2) …すなわち「j,1」から1行2列、
と記述すれば良いでしょうか。

投稿日時 - 2016-07-28 22:56:50

お礼

ご指摘、ありがとうございます。

「;」のエラー表示については、どうでしょうか?

投稿日時 - 2016-07-29 07:04:53

ANo.1

Google App Scriptは使ったことがないのでよく分かりませんが、パッと見で式の中に「:」があるのがおかしいのでは?
JavaScriptでは「:」はラベルか三項演算子なので。


リファレンスサイトの解説を読むと、
========================
objRange = objSheet.getRange("B1") //セルB1を取得
objRange = objSheet.getRange(2, 1) //セルA2を取得
objRange = objSheet.getRange(4, 3, 3) //範囲C4:C6を取得
objRange = objSheet.getRange(6, 5, 2, 4) //範囲E6:H7を取得
========================
とあるので、範囲指定だと

getRange(セル1縦,セル1横,セル2縦,セル2横)

になると思う。なので、

s.getRange(j, 1: j, 2).setBackgroundColor('aqua');

s.getRange(j,1, j,2).setBackgroundColor('aqua');

っとすれば良いのかな?

でもこれ、iの2巡目で同じセルを等価比較するけど良いの?
i=2になったとき、jも初期値2で、

s.getRange(2,1)==s.getRange(2,1) && s.getRange(2,2)==s.getRange(2,2)

になるけど・・・

投稿日時 - 2016-07-28 22:53:39

お礼

ご指摘、ありがとうござます。

最初に組んだときは、「j = i + 1」としていたのですが、うっかりしていました。

それから、式の中に「:」はないと思うのですが。

どの場所でしょうか?

私は、「:」(コロン)ではなく、「;」セミコロンしか使っていないと思うのですが。

ありがとうございました。

投稿日時 - 2016-07-29 07:03:19

あなたにオススメの質問