본문 바로가기
Log/etc.

[GoogleSheet] 연속 동일값 병합 매크로

by uxia 2025. 9. 2.

방대한 양의 데이터를 구글시트에 정리해두고

DB에 연결해서 사용하곤 하는데,

관리와 조회 차원에서도 편하고도록 셀 병합을 하려 했으나,

너무 많아서 일일이 하기 귀찮았다.

 

바로 매크로 만드는 방법 드간다.

 

1. 확장 프로그램 > Apps Script

 

 

2. 아래 첨부한 스크립트 붙여넣고 저장

/***** 선택영역에서 "연속된 동일값"만 병합 (여러 열 가능) *****/
function mergeSameInSelectionColumns() {
  const sheet = SpreadsheetApp.getActiveSheet();
  const sel = sheet.getActiveRange();
  if (!sel) { SpreadsheetApp.getUi().alert('선택한 범위가 없습니다.'); return; }

  const startRow = sel.getRow();
  const endRow   = sel.getLastRow();
  const startCol = sel.getColumn();
  const endCol   = sel.getLastColumn();

  // 병합 충돌 방지: 선택영역 내 병합 먼저 해제
  sel.breakApart();

  // 선택영역 값 한번에 읽기
  const numRows = endRow - startRow + 1;
  const numCols = endCol - startCol + 1;
  const values  = sheet.getRange(startRow, startCol, numRows, numCols).getValues();

  // 비교 키: 공백·대소문자 무시(원치 않으면 toLowerCase/trim 부분 제거)
  const keyOf = (v) => {
    if (v === null || v === undefined) return '';
    return String(v).trim().toLowerCase();
  };

  // 각 열별로 위→아래 스캔하며 연속 구간 병합
  for (let c = 0; c < numCols; c++) {
    let groupStart = 0; // 선택영역 내부 인덱스 기준
    for (let r = 0; r <= numRows; r++) {
      const cur  = (r <  numRows) ? keyOf(values[r][c]) : '__END__';
      const next = (r + 1 < numRows) ? keyOf(values[r + 1][c]) : '__END__';

      if (cur !== next) {
        const len = r - groupStart + 1;
        // 빈칸('') 제외 & 2행 이상만 병합
        if (cur !== '' && len >= 2) {
          const mergeStartRow = startRow + groupStart;
          const mergeRange = sheet.getRange(mergeStartRow, startCol + c, len, 1);
          mergeRange.merge();
          mergeRange.setHorizontalAlignment('center')
                    .setVerticalAlignment('middle');
        }
        groupStart = r + 1;
      }
    }
  }

  SpreadsheetApp.getUi().alert('연속 동일값 병합 완료');
}

/***** 메뉴 등록 *****/
function onOpen() {
  SpreadsheetApp.getUi()
    .createMenu('Merge Tools')
    .addItem('선택영역 "연속 동일값" 병합', 'mergeSameInSelectionColumns')
    .addToUi();
}

 

 

3. 구글시트에서 매크로 돌릴 범위 선택 > Merge Tools > 내가 설정한 이름의 매크로 선택

 

 

 

파일이 쥰내 많아서 약 3-4시간은 단축한 듯

ㄱㅇㄷ👍

'Log > etc.' 카테고리의 다른 글

Figma-Cursor MCP 연결  (0) 2025.06.23
Claude&Notion MCP 연결  (1) 2025.06.23
매개변수(Parameter)와 전달 인자(Argument) 차이  (1) 2024.10.14
Brew 경로문제 에러  (0) 2024.10.07
Mac ARM64, X64 차이  (4) 2024.10.07