====== Google Sheet ======
* [[google:googlesheet:function|Google Sheet Functions]]
* [[https://support.google.com/docs/topic/9054603?hl=ko&ref_topic=1382883|Google 스프레드시트 도움말]]
* [[https://www.youtube.com/channel/UC8p19gUXJYTsUPEpusHgteQ|Learn Google Spreadsheets : Google Spreadsheets 강좌 모음 유튜브]]
* [[https://www.youtube.com/watch?v=wQfApf3eci8&list=PLv9Pf9aNgemt61gjKQaYZHjvZlVp4OANq|Google Sheets - Tutorial for Beginners 강좌 모음]]
* [[https://www.youtube.com/watch?v=0yMOMSBENbo&list=PLv9Pf9aNgemtP-BeFvg78PJFxKs6xDgea|Google Sheets - Intermediate Tutorials]]
* [[https://www.youtube.com/watch?v=hG5vKMb0Lpo&list=PLv9Pf9aNgemvb55w2dAh-QlZSOKM6vtEx|Google Sheets - Advanced Tutorials]]
===== 텍스트 연결(conat) =====
* ''&''로 연결한다.
=A1&B1&"helloworld"
===== Named Ranges : 이름이 지정된 범위 =====
* **데이터 -> 이름이 지정된 범위**
* 혹은 범위를 마우스 드래그로 지정하고 우클릭으로 **이름이 지정된 범위 정의**를 할 수 있다.
* ''SheetName!A01:H40'' 같은 시트 범위에 이름을 붙이서 Range 가 필요한 모든곳에서 대신 사용할 수 있다.
* ''IMPORTRANGE'' 함수에서도 사용 가능하다.
* [[https://www.youtube.com/watch?v=lbp4q8fnom0|Google Sheets - Named Ranges, Dynamic Updates, with IMPORTRANGE, Other Sheets, Arrays - Tutorial - YouTube]]
===== DropDown List =====
* **데이터 -> 데이터 확인(Data Validation)** 에서 기준을 **범위에서의 목록** 으로 지정해주면 해당 범위의 값을 Drop Down List 로 나타낼 수 있다.
* [[https://support.google.com/docs/answer/3093377|INDIRECT]] 함수와 조합하면, 다중 드랍다운 목록을 만들어낼 수 있다.
* [[https://youtu.be/AUM6s-hbX6w|Google Sheets - Drop Down List, 2 Dependent Dropdown Lists]]
* 예제 완성 파일 : [[https://docs.google.com/spreadsheets/d/1o7mR7FwwTmOlFIeLr4Sh7w528rv9DwSnrCftfSR0bLY/edit?usp=sharing|연습 - Drop Down List, 2 Dependent Dropdown Lists]]
===== Operator =====
* [[https://infoinspired.com/google-docs/spreadsheet/comparison-operators-in-google-sheets/|Comparison Operators in Google Sheets and Equivalent Functions]]
===== 조건부 서식 =====
* **서식 -> 조건부 서식** 에서 조건에 따라 셀의 서식을 가변 지정할 수 있다.
* [[https://youtu.be/GcAPzRGjunk|Google Sheets - Conditional Formatting Row Tutorial]]
* [[https://youtu.be/qUwkTRfYpBw|Google Sheets - Conditional Formatting Based on Another Cell Using Formulas Tutorial]]
* [[https://docs.google.com/spreadsheets/d/1aW1jdfKVPrNZMFKGCRtPnMiCnRbS-qn7XfgXSe-gEQ0/edit?usp=sharing|연습 - Conditional Formatting Row]]
===== Pivot Tables =====
* [[https://www.benlcollins.com/spreadsheets/pivot-tables-google-sheets/|Pivot Tables in Google Sheets: A Beginner's Guide]]
* [[https://zapier.com/blog/google-sheets-pivot-table/|How to Use Pivot Tables in Google Sheets]]
* 주의점
* 원본 데이터의 최상단에 Header 행을 두는게 좋다.
* 모든 행에 값이 비어있지 않게 해야 한다.
===== 정렬(sort) / 헤더 고정 =====
* 헤더를 제외한 나머지를 컬럼기준으로 정렬하려면
* [[https://support.google.com/docs/answer/3540681?hl=ko|데이터 정렬 및 필터링하기]] 참조.
* 헤더 행을 **보기->고정** 을 통해 고정해둔다.
* 원하는 컬럼을 선택하고 **데이터->시트정렬** 에서 정렬한다.
===== Macro =====
* [[https://zapier.com/blog/google-sheets-macros/|How to Automate Google Sheets With Macros—No Coding Required]]
===== 다중 Sheet 의 데이터를 하나로 합쳐서 보여주기 =====
* ''={'Sheet1'!A2:G12;'Sheet2'!A2:G12; ... }'' 형태로 여러 시트의 데이터를 하나의 별도 시트에 모아서 보여주는게 가능하다.
* 하지만 이 경우 지정된 영역만 가능하고, ''G12'' 그 아래로 추가되는 것은 자동으로 추가가 안되는데,
* ''={'Sheet1'!A2:G;'Sheet2'!A2:G; ... }'' 형태로 row 를 빼버리면 될것 같아 보이지만, **공백 row도 함께 추가**된다.
* 공백은 빼고 가려면 [[https://support.google.com/docs/answer/3093343?hl=ko|QUERY]] 함수를 사용해야 한다.
=QUERY({'Sheet1'!A2:G;'Sheet2'!A2:G; ... }, "select * where Col1 is not null or Col2 is not null ...", 0)
* 마지막 숫자 ''0'' 은 헤더를 의미한다. ''0''은 헤더 없음. ''1''은 헤더이므로 조회조건에서는 빼고 그냥 출력.
* [[https://youtu.be/q8awNSYNdq4|Google Sheets - Combine Data From Multiple Sheets Tutorial]]
* [[https://docs.google.com/spreadsheets/d/1bJQ4UzAK4kkXqKiL83JOUG7fPYJaY_nqn8jqb_oD4f4/edit?usp=sharing|연습 - Combine Data From Multiple Sheets]]
* 컬럼을 **Column 을 나타내는 알파벳**으로 한다.
=QUERY('Sheet1'!A19:CI147, "select * where U='내이름'" ,1)
===== 날짜와 시간 입력 Date Time =====
* [[https://www.howtogeek.com/448444/how-to-add-the-current-date-and-time-in-google-sheets/|How to Add the Current Date and Time in Google Sheets]]
* Sheet 를 열 때마다 그 순간의 현재 날짜와 시간을 원한다면(계속 시간/날이 경과함에 따라 갱신됨) 함수 ''NOW()'',''TODAY()''를 사용하고,
* 입력하는 현재의 날짜 시간을 입력하는 것을 원한다면(한번 입력 후 고정) 단축키를 이용한다.
* ''Ctrl+;'' : 오늘 날짜
* ''Ctrl+Shift+;'' : 현재 시각
===== 문자열 split / 마지막 문자열만 취하기 =====
* [[https://www.statology.org/google-sheets-split-get-last/|Google Sheets: Use SPLIT Function and Get Last Item - Statology]]
* [[https://docs.google.com/spreadsheets/d/1AJJVKHAbAKrL6JM7Km2cEha1-2jciHdaPuMslbQjM78/edit#gid=0|문자열 자르기, 자른 문자열중 특정값 확인 - 예시]]
* [[https://support.google.com/docs/answer/3094136|SPLIT]] 함수로 문자열을 특정 구분자(delimiter) 로 자를 수 있다.
* [[https://support.google.com/docs/answer/3093374|COLUMNS]] 함수는 지정된 range 의 총 컬럼 갯수를 반환해준다. 따라 ''COLUMNS(SPLIT("문자열","구분자"))'' 는 나뉘어진 문자열의 총 갯수를 반환한다.
* [[https://support.google.com/docs/answer/3098242|INDEX]] 함수는 ''행''과 ''열''의 값을 반환하는데, ''행만'' 인자로 지정할 수도 있다. **1 base** 이다. 행/열 값을 ''0'' 으로 지정하는 것은 **전체**를 의미한다.
* 따라서 이를 모두 조합하면 문자열을 구분자로 나누고, 그 중에 마지막 문자열을 출력하는게 가능해진다.
=INDEX(SPLIT(A2, " "), COLUMNS(SPLIT(A2, " ")))
===== vlookup =====
* [[https://support.google.com/docs/answer/3093318|vlookup]] 함수는 현재 시트에 있는 key 데이터에 대해 다른 시트 혹은 다른 영역의 데이터를 join 해서 출력해줄 수 있는 역할을 한다. 매우 변번하게 사용된다.
* DB 테이블의 join 과 비슷한 역할을 한다.
* ''IFNA(VLOOKUP(...), "없을때")'' 형태로 lookup 실패시 출력할 내용을 지정할 수 있다.
==== 인자설명 ====
* ''=VLOOKUP(search_key, range, index, [is_sorted])''
* ''search_key'' : 다른쪽 데이터를 조회할 곳의 Join key 역할의 cell 지정. 보통은 vlookup 은 열검색이므로 ''$A2'' 처럼 열을 고정시키고 행부분은 자동증감되게 한다. 이 search key 는 range 영역의 첫번째 열에 있는 데이터들과 비교하게 된다.
* ''range'' : 데이터를 join 할 테이블 영역. 이 영역의 첫번째 열에 있는 데이터들이 join key 역할을 한다.
* ''index'' : search_key 와 range 의 첫번째 열에 있는 값이 매칭될 경우 출력할 내용이 있는 컬럼의 상대적 위치. 1 base.
* ''is_sorted'' : ''FALSE'' 로 하면 항상 exact matching 일 경우에만 출력. **asc** 정렬된 데이터에 대해서 ''TRUE''로 지정하면 정확히 매치가 안되도 근사값의 데이터를 가져와 보여준다.
===== if =====
* [[https://support.google.com/docs/answer/3093364|IF]] : 조건을 만족하는지 여부에 따라 데이터 리턴
IF(ISNA(A2), "true일때 값", "false일 때 값")
===== is* =====
* ''if''에서 사용할 각종 비교 함수들
* [[https://support.google.com/docs/answer/3093293|ISNA]] : ''#N/A'' 이면 true
===== ifna =====
* [[https://support.google.com/docs/answer/9365944|ifna]]
* N/A 여부 검사.
IFNA(Value,NA일때값)
===== 프로그래밍과 연동 =====
* [[http://www.baeldung.com/google-sheets-java-client|Interact with Google Sheets from Java | Baeldung]]
===== Sample Data =====
* [[https://www.google.com/search?q=excel%20sample%20data|excel sample data]] 혹은 [[https://www.google.com/search?q=google%20sheet%20sample%20data|google sheet sample data]] 등으로 검색하면 많이 나온다.
* [[https://solutions.appsheet.com/sample-data-sets|Download a Sample Data Set to Build an App]]
* [[https://www.tillerhq.com/budget-sheet-sample-data-for-google-sheets-and-excel/|Budget Sheet Sample Data for Google Sheets and Excel]]
===== 문제점 =====
* Video Hardware Acceleration 이 켜져 있을 경우 글씨가 안보이는 현상 발생함. see [[linux:vaapi|Linux VAAPI/VDPAU]]
===== 참조 =====
* [[https://andromedarabbit.net/google-sheets-%eb%a5%bc-api%eb%a1%9c-%eb%b0%94%ea%be%b8%ea%b8%b0/|Google Sheets 를 API로 바꾸기]]
* https://github.com/aakritsubedi/Sheets2API
* https://about.appsheet.com/home/
* [[https://smartagent.blog/|스마트요원의 실용구글 – #스마트워크 #Google Workspace #실용구글 #스프레드시트]] 시츠 강좌 많음.