No video

하마터면 열심히 엑셀할 뻔 했다! 6. 앱스 스크립트(매크로)로 구글 시트에게 일시키기

  Рет қаралды 24,363

중년코딩

중년코딩

Күн бұрын

★엑셀로 야근말고 구글 시트로 칼퇴하자!
주의: 이번 영상은 멋대로 만들어봤습니다. 듣다가 놀라실 수도 있어요.
엑셀 매크로보다 구글 앱스 스크립트! 반복작업은 돈 많은 구글한테 시키고 발 뻗고 퇴근합시다.
세상에서 제일 게으른 20년차 회계사가 직접 가르쳐 주는 엑셀과 구글 시트 팁!
엑셀과 구글시트의 차이를 알아보고 비효율적인 엑셀 작업을 구글 시트를 통해 자동화하는 방법을 배워봅니다.
엑셀로 하던 일을 좀더 편하고 게으르게 하고, 궁극적으로 집에 빨리 가는 것이 이 강의의 목적입니다.
우리 모두는 게으르니까요.
★다음과 같이 총 7장으로 구성된 강의입니다.
0장. 구글시트가 엑셀보다 좋단 걸 5분만에 증명해주지!
1장. IMPORTRANGE로 최신 소스 유지하기
2장. ARRAYFORMULA와 배열로 복붙을 없애자.
3-1장. 구글 시트를 DB처럼 써보자 part1_배열만들기
3-2장. 구글 시트를 DB처럼 써보자 part2_Filter함수
3-3장. 구글 시트를 DB처럼 써보자 part3_Query 함수
4장. 외부데이터를 끌어오는 IMPORT 형제들
5장. 값이 채워진 설문지 만들기
6장. 앱스 스크립트로 구글한테 일 시키기 ← 지금 여기!
7장. 팁
★예제파일은 아래 링크를 참고하세요.(gmail 계정이 필요합니다.) docs.google.co...
★노션 페이지에도 전체 강의 내용이 올라와 있습니다. www.notion.so/...
★강의가 도움이 되셨다면 좋아요와 구독하기 부탁드려요! 덧글로 의견을 남겨주시면 적극적으로 반영합니다. 강의는 1주일에 한 개씩 올리는 걸 목표로 합니다.
#엑셀 #엑셀기초 #엑셀강좌 #엑셀강의 #엑셀초보 #엑셀함수 #엑셀매크로 #엑셀총정리 #엑셀고수 #엑셀표만들기 #엑셀수식 #엑셀실무 #엑셀피벗 #회계 #회계사 #구글스프레드시트 #구글시트 #구글시트사용법 #GoogleSheets #Spreadsheets

Пікірлер: 36
@user-aheb7s5hdhf
@user-aheb7s5hdhf 4 жыл бұрын
구글시트 강의를 한국말로 들을 수 있어서 너무 좋아요
@legacycoder
@legacycoder 4 жыл бұрын
도움이 되셨다니 기쁩니다!
@user-jh5pb5oe2i
@user-jh5pb5oe2i 4 жыл бұрын
예전에 구글시트에서 트리거가 되는 것을 우연히 알게되어, 프로그램도 못하는데, 다른 분의 시트를 한참 뜯어서 매일 결과물을 메일로 발송하게 하는데 성공했어요. 이것 땜에 엑셀로 못갑니다. 강의 감사합니다.
@wooin2u
@wooin2u 2 жыл бұрын
구글시트를 엑셀처럼 사용하다가 시리즈 강의 듣고 도움 많이 받고있습니다. 감사합니다.
@legacycoder
@legacycoder 2 жыл бұрын
도움이 되셨다니 감사합니다.
@jinyoungyu8345
@jinyoungyu8345 4 жыл бұрын
맨땅에 헤딩을 지금도 하고 있지만.. 처음에 이 영상을 봤다면 너무너무 좋았을 것 같습니다ㅠㅠ 앱스 스크립트를 시작할 때 시간을 확 줄일 수 있을 것 같아서 너무 좋은 강의라고 상각합니다! 많이 많이 공유하겠습니다. 새복 많이 받으세요 :)
@legacycoder
@legacycoder 4 жыл бұрын
감사합니다. 앱스스크립트는 깊게 들어가기도 겉만 훑기도 애매해서 고민했는데 좋은 말씀 해주시니 마음이 좀 놓이네요. 새해 복 많이 받으세요!
@user-fs8qx2jx3c
@user-fs8qx2jx3c 4 жыл бұрын
최고예요!!!
@user-it2by9ti1b
@user-it2by9ti1b 4 жыл бұрын
멋짐
@oneglobal8387
@oneglobal8387 4 жыл бұрын
기다렸습니다..
@legacycoder
@legacycoder 4 жыл бұрын
연말이라 술자리가 많았습니다. ㅎㅎ
@ningbbang
@ningbbang 2 жыл бұрын
영상보고 책 구매 결정했습니다. 감사합니다~
@legacycoder
@legacycoder 2 жыл бұрын
감사합니다! 열심히 게을러지세요.
@oneglobal8387
@oneglobal8387 4 жыл бұрын
벌써 마지막이라니.. AIP개념과 구글시트 활용하는 예시 번외편 한번 요청 드려 봅니다!
@legacycoder
@legacycoder 4 жыл бұрын
넵. 5분 단위의 짤막한 기능소개 영상들을 준비중입니다.
@taehyeonkim8044
@taehyeonkim8044 4 жыл бұрын
선생님, 혼자서 이거저거 찾아보고 해보다가 너무 어려워서 바쁘실텐데 불구하고 질문 남깁니다. 학생들이 각 반에서 구글 설문지로 응답한 내용을 출석 시트에 정말 간단한 트리거를 사용하여 응답이 새로 들어올 때마다 학번순으로 정렬되게는 만들었습니다. 제가 하고 싶은 것은 한 반에 30명이고 그 명단(학번과 이름)이 있는 상태에서 현재 응답한 학생이 25명이라면 응답을 하지 않은 5명을 일일이 찾아내지 않고 이름만 따로 산출되게 만들 수 있는지가 궁금합니다. 요약하자면 실시간으로 수업에 아직 과제를 제출하지 않은 학생들을 반환되도록 만들고 싶은데 가능할까요? 가능한지의 여부와 방향만 조금 제시해주시면 제가 열심히 찾아보겠습니다ㅠㅠ
@legacycoder
@legacycoder 4 жыл бұрын
응답하지 않은 학생 명단은 FILTER(학생 전체 명단, 응답 여부 체크 배열)나 QUERY(학생 전체 명단, "SELECT * WHERE 응답 < 1")과 같은 식으로 처리하면 쉽게 불러 올 수 있을 것입니다. 설문지 응답 시트와 응답하지 않은 명단을 어떻게 구성할지에 따라 응답여부체크를 어떻게 만들지가 달라질 테니 이 부분만 고민하시면 됩니다. 설문지 응답 시트를 설문지(과제)마다 따로 만들지, 한 설문지로 모든 과제를 한꺼번에 관리할지. 응답하지 않은 사람 명단은 과제마다 별도의 시트로 만들지 등등을 고민해 보세요. 그런데 저는 안 써봤지만 구글 클래스룸을 이용하시면 과제 관리하는 기능도 쉽게 처리할 수 있지 않을까요?
@taehyeonkim8044
@taehyeonkim8044 4 жыл бұрын
@@legacycoder 감사합니다 선생님. 현재는 구글 클래스룸에 제가 제작한 수업 영상과 학습 자료를 올리고 매 시간마다 구글 설문지(퀴즈 형식)를 통해서 형성평가를 진행합니다. 그래서 설문지 제출이 되어야 출석으로 인정받는 형태입니다. 10개 반 각각의 클래스룸에 따로 게시물을 올려야 해서 "수업 주제: 매크로" 라는 식의 스프레드 시트를 만들고 각 반별로 시트를 나눠서 1반 시트 ~ 10반 시트에 응답한 학생의 학번, 이름, 풀이 내용 등만 수집되는 형태로 운영이 되고 있어요. 학생들이 설문지도 제출하고 클래스룸에서 과제 완료도 눌러주면 좋은데 아무리 이야기해도 둘 다 꼬박꼬박 챙겨서 하는 학생들이 잘 없어서.. 설문지 제출 여부로만 확인하고 있습니다. 사실 눈으로 확인해도 금방 하는데 스프레드 시트 공부도 할겸 이것저것 해보는 중이라 일부러 여러 기능 건드려보고 있는 중입니다. 스프레드 시트는 강의 자료가 별로 없는데 보관함에 넣어두고 도움 많이 받고 있습니다.
@ssangchoo1004
@ssangchoo1004 2 жыл бұрын
중년코딩님~ 질문 한가지만 더 드려도 될까요 새벽에 알람이 울리지는 않을까 걱정이긴 하지만 ㅠㅠ 새벽까지 붙잡고 있는데 해결되지 않는 문제가 하나 있네요. function input() { var spreadsheet = SpreadsheetApp.getActiveSheet(); var hang = spreadsheet.getRange('ah1').getValue(); spreadsheet.getRange(hang,1).activate(); } ah1 셀에는 데이터가 있는 가장 아래쪽의 행번호를 나오게 한 후에 (함수로) 위의 스크립트를 적용했는데요. 실행을 하면 잘 됩니다. 하지만! ㅠ 도형을 만들어서 스크립트 할당을 하게 되면 가장 마지막 셀로 이동은 하지만 바로 활성화가 되지 않네요 ㅠ 타이핑을 하면 먹히지가 않네요. 도형쪽으로 activate가 되는거 같습니다. 혹~!시 이 문제에 대한 해결책을 알고 계실까요?
@legacycoder
@legacycoder 2 жыл бұрын
답이 늦었습니다. 스크립트 종료 후 바로 입력을 할 수 없는 이유는 눈에 안 보이는 팝업이 떠 있는 상태이기 때문입니다. esc키를 누르고 입력을 하시면 됩니다. 아래 시트에서 관련 내용을 확인하실 수 있습니다. docs.google.com/spreadsheets/d/1BKlcjmaKtQXAw9UmQObtMCYXs_EvTCZk0JKA4QkF-g8/edit#gid=0
@ehdehddl542
@ehdehddl542 2 жыл бұрын
좋은 강의 감사드립니다. 질문이 세 개 있는데요, 첫째, 스크립트로 다른 시트의 데이터를 가져와서 본래 시트의 셀을 채우는데 참조 방식으로(데이터 복사가 아니라) 가지고 오려면 어떻게 해야 할까요? (그러면 다른 시트의 데이터가 변경되도 바로 갱신되고 데이터 절약도 할 수 있어서요.) 둘째는 가지고 온 데이터에 웹링크가 있는데 이게 문자열로 읽혀지고 적혀져서 링크 활성화를 하려면 셀 안으로 굳이 들어가서 엔터를 눌러줘야 합니다. 이거 자동으로 활성화 시킨채로 셀 안에 채워지는 방법은 뭘까요? 셋째, 기본적인 것인데, 셀 사이즈를 그냥 딱 일정하게 하고 싶은데 데이터를 다른 시트로부터 가져왔을 때(이미 서식 메뉴 아래 줄바꿈을 자르기로 했음에도 불구하고) 셀 사이즈가 커진채로 줄바꿈 자르기가 되어 나타납니다... ㅜㅜ 어찌할 수 없을까요?
@legacycoder
@legacycoder Жыл бұрын
1. 앱스스크립트로 값이 아닌 수식을 넣어주면 됩니다. setFormula() 메소드를 사용하세요. developers.google.com/apps-script/reference/spreadsheet/range#setformulaformula 2. RichTextValue로 해당 셀을 설정하시면 됩니다. 여기를 참조하세요. spreadsheet.dev/add-links-to-a-cell-in-google-sheets-using-apps-script 3. 셀 사이즈를 나중에 조정하시는 법을 추천드립니다.
@ssangchoo1004
@ssangchoo1004 2 жыл бұрын
중년코딩님 항상 감사한 마음으로 유튜브와 블로그 잘 보고 있습니다! 여기저기 찾다가 도저히 안되서 문의드립니다.ㅜ 스크립트로 이메일을 보내고 싶은데요. 예를 들어 a2:c5셀까지의 내용을 a1에 있는 이메일주소로 보내고 싶습니다. 더 나아가서 a2:c5셀까지 data만 가지 않고 이미지파일이나 pdf파일로도 전송이 가능할까요? 너무 어려운 부분일까요? 바쁘실텐데 염치불구하고 질문 남깁니다. 언제나 가정에 평화가 깃들길 바랍니다.
@legacycoder
@legacycoder 2 жыл бұрын
너무 늦은 답변 죄송합니다. "내용"을 텍스트로 보내는 것은 여러가지 방법으로 가능합니다. 해당 시트가 공개되어 있거나 웹에 개시되어 있다면 URL을 통해 시트의 내용을 메일에 embed할 수도 있을 것입니다. 앱스스크립트나 zapier같은 툴을 사용할 수도 있습니다. pdf 파일 전송은 시트의 특정 범위를 pdf로 변환하여 구글 드라이브에 저장한 뒤 메일에 첨부하는 방식으로 해결할 수 있습니다. 제 책의 앱스스크립트 부분에 자세히 설명되어 있습니다. 예제는 gsheet.github.io 에서도 확인하실 수 있고 간단한 스크립트이니, 앱스스크립트를 이해하신다면 예제만 보셔도 쉽게 따라하실 수 있을 것입니다. 참고로 구글 시트는 URL에 ?range=B15 와 같이 파라미터를 통해 셀 주소를 참조할 수 있습니다. 이 방식이 B15:C18 같은 범위에도 적용이 되는지, pdf 방식의 export에도 적용이 되는지는 기억이 확실하지 않습니다. 범위 참조보다 pdf로 변환할 내용만 한개의 시트로 모아놓는 게 더 편할 것입니다. 나중에 시트 구조가 살짝 바뀌더라도 문제가 생길 여지가 적구요. 그리고 이미지 파일로 바꾸는 건 어렵습니다. 저는 그래서 파이썬으로 브라우저를 띄우고 이미지 캡처를 한 뒤에 전송하는 방법도 사용해 봤지만 추천하지 않습니다. 도움이 되셨길 바라며 추가적인 궁금증이 있으시면 또 질문 주십시오.
@ssangchoo1004
@ssangchoo1004 2 жыл бұрын
@@legacycoder 상세한 답변 감사드립니다. 책을 구매하고 아직 스크립트쪽을 완독하지 못했네요! 책에서도 도움 많이 얻고 있습니다. 퇴근하면 정독하고 공부한 후 궁금증 생기면 또 질문하겠습니다.^^ 감사드립니다.
@trustsophie
@trustsophie 3 жыл бұрын
질문이 있습니다. 1. 제가 키워드를 입력하면 검색사이트 검색결과가 출력되도록 했습니다. 첫 키워드 결과가 50개, 두 번째 키워드 결과가 30개입니다. 첫번째 결과를 실행한 후, 두번째 키워드를 검색하면 두번째 검색결과 30개가 출력되는데, 그 다음 행에 첫번째 검색결과 후반부 20개가 살아있습니다. 이런 일을 방지하기 위해 해당시트의 특정영역을 지우고 시작했으면 좋겠는데요. 방법이 있을까요? 2. 구글 스크립트를 실행하려면 구글 스크립트 메뉴로 가서 실행버튼을 눌러야 합니다. 그냥 스프레드 시트 화면에서 실행할 수 있는 방법이 궁금합니다. 7분 30분에 버튼만드는 법이 나오는데, 제 스크립트에서 안 되네요. 앞에 버튼 관련 코드 다음에 똑같은 함수가 sheet2, sheet3에서 나오는데 반복해서 나와서 그럴까요?function onOpen() { SpreadsheetApp. getUi() // DocumentApp or SlidesApp or FormApp .createMenu ( 'Dialog' ) .addItem ("KZfaqScraper",'KZfaqScraper') .addToUI (); } 버튼을 한개만 만들려고 해서 .add item을 한 번만 입력했는데요. 알 수 없는 오류가 발생했다는 메시지가 뜹니다.
@legacycoder
@legacycoder 3 жыл бұрын
2. TypeError: SpreadsheetApp.getUi(...).createMenu(...).addItem(...).addToUI is not a function -> addToUI가 아니라 addToUi로 마지막 i가 소문자여야 합니다. 억울하지만 컴퓨터가 알아먹을 수 있도록 해줘야 합니다. 1. 시트 전체 혹은 범위를 지우거나 시트의 특정 부분을 "이름이 있는 범위"로 지정해 두고 매번 시트를 열 때마다 지우도록 할 수 있겠죠. SpreadsheetApp.getActive().getSheetByName('시트1').getRange('A2:Z').clear(); 를 onOpen() 함수 안에 넣어두면 시트가 열릴 때마다 지워질 거에요. 별도의 함수로 만들어 두고 메뉴나 버튼을 연결할 수도 있겠죠. getRange를 getNamedRange로 해서 이름이 지정된 범위를 지워줄 수도 있습니다.
@MeTooYuToo
@MeTooYuToo Ай бұрын
Bgm 때문에 강의 집중이 안되네요 ㅎ
@legacycoder
@legacycoder Ай бұрын
좋은 bgm 추천 부탁드립니다.ㅎㅎ
@trustsophie
@trustsophie 3 жыл бұрын
알려주신 대로 타이핑 잘못한 거 고치니 버튼이 추가되었습니다. 감사합니다. ^^; 그런데 다른 문제가 생겼어요. 1. 'Run code를 누르면 KZfaqScraper 함수 메뉴가 나옵니다. KZfaqScraper를 눌러야 실행이 되는데, 클릭 한 번에 스크립트가 실행되게 하는 방법은 없을까요? 2. button 추가 , sheet 2 3 의 기존검색결과 지우기 --> 새로 크롤링 순으로 짜여져 있는데요. sheet2,3 의 기존검색결과 지우기는 되는데, 자동으로 새로 크롤링이 안 되네요. ㅠㅠ youtubeScraper 버튼을 눌러야 실행됩니다. 자동으로 되는 크롤링이 되는 법이 궁급합니다. 어떤 경우든지, 검색결과가 출력될 때 기존 검색결과를 지우고 시작했으면 좋겠습니다. 그러면 youtubescraper 함수 밑에 지워주기를 해야하는데 그렇게 하니 에러가 나네요 3. 크롤링 결과물의 열을 바꾸고 싶은데요. return 이하 순서를 바꾸면 될 줄 알았는데 안 되네요. 제가 원하는 것은 날짜,제목,채널명 ~ 순으로 나오는 것입니다. e.id.videoId 대신 e.snippet.publishedAt, 으로 바꿔도 안 되는데 .. 다른 방법으로 해야 하는 것일까요? //button 추가 function onOpen() { SpreadsheetApp. getUi() .createMenu ('Run code') .addItem ("KZfaqScraper",'KZfaqScraper') .addToUi (); SpreadsheetApp.getActive().getSheetByName('sheet2').getRange('A4:Z').clear(); SpreadsheetApp.getActive().getSheetByName('sheet3').getRange('A4:Z').clear(); } function KZfaqScraper() { var sh1 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet2"); var keyword = sh1.getRange("B1").getValue(); var results = KZfaq.Search.list('id,snippet', {q:keyword, maxResults:50}); //Video ID Published Date Channel ID "Video Title //" Description Thumbnail URL Channel Title var items = results.items.map(function(e){ return [e.id.videoId, e.snippet.publishedAt, e.snippet.channelId, e.snippet.title, e.snippet.description, e.snippet.thumbnails["default"].url, e.snippet.channelTitle] }) sh1.getRange(4, 1, items.length, items[0].length).setValues(items) var sh1 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet3"); var keyword = sh1.getRange("B1").getValue(); var results = KZfaq.Search.list('id,snippet', {q:keyword, maxResults:50}); //Video ID Published Date Channel ID "Video Title //" Description Thumbnail URL Channel Title var items = results.items.map(function(e){ return [e.id.videoId, e.snippet.publishedAt, e.snippet.channelId, e.snippet.title, e.snippet.description, e.snippet.thumbnails["default"].url, e.snippet.channelTitle] }) sh1.getRange(4, 1, items.length, items[0].length).setValues(items) }
@legacycoder
@legacycoder 3 жыл бұрын
한 번 클릭으로 해결하려면 버튼을 써야 합니다. 열 때 실행을 하려면 onOpen함수 안에서 자동으로 실행할 함수인 KZfaqScrapper를 호출해줘야 합니다. onOpen함수 마지막에 KZfaqScrapper();를 넣어보세요.
@MrMagLee
@MrMagLee 3 жыл бұрын
안녕하세요.... 구글 스프레드시트의 활용에 대해 전적으로 '중년코딩'님의 영상을 보고 배워가면서 작업이 있는데요. 순환종석성을 피할 수 없는 상황에 접했습니다. 제의 부족한 생각으로 순환종석성에 빠진 참조 영역 중 한 부분만이라도 스크립트로 하면 해결 될 것 같은데 제가 스크립트는 완전 무지라서요. 혹시 다음의 수식을 스크립트로 하려면 어떻게 코딩해야 해야 할지 도움좀 부탁드려 될까요? =if((D$3:D="판매완료")*(A3""),index(FILTER(P$3:P,(row(A$3:A)
@legacycoder
@legacycoder 3 жыл бұрын
답변이 늦었습니다. 위 수식을 어떤 상황에서 어떤 문제를 해결하기 위해 사용하시는 것인지는 질문만으로는 이해하기 어렵습니다. 이 수식을 A, D, B, P열에 사용하지 않는 경우라면 참조가 나오지는 않을 것 같은데, 지금 그렇게 사용을 하셔야 하는 상황인가요? 스크립트를 사용해서 순환참조를 해결하는 것은 반복계산을 통해 해를 찾는 방식이고 기본 원리는 스프레드시트 설정에서 반복계산 옵션을 켜주는 것과 다르지 않습니다. 따라서 특정 셀의 값이 아닌 한 열 전체의 값을 순환참조로 처리하려는 경우에는 적합하지 않을 것 같습니다. 또한 구글 스프레드시트에는 해찾기 기능이 없어서 원하는 방식으로 구현이 어려울 듯 합니다.
@MrMagLee
@MrMagLee 3 жыл бұрын
@@legacycoder 제가 도움을 청하는 입장인데 최소한의 예도 갖추지 못했네요. 죄송합니다. 간단히 관련 시트 링크를 공유드려 봅니다. 가능하신 시간 할애 해주실 수 있으면 잠시 봐주세요. docs.google.com/spreadsheets/d/1eLXuN57PyWjeTQr5-hXTKs_8GDQvZMg9_Qg9wAlk0oM/edit?usp=sharing
@legacycoder
@legacycoder 3 жыл бұрын
@@MrMagLee 수식 수정하고 코멘트 남겼습니다.
@kangsamsung
@kangsamsung 2 жыл бұрын
메크로, 중간 딜레이 어떻게 해야 할까? maxResults:3000 DELLY:3000 ????
OMG what happened??😳 filaretiki family✨ #social
01:00
Filaretiki
Рет қаралды 13 МЛН
What will he say ? 😱 #smarthome #cleaning #homecleaning #gadgets
01:00
30. 로그인정책관리 검색조건 유지
41:48
이백행
Рет қаралды 7
OMG what happened??😳 filaretiki family✨ #social
01:00
Filaretiki
Рет қаралды 13 МЛН