【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)


이 함수로 스프레드 시트에 편집이 있었을 때, 발동하도록 해 둔다.

다만, 이대로라면 모든 셀에 편집이 있었을 때에 발동해 버리므로, 이와 같이 조건 분기해 둔다.



// 編集のあったシート
  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 및 스프레드시트에서 인벤토리 관리] 선택 범위에서 얻은 값을 사용하여 다른 시트로 계산


좋은 웹페이지 즐겨찾기