Googleスプレッドシートの自動並べ替えでデータを作成するにはどうすればよいですか?


57

Googleスプレッドシートで、列などの一部のデータを自動的に並べ替えたいとしますC

それ、どうやったら出来るの?

右クリックして[ データの並べ替え ]を選択すると、手動でデータを並べ替えることができますが、これは私が探しているものではありません。

回答:


51

そのためsort()関数を使用できますが、データをある場所に配置し、そのデータのコピーを別の場所に自動的にソートする必要があります。

たとえば、データを含むSheet1があるとします。

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

次に、Sheet2、セルA1にこの関数を配置します。

= sort(Sheet1!A:C、3、TRUE)

これにより、データが表示されますが、列C(3番目の列)で昇順で並べ替えられます。

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

パラメータはセミコロンで区切る必要があります。;例:= sort(Sheet1!A:C; 3; TRUE)

2
@Petrカンマを使用すればうまく機能します。
ウィリアムジャクソン

6
@ user17634:それはあなたのロケール設定に依存します。
ヴィダールS.ラムダル

42

Google Appsスクリプトを使用して、データの自動インプレースソートを実現することもできます。

これは達成が難しく、エラーが発生しやすいかもしれません(ウィリアムジャクソンのソリューション+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();を試しました。vareditedCell = sheet.getActiveCell(); var columnToSortBy = 4; var tableRange = "A2:F99"; if(editedCell.getColumn()== columnToSortBy){var range = sheet.getRange(tableRange); range.sort({column:columnToSortBy}); }}しかし、エラーが発生し続ける:TypeError:未定義からプロパティ「ソース」を読み取ることができません。(行2)これは次のコードです:var sheet = event.source.getActiveSheet(); 何か案は?NM、スクリプトページから実行した場合にのみエラーが発生しますが、実際のスプレッドシートでは正しく動作します
drizzt09

エラーが発生し続ける:TypeError:未定義からプロパティ「ソース」を読み取ることができません。(行2)これは次のコードです:var sheet = event.source.getActiveSheet(); 何か案は?NM、スクリプトページから実行した場合にのみエラーが発生しますが、実際のスプレッドシートでは正常に機能します。さて、質問...そのソートAZ、どうすれば自動ソートZAに変更できますか?ありがとう
drizzt09

@あなたはおそらく指定するメソッドを呼び出すdrizzt09 nullのためにevent実際のイベントがトリガされたときにそうでない場合、適切Googleスプレッドシートインフラストラクチャによって移入されたパラメータを、。
クリスチャンルパスク

3
@ drizzt09変更、ソート順を変更するにはrange.sort、このような行を:range.sort( { column : columnToSortBy, ascending: false } ); 。その他の並べ替えオプションについては、developers.google.com
apps

@ 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
これをどこに置くべきか教えてください。
ルイ・トラン

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のStack Overflowの回答から引き出されたコード変更のソートはこちらシートでの自動ソート


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.