원하는 기능의 엑셀 함수를 찾아 헤맸지만
vlookup의 경우 데이터를 찾고, 하나의 컬럼 데이터만을 뿌려주기에 적합하지 않았다
결국 VBA에 손댈 수 밖에 없다는 결론이 생겨 대충 FOR문을 돌렸다
자바스크립트라지만, Apps Script는 완전히 처음이라 헤맸다
검색해서 나온 코드를 그대로 붙여넣어도 원하는 결과가 나오지 않거나, 그 사이 업데이트가 되었는지 없는 함수라고 뜨기 일쑤였다.
어찌저찌 되긴 했다
const NowSheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0]; // 0번째 시트 정보를 가지고 온다 // 보통 검색기능을 이용한다면 0번째 시트에서 시작하기 때문. let selectedCell=""; let findSheet=null; // 0번째 시트는 검색기능이 들어가므로, 데이터는 1번째 시트부터 시작 for (let i = 1; i < 9; i++){ const ISheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[i]; const range= ISheet.getRange("A3:A50"); //데이터영역 const textFinder = range.createTextFinder(NowSheet.getRange("A3").getValue()); //검색어 넣고 const findNow = textFinder.matchEntireCell(false).matchCase(false).findAll(); if(findNow.length > 0) { findNow.forEach(rg => { selectedSh = rg.getA1Notation().substring(0,1); selectedCell = rg.getRowIndex(); findSheet = ISheet; return false; }) break; } } findSheet.getRange("B"+selectedCell+":F"+selectedCell).copyTo(NowSheet.getRange(6, 1)); // 복사할 시트.getRange("여기:저기").copyTo(결과를 보여줄 시트.getRange(뿌려줄 행, 뿌려줄 열)); |
textFinder를 사용할때 원래는 getCurrentMatch()를 썼었다
https://developers.google.com/apps-script/reference/spreadsheet/text-finder?hl=ko#getCurrentMatch()
getCurrentMatch() Range 검색 기준과 일치하는 현재 셀을 반환합니다.
이렇게 적혀 있었으니까... 하지만 아무리 console.log를 찍어봐도 null값이 떴다
결국 findAll()로 forEach를 돌려서 찾기로 하였음
내 경우 데이터 영역이 작아 중복데이터는 없어서 제대로 나오는 것일뿐, 중복데이터가 있다면 손봐야 할 코드이다
matchEntireCell(false).matchCase(false)
textfinder에 쓰인 함수들인데
matchEntireCell는 셀의 전체 내용과 일치하는지 유무를,
matchCase는 셀 텍스트의 대소문자가 일치하는지 유무를 설정한다
참고한 블로그
https://www.autooffice.co.kr/blog/2023/08/11/copying-data-between-sheets-in-apps-script/
https://www.autooffice.io/knowhow/write-formula-to-selected-cell-or-range
https://smart-worker.tistory.com/39
'잡담 & 시사이슈 등' 카테고리의 다른 글
XZ Utils Backdoor (0) | 2024.11.10 |
---|---|
Rocky-BaseOS.repo (0) | 2024.10.19 |
최근 보안뉴스 (0) | 2024.10.13 |
Rust 취약점 이슈 (0) | 2024.05.12 |