Google 스프레드 시트에서 주어진 값을 참조하는 수식 찾기


17

큰 스프레드 시트에서 어떤 셀에 수식 종속성이 있는지 알고 싶습니다. OpenOffice와 같은 것을 할 수있는 방법을 찾고 있습니다

도구> 탐정> 추적 의존

편집> 찾기 및 바꾸기> 수식 검색

또는 주어진 셀 값이 참조되고 참조 소스를 식별 할 때 호출되는 GAS에서 트리거를 작성하는 방법.

답변:


12

다음 코드는 스프레드 시트에 메뉴를 추가합니다.

형사> 미량 의존적

이것을 선택하면 모든 종속 셀 참조와 함께 활성 셀에 메모가 추가됩니다.

(아래 Graham이 제안한 정적 참조 검색 추가)

traceDependents 함수에 유사한 함수를 추가하여 활성 셀 내에서 텍스트에서 함수 검색 기능을 검색 할 수 있습니다. 나는 그것을 당신을위한 운동으로 남겨 둘 것입니다.

function onOpen() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var menuEntries = []
  menuEntries.push({name: "Trace Dependents", functionName: "traceDependents"});
  ss.addMenu("Detective", menuEntries);
}

function traceDependents(){
  var dependents = []
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var currentCell = ss.getActiveCell();
  var currentCellRef = currentCell.getA1Notation();
  var range = ss.getDataRange();

  var regex = new RegExp("\\b" + currentCellRef + "\\b");
  var formulas = range.getFormulas();

  for (var i = 0; i < formulas.length; i++){
    var row = formulas[i];

    for (var j = 0; j < row.length; j++){
      var cellFormula = row[j].replace(/\$/g, "");
      if (regex.test(cellFormula)){
        dependents.push([i,j]);
      }
    }
  }

  var dependentRefs = [];
  for (var k = 0; k < dependents.length; k ++){
    var rowNum = dependents[k][0] + 1;
    var colNum = dependents[k][1] + 1;
    var cell = range.getCell(rowNum, colNum);
    var cellRef = cell.getA1Notation();
    dependentRefs.push(cellRef);
  }
  var output = "Dependents: ";
  if(dependentRefs.length > 0){
    output += dependentRefs.join(", ");
  } else {
    output += " None";
  }
  currentCell.setNote(output);
}

이것은 대단하다. 추가 줄을 제거 할 수 있다고 생각합니다. var output = "Dependents :";
jaredcohe

잘 잡혔다. 나는 그것을 제거했다. 독수리 눈 감사합니다.
Tom Horwood

나는 이것을 매우 좋아한다! 그래도 명명 된 범위를 지원하지 않는 것이 올바르게 보입니까? 이 경우 지원을 추가하는 것이 간단하고 복잡합니까?
Wizek

2
코드를 사용하는 방법?
Ferrybig

1
menuEntries.push({name: "Trace Dependents", functionName: "traceDependents"});코드에서 라인 이 두 번 나타 납니까?
ThomasMcLeod

4

이것은 슈퍼이며 많은 작업을 절약했습니다. 감사합니다.
그러나 위의 대답은 row- 또는 column-fixer를 사용하는 참조를 찾지 못합니다 $.
코드를 다음과 같이 약간 변경하면 다음과 같은 이점이 있습니다.

function onOpen() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var menuEntries = []
  menuEntries.push({name: "Trace Dependents", functionName: "traceDependents"});
  ss.addMenu("Detective", menuEntries);
}

function traceDependents(){
  var dependents = []
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var currentCell = ss.getActiveCell();
  var currentCellRef = currentCell.getA1Notation();
  var range = ss.getDataRange();

  var regex = new RegExp("\\b" + currentCellRef + "\\b");
  var formulas = range.getFormulas();

  for (var i = 0; i < formulas.length; i++){
    var row = formulas[i];

    for (var j = 0; j < row.length; j++){
      var cellFormula = row[j].replace(/\$/g, "");
        if (regex.test(cellFormula)){
          dependents.push([i,j]);
      }
    }
  }

  var dependentRefs = [];
  for (var k = 0; k < dependents.length; k ++){
    var rowNum = dependents[k][0] + 1;
    var colNum = dependents[k][1] + 1;
    var cell = range.getCell(rowNum, colNum);
    var cellRef = cell.getA1Notation();
    dependentRefs.push(cellRef);
  }
  var output = "Dependents: ";
  if(dependentRefs.length > 0){
    output += dependentRefs.join(", ");
  } else {
    output += " None";
  }
  currentCell.setNote(output);
}

감사; 이것은 다소 도움이되었습니다. 워크 시트에서 어떻게 작동합니까?
wizonesolutions

감사합니다 Graham-변경 사항을 통합했습니다. 워크 시트에서 작업 할 때 코드는 시트 이름을 통합 한 다음 각 시트를 반복하도록 약간 조정해야합니다.
Tom Horwood
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.