🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Google Apps Script

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

Q&A

解決済

1回答

1892閲覧

GASで複数のセルと一致した値の右隣に「処理済み」を打ち込む

Gra_ntz

総合スコア4

Google Apps Script

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

1グッド

0クリップ

投稿2021/01/22 09:09

現在、スプレッドシートでマスタを管理するコードを書こうと思っております。
具体的には二つのシートがあり、片方が処理済み案件番号リストでもう一つがマスタとなります。
処理済み案件番号リストにある、複数の案件番号を一括でマスタの該当案件番号に「処理済み」と
入力したいと思っております。

ただ私は初心者で知識が乏しく
単体のセルで変数を宣言しそれに対しての処理する方法しか知らず、処理済み案件番号を一つ一つ
選んでやっている状態です。

現状の動作:
スプレッソシート…シートが二枚(処理済み案件番号リスト / マスタ)
処理済み案件番号リスト(以下:リスト)のカラムAに処理済み案件番号が記載してあり、
セルB1に「処理済み」と記載したい処理済み案件番号を記入している。
マスタのカラムAにすべての案件番号が記載されており、その中から処理済みのものの
右隣(カラムB)に「処理済み」と記載する。

発生している問題・エラーメッセージ

複数のセルの値に対し一括で「処理済み」と入力したい

該当のソースコード

Google

1function input_value(){ 2var mySS=SpreadsheetApp.getActiveSpreadsheet() 3var sh = mySS.getSheetByName("処理済み案件番号リスト"); 4var sh2 = mySS.getSheetByName("マスタ"); 5var cell = sh.getRange("B1") 6var key = cell.getValue(); 7var col = "A"; 8var row = get_row(key, col, sh2); 9sh2.getRange(row, 2).setValue("処理済み") 10} 11 12function get_row(key, col, sh2){ 13 var array = get_array(sh2, col); 14 var row = array.indexOf(key) + 1; 15 return row; 16} 17 18function get_array(sh2, col) { 19 var last_row = sh2.getLastRow(); 20 var range = sh2.getRange(col + "1:" + col + last_row) 21 var values = range.getValues(); 22 var array = []; 23 for(var i = 0; i < values.length; i++){ 24 array.push(values[i][0]); 25 } 26 return array; 27}

試したこと

getRangeメソッドで複数のセルのデータを二次元配列で取り、
要素を変数で宣言しようと思いましたが、それ以降の値の書き込みの
コードが思いつかず行き詰ってしまいました。
適切なコード(もしくは解決しうるメソッド)をインターネットで
検索し続けている状態です。なにとぞ教えていただけましたら幸いです。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

uuunaa1246👍を押しています

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

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

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

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

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

sawa

2021/01/23 06:03

処理済み案件番号 は、"処理済み案件番号リスト"シートのB列にずらっと記載されてるイメージでしょうか? あと、質問文のコードは(なにかを参考にして)自分で書かれたもので、内容は理解されてるということでよいですか?
Gra_ntz

2021/01/23 06:18

初めまして。処理済み案件番号はリストのA列にずらっと記載されているイメージです。(参照用の画像がなくすみません) コードは同じような動きをするコードをインターネット上に見つけ変数宣言の部分は私が書きました。内容も理解しております。
sawa

2021/01/23 06:22

回答ありがとうございます。理解できました。A列にずらっと並んでる中から現在は一つずつ B1に移してスクリプト実行してるってことですね。回答入れときますね。
guest

回答1

0

ベストアンサー

get_arrayの関数内でforのループ処理を使ってますが、それと同じ要領で input_value内の keyを範囲を選んで getValuesしてループ処理にしてあげるのが、一番現在のコードからの変更が少ないかと思います。

二次元配列を flat(1)で 一次元配列化してますが、これ無しでループ内で keyを key[0]としてあげても良いです。ループの書き方も forEachじゃなくて forの方がわかりやすければ、そっちでもいいです。

GAS

1function input_value(){ 2 var mySS=SpreadsheetApp.getActiveSpreadsheet() 3 var sh = mySS.getSheetByName("処理済み案件番号リスト"); 4 var sh2 = mySS.getSheetByName("マスタ"); 5 var keys = sh.getRange("A1:A"+ sh.getLastRow()).getValues().flat(1); 6 var col = "A"; 7 keys.forEach(key => sh2.getRange(get_row(key, col, sh2), 2).setValue("処理済み")); 8} 9

投稿2021/01/23 06:29

sawa

総合スコア3002

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

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

Gra_ntz

2021/01/23 07:01

ありがとうございました。ばっちりできました。forEach文、非常に便利なので今後たくさん使っていきたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問