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

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

ただいまの
回答率

88.82%

判定が〇のセルを転記したい(エラー表示)

受付中

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 443
退会済みユーザー

退会済みユーザー

#前提・実現したいこと

GASで請求書を作成しています。
1)判定(J列)が〇かつ追加事項(O列)に記載があれば、
月(A列)・日(B列)・項目名(C列)・備考(D列)・追加事項(備考の1行下)に転記

2)判定(J列)が〇かつ追加事項(O列)が空欄であれば、
月(A列)・日(B列)・項目名(C列)・備考(D列)に転記

をしたいのですが、反映されずエラーができます。
どこを修正したらよいのでしょうか?お教えください。

A B C D J K L M N O
項目名 備考 判定 日付 項目名 備考 フラグ 追加事項
8 2 A商品 在庫あり 8月2日 A商品 在庫あり 先方確約済み
先方確約済み 8月3日 B商品Cabell 不明
8 3 B商品 不明 8月3日 A商品 在庫不明
8 4 C商品 在庫あり 8月4日 C商品 在庫あり
function 表示() {

//スプレッドシートAppを呼び出す
var ss = SpreadsheetApp.getActiveSpreadsheet();
//アクティブシートを取得する
var sheet = ss.getSheetByName("請求書");//data反映先
var range = sheet.getRange("A11:I90");

sheet.unhideRow(range);
sheet.getRange(11, 1, 34, 7).clearContent(); 

var range = sheet.getRange('J:O'); //J~O列に値を抜く
var LastRow = range.getLastRow();
var data = sheet.getRange(11, 1, LastRow, 6).getValues();
for (var i = 0; i <= data.length; i++){
  if(data[i][0] ==="〇"){//J列が〇だったら
    if(data[i][4]!==""){ //O列に文字列が入力されていたら
      sheet.getRange(i, 1).setValue(data[i][1]);//A列にK列を転記
      sheet.getRange(i, 2).setValue(data[i][1]);//B列にK列を転記
      sheet.getRange(i, 3).setValue(data[i][2]);//C列にL列を転記
      sheet.getRange(i, 4).setValue(data[i][3]);//D列にM列を転記
      sheet.getRange(i + 1, 4).setValue(data[i][4]);//D列(1つ下の行)にM列を転記
      }
    else{ //O列が空白なら
      sheet.getRange(i, 1).setValue(data[i][1]);//A列にK列を転記
      sheet.getRange(i, 2).setValue(data[i][1]);//B列にK列を転記
      sheet.getRange(i, 3).setValue(data[i][2]);//C列にL列を転記
      sheet.getRange(i, 4).setValue(data[i][3]);//D列にM列を転記
      }
    }
  }
} 

エラーメッセージ

TypeError: undefined からプロパティ「0」を読み取れません
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

0

エラー

//for (var i = 0; i <= data.length; i++){
  for (var i = 0; i < data.length; i++){


だと思いますが、転記ができない、はまた別な気がします。

やりたいのは、こういうことですかね?

function q205227() {

//スプレッドシートAppを呼び出す
    const ss = SpreadsheetApp.getActiveSpreadsheet();
//アクティブシートを取得する
    const sheet = ss.getSheetByName("請求書");//data反映先
    const areaA11I90 = sheet.getRange("A11:I90");

    sheet.unhideRow(areaA11I90);
    sheet.getRange(11, 1, 34, 7).clearContent();//Iは9だが?

    const areaJO = sheet.getRange('J:O'); //J~O列に値を抜く
    const LastRow = areaJO.getLastRow(); //これtホントにJ:Oの最終行取ってくれます?
    const data = sheet.getRange(11, 10/* Jは10 */, LastRow, 6).getValues().reduce(function(a,c){
        if(c[0] !== "〇") return a;
        var row1 = [c[1],c[1],c[2],c[3]];
        a.push(row1);
        if(c[5] && c[5] !== "") {
            var row2 = ["","","",c[5]];
            a.push(row2);
        }
        return a;
    },[]);
    sheet.getRange(11, 1, data.length, 4).setValues(data);
}

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/08/19 16:08

    いつも大変ありがとうございます。
    こちらの内容で反映されました。
    ただ、追加事項(O列)がすべて空欄の場合は備考の下にすべて【undefined】と表示されてしまいます。
    こちらを表示されないようにするにはどうしたら良いでしょうか?

    キャンセル

  • 2019/08/19 17:41

    それは、J列が○であるのに、O列が空白ということを意味してます?
    だとしたら仕様がかわってるんですが。
    そもそもどういうデータ状態かわかんないっすね。
    備考の下にすべて、というのもあいまいです。一応対策はいれときます。

    キャンセル

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

  • ただいまの回答率 88.82%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る