Google 스프레드시트에서 중복된 숫자,문자 색으로 하이라이트하기 (Apps Script 활용)

반응형

"Google 스프레드시트에서 중복된 차량 번호를 자동으로 색칠할 수 있을까?"
스프레드시트를 사용하다 보면 중복 데이터를 쉽게 확인하고 싶을 때가 있죠!

👉 오늘은 Google Apps Script(GAS)를 활용해 차량 번호 중복을 감지하고, 연한 무지개 색상(파스텔톤)으로 강조하는 방법을 알려드릴게요!

 

📌 Google Apps Script를 활용한 자동 하이라이트 기능

 

이 기능을 사용하면 다음과 같은 작업이 가능합니다.

 중복된 차량 번호 자동 감지
 연한 무지개 색상(파스텔톤) 20가지 활용
 중복이 없는 경우 색상 자동 제거
 스프레드시트 메뉴에 "중복 확인" 기능 추가

 

 


🛠️ Google Apps Script 코드 적용 방법

1️⃣ Google Apps Script 편집기 열기

  1. Google 스프레드시트를 엽니다.
  2. 상단 메뉴에서 "확장 프로그램" → "Apps Script" 클릭!
  3. 아래 코드를 복사해서 붙여넣기 합니다.

📌 2️⃣ Google Apps Script 코드 (복사해서 사용하세요!)

function highlightDuplicatePlatesInCustomRange() {
  const TARGET_SHEET_NAME = "로그"; // 대상 시트 이름
  
  try {
    const ss = SpreadsheetApp.getActiveSpreadsheet();
    const sheet = ss.getSheetByName(TARGET_SHEET_NAME);
    
    if (!sheet) {
      ss.toast(`"${TARGET_SHEET_NAME}" 시트를 찾을 수 없습니다.`, '오류');
      return;
    }

    const ranges = ["I2:I20", "M2:M20", "Q2:Q20"]; // 검사할 범위
    
    // 연한 무지개(파스텔톤) 색상 20가지
    const colors = [
      "#F3E5F5", "#E8EAF6", "#E3F2FD", "#E0F7FA", "#E0F2F1",
      "#E8F5E9", "#F1F8E9", "#F9FBE7", "#FFF8E1", "#FFF3E0",
      "#FBE9E7", "#FFEBEE", "#FCE4EC", "#EDE7F6", "#D1C4E9",
      "#C5CAE9", "#BBDEFB", "#B2EBF2", "#B2DFDB", "#C8E6C9"
    ];

    let processedCells = 0;
    let duplicatesFound = 0;

    ranges.forEach(rangeStr => {
      try {
        const range = sheet.getRange(rangeStr);
        const values = range.getValues();
        
        const valueCounts = {};
        values.forEach(row => {
          if (row[0]) valueCounts[row[0]] = (valueCounts[row[0]] || 0) + 1;
        });

        const colorMap = {};
        let colorIndex = 0;
        const newBackgrounds = values.map(row => {
          const value = row[0];
          if (!value || valueCounts[value] <= 1) return ["transparent"];
          
          if (!colorMap[value]) {
            colorMap[value] = colors[colorIndex % colors.length];
            colorIndex++;
          }

          duplicatesFound++;
          return [colorMap[value]];
        });

        for (let i = 0; i < values.length; i++) {
          const cell = range.getCell(i + 1, 1);
          if (newBackgrounds[i][0] !== "transparent") {
            cell.setBackground(newBackgrounds[i][0]);
          } else {
            cell.setBackground(null);
          }
          processedCells++;
        }
      } catch (rangeError) {
        console.error(`범위 처리 중 오류 발생: ${rangeStr}`, rangeError);
        ss.toast(`범위 ${rangeStr} 처리 중 오류가 발생했습니다.`, '오류');
      }
    });

    ss.toast(`처리 완료! ✅\n검사된 셀: ${processedCells}개\n중복 찾음: ${duplicatesFound}개`, '작업 완료');

  } catch (error) {
    console.error('스크립트 실행 중 오류 발생:', error);
    SpreadsheetApp.getActiveSpreadsheet().toast('스크립트 실행 중 오류가 발생했습니다.', '오류');
  }
}

// 📌 Google Sheets 메뉴에 추가!
function onOpen() {
  try {
    const ui = SpreadsheetApp.getUi();
    ui.createMenu('🚗 중복 확인')
      .addItem('🔍 중복 값 하이라이트', 'highlightDuplicatePlatesInCustomRange')
      .addSeparator()
      .addItem('🗑️ 하이라이트 제거', 'clearHighlights')
      .addToUi();
  } catch (error) {
    console.error('메뉴 생성 중 오류 발생:', error);
  }
}

// 🗑️ 하이라이트 제거 기능
function clearHighlights() {
  const TARGET_SHEET_NAME = "로그"; // 원하는 시트 이름

  try {
    const ss = SpreadsheetApp.getActiveSpreadsheet();
    const sheet = ss.getSheetByName(TARGET_SHEET_NAME);

    if (!sheet) {
      ss.toast(`"${TARGET_SHEET_NAME}" 시트를 찾을 수 없습니다.`, '오류');
      return;
    }

    const ranges = ["I2:I20", "M2:M20", "Q2:Q20"];
    ranges.forEach(rangeStr => {
      const range = sheet.getRange(rangeStr);
      range.setBackground(null);
    });

    ss.toast(`"${TARGET_SHEET_NAME}" 시트의 하이라이트가 제거되었습니다.`, '작업 완료');
  } catch (error) {
    console.error('하이라이트 제거 중 오류 발생:', error);
    SpreadsheetApp.getActiveSpreadsheet().toast('하이라이트 제거 중 오류가 발생했습니다.', '오류');
  }
}

 

반응형

🎯 결과 화면 예시

🚀 중복이 없는 값은 자동으로 배경색이 제거됩니다!


💡 마무리: Google Apps Script 활용 팁

Google Apps Script를 활용하면 스프레드시트의 반복적인 작업을 자동화할 수 있습니다.
이 기능을 적용하면 데이터 관리가 훨씬 효율적이 되겠죠? 🎉

💬 질문이 있으시면 댓글로 남겨주세요!
👍 유용했다면 공유 & 북마크 필수!

👉 다음 포스팅에서는 "자동 데이터 정렬 & 필터 기능"을 다뤄볼게요! 기대해주세요! 🚀

728x90
반응형
그리드형

두루바퀴세상

자전거의 모든것 알고싶다면?? 두루바퀴세상 !!

    이미지 맵

    액셀, 구글시트 다른 글

    이전 글

    다음 글