Google 스프레드 시트 자동 정렬에서 데이터를 만들려면 어떻게해야합니까?


57

Google 스프레드 시트가 일부 데이터 (예 : column)를 자동으로 정렬하도록한다고 가정 해 보겠습니다 C.

어떻게합니까?

마우스 오른쪽 버튼을 클릭하고 데이터 정렬을 선택하여 수동으로 데이터를 정렬 할 수 있다는 것을 알고 있지만 이것이 내가 원하는 것이 아닙니다.

답변:


51

sort()기능 을 사용할 수는 있지만 한 곳에 데이터를 보관하고 다른 장소에 해당 데이터를 자동으로 정렬해야합니다.

예를 들어, 내 데이터에 Sheet1이 있다고 가정하십시오.

   | A    | B    | C
=====================
 1 | This | this | 2
 2 | Is   | is   | 1
 3 | Test | test | 3

그런 다음 Sheet2, A1 셀 에이 기능을 넣습니다.

= 정렬 (Sheet1! A : C, 3, TRUE)

이것은 내 데이터를 보여 주지만 열 C (세 번째 열)에 따라 오름차순으로 정렬됩니다.

   | A    | B    | C
=====================
 1 | Is   | is   | 1
 2 | This | this | 2
 3 | Test | test | 3

매개 변수는 세미콜론으로 구분해야합니다. ;예 := sort(Sheet1!A:C; 3; TRUE)

2
@Petr 쉼표로 잘 작동합니다.
William Jackson

6
@ user17634 : 로케일 설정에 따라 다릅니다.
Vidar S. Ramdal

41

Google Apps 스크립트 를 사용 하여 자동으로 데이터를 자동 정렬 할 수 있습니다.

이것은 달성하기가 더 어려워지고 오류가 발생하기 쉬울 수 있습니다 (William Jackson의 솔루션, +1 BTW로 계속 갈 것입니다).

다음과 같은 시트가 있습니다.

자동 정렬 시트

다음 단계를 사용하여 새 스크립트를 추가했습니다.

  • 메뉴에서 도구 -> 스크립트 편집기로 이동하십시오.
  • 새 프로젝트 생성을 선택 하십시오.
  • 빈 코드 창이 나타나면 셀을 편집 할 때마다 자동으로 실행되는 다음 코드를 붙여 넣습니다.

    function onEdit(event){
      var sheet = event.source.getActiveSheet();
      var editedCell = sheet.getActiveCell();
    
      var columnToSortBy = 4;
      var tableRange = "B3:E9";
    
      if(editedCell.getColumn() == columnToSortBy){   
        var range = sheet.getRange(tableRange);
        range.sort( { column : columnToSortBy } );
      }
    }
    
  • 시트로 돌아가서 값을 가지고 놀기 시작하여 매번 테이블 정렬을 자동으로 봅니다.

노트 :

위 스크립트에서

  • 4은 D 열의 인덱스를 나타냅니다 ( Value열-정렬 할 것)
  • "B3:E9"은 테이블 범위를 나타냅니다 (헤더 행 제외).

당신의 테이블은 아마도 내 것과 다를 것이므로,이 값들은 그에 따라 조정되어야합니다.


나는 당신의 [편집 된] 함수를 시도했습니다. onEdit (event) {var sheet = event.source.getActiveSheet (); var editedCell = sheet.getActiveCell (); var columnToSortBy = 4; var tableRange = "A2 : F99"; if (editedCell.getColumn () == columnToSortBy) {var range = sheet.getRange (tableRange); range.sort ({열 : columnToSortBy}); }} 오류가 계속 발생합니다. TypeError : 정의되지 않은 "source"속성을 읽을 수 없습니다. (라인 2) 다음 코드입니다. var sheet = event.source.getActiveSheet (); 어떤 아이디어? 스크립트 페이지에서 실행할 때 NM 만 오류를 얻을 수 있지만, 실제 spreadshee에 제대로 작동
drizzt09

그러나 오류가 계속 발생합니다. TypeError : 정의되지 않은 속성 "source"를 읽을 수 없습니다. (라인 2) 다음 코드입니다. var sheet = event.source.getActiveSheet (); 어떤 아이디어? NM, 스크립트 페이지에서 실행할 때만 오류가 발생하지만 실제 스프레드 시트에서 제대로 작동합니다. 이제 질문 ... 정렬 AZ, 어떻게 자동 정렬 ZA로 변경합니까? 감사
drizzt09 1

@ drizzt09 메소드를 호출 할 때 매개 변수에 null대해 지정했을 수 있습니다. event그렇지 않으면 실제 이벤트가 트리거 될 때 Google 스프레드 시트 인프라에서 올바르게 채워집니다.
Cristian Lupascu

3
@ drizzt09 정렬 순서를 변경하려면 다음 range.sort과 같이 줄을 변경하십시오 range.sort( { column : columnToSortBy, ascending: false } ); . 정렬 옵션에 대한 자세한 내용은 developers.google.com/apps-script/class_range#sort
Cristian Lupascu

@ w0lf 감사합니다. 이제 나는 그것에 추가하거나 똑같은 기능을 수행하지만 열기 또는 새로 고침시 별도의 기능을 갖고 싶습니다. 따라서 Excel 시트를 열거 나 새로 고치면 4 번째 열의 코드를 현재 코드로 편집 할 때와 동일하게 4 번째 열을 자동으로 내림차순으로 정렬합니다. 감사합니다

10

첫 번째 열을 기준으로 자동 정렬하고 헤더 행을 가정하는 일반 스크립트는 다음과 같습니다.

스크립트를 만들려면

  • 메뉴에서 도구-> 스크립트 편집기 ...로 이동하십시오.

빈 코드 창에서 셀을 편집 할 때마다 자동으로 실행되는 다음 코드를 붙여 넣습니다.

 // LinkBack to this script:
 // http://webapps.stackexchange.com/questions/7211/how-can-i-make-some-data-on-a-google-spreadsheet-auto-sorting/43036#43036

 /**
 * Automatically sorts the 1st column (not the header row) Ascending.
 */
function onEdit(event){
  var sheet = event.source.getActiveSheet();
  var editedCell = sheet.getActiveCell();

  var columnToSortBy = 1;
  var tableRange = "A2:T99"; // What to sort.

  if(editedCell.getColumn() == columnToSortBy){   
    var range = sheet.getRange(tableRange);
    range.sort( { column : columnToSortBy, ascending: true } );
  }
}

3
나는 var sheet = SpreadsheetApp.getActiveSpreadsheet();여기에있는 것 대신에 해야한다는 것을 알았습니다 .
dldnh

이것은 훌륭하게 작동하지만 어떻게 문서의 단일 시트에서만 정렬되도록 편집 할 수 있습니까?
moobot

작동하지 않는 것 같습니다
shadowz1337

6

스크립트가없는 다른 옵션은 다음과 같습니다.

=QUERY(A1:C3,"SELECT * ORDER BY C")  

순서가 오름차순 인 빈 항목이 먼저 나타나므로 범위가 제한됩니다 (A1 : C3).


4
이 부분을 어디에 두어야하는지 알려 주시겠습니까?
Louis Tran

1
SELECT * WHERE C <> '' ORDER BY C빈 항목을 무시 하는 데 사용할 수 있으며 현재 및 미래의 모든 행을 포함하기에 충분한 범위를 사용할 수 있습니다.
거스

0

스크립트 솔루션을 사용하지만 둘 이상의 열을 기준으로 정렬

드롭 다운 메뉴 열을 기준으로 정렬 한 다음 날짜별로 정렬하고 싶었습니다.

이렇게하려면 Cristian 또는 geekspotz의 코드 스 니펫 중 "range.sort"행을 다음과 같이 수정하십시오.

// Sorts descending by edited column, then ascending by column 1 
// Note the use of an array
range.sort([{column: columnToSortBy, ascending: false}, {column: 1, ascending: true}]);

차이점은 전체 문장 (배열) 주위에 직선 괄호를 추가하고 쉼표로 정렬을 구분하는 것입니다.

Serge의 스택 오버플로 답변에서 가져온 정렬 코드 수정 : 여기에서 자동 정렬


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.