【Google Apps Script와 스프레드 시트로 재고 관리】 입력된 문자를 다른 시트에서 검색하고 그 옆에 있는 문자를 내보내기
소개
타이틀을 읽어도 의미불명이라고 생각하기 때문에, 우선은 이쪽의 동영상을 보고 싶다.
【Google Apps Script로 업무 효율화】 입력된 문자를 다른 시트에서 검색하고, 그 옆에 있는 문자를 내보낸다! 피 c. 라고 r. 이 m/HGp와 lXw9J — 겐겐토 (@gento34165638) June 16, 2020
이것으로 대체로 무엇을 실현하고 싶은지, 알 수 있을까 생각한다. .
경위
내 파트너가 취미로 액세서리로 만들고 있는데 어느 날 '완성된 아이템의 원가를 알고 싶다!'라는 주문을 받았다. . .
보유하는 모든 재료는, 정중하게 스프레드 시트에 정리되어 있는 것 같다.
使った材料1つあたりの金額 × 使った個数 = 出来上がったアイテムの原価
스프레드 시트를 사용하여 요청하고 싶지만 ,,,,
「사용한 재료 1개당의 금액」을, 재고 일람의 시트로부터 일일이 코피페 하는 것이 귀찮다! 그래서
「프로그래밍의 스킬은, 가장 친밀한 사람의 도움이 될 수 있을 것이다!」라고 생각해, 이 내가 일어난 것이다.
준비하는 것
재고를 정리한 시트
만든 아이템을 정리한 시트
전체 흐름
①「제작한 아이템」의 시트로 입력된 재료명을 onEdit(e)
로 취득
②①에서 취득한 재료명을 같은 스프레드시트 내의 「재고」시트에서 검색
③「재고」시트에서 검색한 셀의, 1개 옆의 셀의 값(이것이 「재료 1개당의 금액」)을 취득
④①에서 입력된 셀 중 하나 옆의 셀에 ③에서 취득한 '재료 1개당 금액'을 내보내기
대략의 처리의 흐름은 이런 느낌.
모든 코드
코드.gs
function onEdit(e) {
var range = e.range;
var value = e.value;
// 編集のあったシート
var sheet = e.source.getActiveSheet();
// 編集したセル
var cell = e.source.getActiveRange();
// シート「作ったアイテム」の2列目のセル(材料名)が編集されたときのみ実行される
if (sheet.getName() == "作ったアイテム" && cell.getColumn() == 2) {
const price = findText(value);
if(price){
cell.offset(0, 1).setValue(price);
}
}
}
function findText(newValue) {
var targetCol = 1;
var ss = SpreadsheetApp.getActiveSpreadsheet();
//シート「在庫」を取得
var sheet = ss.getSheetByName('在庫');
try{
//シート「作ったアイテム」で入力された文字列を探す
var textFinder = sheet.createTextFinder(newValue);
var ranges = textFinder.findAll();
//入力された文字のセル範囲を取得
var textPos = ranges[0].getA1Notation();
//入力された文字の位置を取る
var textPosCell = sheet.getRange(textPos);
//入力された文字の右隣のセルの値を取る
var targetValue = textPosCell.offset(0, 1).getValue();
return targetValue;
}catch(e){
result = "エラーの内容:" + e;
Logger.log(result);
}
}
가볍게 해설
스프레드 시트에 편집이있을 때 발동
function onEdit(e)
function onEdit(e) {
var range = e.range;
var value = e.value;
// 編集のあったシート
var sheet = e.source.getActiveSheet();
// 編集したセル
var cell = e.source.getActiveRange();
// シート「作ったアイテム」の2列目のセル(材料名)が編集されたときのみ実行される
if (sheet.getName() == "作ったアイテム" && cell.getColumn() == 2) {
const price = findText(value);
if(price){
cell.offset(0, 1).setValue(price);
}
}
}
function findText(newValue) {
var targetCol = 1;
var ss = SpreadsheetApp.getActiveSpreadsheet();
//シート「在庫」を取得
var sheet = ss.getSheetByName('在庫');
try{
//シート「作ったアイテム」で入力された文字列を探す
var textFinder = sheet.createTextFinder(newValue);
var ranges = textFinder.findAll();
//入力された文字のセル範囲を取得
var textPos = ranges[0].getA1Notation();
//入力された文字の位置を取る
var textPosCell = sheet.getRange(textPos);
//入力された文字の右隣のセルの値を取る
var targetValue = textPosCell.offset(0, 1).getValue();
return targetValue;
}catch(e){
result = "エラーの内容:" + e;
Logger.log(result);
}
}
스프레드 시트에 편집이있을 때 발동
function onEdit(e)
이 함수로 스프레드 시트에 편집이 있었을 때, 발동하도록 해 둔다.
다만, 이대로라면 모든 셀에 편집이 있었을 때에 발동해 버리므로, 이와 같이 조건 분기해 둔다.
// 編集のあったシート
var sheet = e.source.getActiveSheet();
// 編集したセル
var cell = e.source.getActiveRange();
// シート「作ったアイテム」の2列目のセル(材料名)が編集されたときのみ実行される
if (sheet.getName() == "作ったアイテム" && cell.getColumn() == 2) {
const price = findText(value);
if(price){
cell.offset(0, 1).setValue(price);
}
}
createTextFinder로 단어 찾기
이 함수는이 기사에서 자세히 설명합니다
Google Apps Script에서 스프레드 시트의 문자열 검색 TextFinder 사용해보기
왜 ranges[0]
인가?
var ranges = textFinder.findAll();
var textPos = ranges[0].getA1Notation();
그것은 findAll()
에서 찾고 있기 때문에, 검색에 걸친 단어가 복수 발견되는 일도 있을 수 있다. 그래서 ranges
는 배열과 같은 것이 된다.
마지막으로
저는 스프레드시트가 특히 왔습니다.
추가
계속 쓴
[Google Apps Script 및 스프레드시트에서 인벤토리 관리] 선택 범위에서 얻은 값을 사용하여 다른 시트로 계산
Reference
이 문제에 관하여(【Google Apps Script와 스프레드 시트로 재고 관리】 입력된 문자를 다른 시트에서 검색하고 그 옆에 있는 문자를 내보내기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kokogento/items/7d8d32a7c3361a954454텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)