ご訪問ありがとうございます。
Googleシートマスターのひろしです。
前回
【初めてのGAS 2.】データの型、数値と文字列の連結(const,let,varの違い)
シート名を指定して値を取得する方法
これを知ることであなたは、
GASを使用して、指定したシートのセルを取得したり設定する方法がわかります。
逆に、知らないと
なんとなく、現在のシートから値を取得できるように
なったものの、シートを指定できないという
『もどかしい状態』が続きます。
なので、サクッとマスターして
と「ズバッ」と答えてあげてください。
動画はこちら
スクリプトはこちら
function getnamefromid() {
const ss = SpreadsheetApp.getActiveSpreadsheet()
const sh = ss.getActiveSheet()
const shmst = ss.getSheetByName("マスタ")
let chkvalue = sh.getRange(11, 3).getValue()
console.log("チェックする値 " + chkvalue)
const MASTER_ID = 1 //IDの列
const MASTER_NAME = 2 //名前の列
for (i = 2; i <= 5; i++) {
if (chkvalue == shmst.getRange(i, MASTER_ID).getValue()) {
let name = shmst.getRange(i, MASTER_NAME).getValue()
console.log(name)
sh.getRange(11, 4).setValue(name)
}
}
}
ポイント
シート名を指定する場合
getSheetByName()でシート名を指定します。
厳密にチェックする
===で厳密に一致しているかをチェックする
最後までご覧いただきありがとうございます。
つぎはこちら
【初めてのGAS 4.】自作関数で値を受け渡しする方法
コメント
はじめまして。にわかものですが一つ一つ調べながら仕事でシートを作っています。
早速ですが質問があります。
共有しているシートの変更履歴を取得するLogシートを使っているのですが、
そのシートに「変更されたセルのA列の値を書き込む」という機能を追加したいのですが、
調べてもうまく動かず困っています。
【LogシートのGAS】
function onEdit(e) {
//Log保存用シートの名前
let logSheetName = ‘Log’;
// スプレッドシート
let ss = SpreadsheetApp.getActiveSpreadsheet();
// スプレッドシート名
let ssName = ss.getName();
// 選択シート
let sheet = ss.getActiveSheet();
// 選択シート名
let sheetName = sheet.getName();
// Logシートなら何もしない
if (sheetName == logSheetName) {
return;
}
// 選択セル範囲
let range = sheet.getActiveRange();
// セル範囲の行番号
let rowIndex = range.getRowIndex();
// セル範囲の列番号
let colIndex = range.getColumnIndex();
// ここでA列の値を取得?
let val =
// getRange(始点行, 始点列, 取得する行数, 取得する列数)
let v = sheet.getRange(rowIndex, colIndex, 1, 1).getValue();
//内容が空
if (v == ”) {
v = ‘※DELETE’;
}
//更新者のメールアドレス
let email = Session.getActiveUser().getEmail();
//ここからLogシートに書き込み
//Log保存用シート
let logSheet = ss.getSheetByName(logSheetName);
//引数で指定した行の前の行に1行追加
logSheet.insertRowBefore(21);
//日付
logSheet.getRange(21, 2).setNumberFormat(‘yyyy/mm/dd(ddd)’);
logSheet.getRange(21, 2).setValue(new Date());
//時刻
logSheet.getRange(21, 3).setNumberFormat(‘h:mm’);
logSheet.getRange(21, 3).setValue(new Date());
//更新者
logSheet.getRange(21, 4).setValue(email);
//シート名
logSheet.getRange(21, 5).setValue(sheetName);
//行番号
logSheet.getRange(21, 6).setValue(rowIndex);
//列番号
logSheet.getRange(21, 7).setValue(colIndex);
//変更セルの内容(Stringフォーマットにする)
logSheet.getRange(21, 8).setNumberFormat(‘@’);
logSheet.getRange(21, 8).setValue(v);
//変更されたセルのA列の値
logSheet.getRange(21,9).setValue(val);
}
目的は、仕事の現場状況を記録するもので
現場ごとに各々行10×列10の表が縦に並んでおり、担当者ごとにタブ分けされています。
いつだれがどの現場に情報を加えたかを知るためにLogシートを使っているのですが、
このGASでは変更されたセルの位置はわかるのですが、
どの現場のセルかわからず、変更されたセルに飛んで確認しています。
そこで各現場のA列に、見えない形で現場名を入れておき
変更されたセルのA列の値(現場名)をLogシートに反映させれば
どの現場が変更されたかすぐわかるので助かるなあと考えました。
いろいろ考えられることを試しましたが動かず
質問サイトでも全く返答が得られなくて途方に暮れています。
何かいい方法はあるでしょうか?
よろしくお願いいたします。
sheet.getRange(rowIndex, 1).getValue();
でA列が取れるのでは?
一応動画を作成しました。
https://technical.verybestcbp.com/gaslogview/
おおおおおお!すげえええええ!!!
本当にありがとうございます!!
ゲロ吐きながら悩み続けたことが解決しました笑
STARTLINEを定義すれば、変更になっても一発で変更できるんですね!
神業です。
なんと感謝していいか。。。
ありがとうございます!
お役に立てて何よりです。
MATさんのLogシートのアイデアは素晴らしいですね。
いろんな業務で使えそうです。