web-dev-qa-db-ja.com

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

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

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

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

57
Diego Petrucci

そのために 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
51
William Jackson

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

これは達成が難しく、エラーが発生しやすいかもしれませんが(ウィリアムジャクソンのソリューション+1 BTWを引き続き使用します)、表示するには十分に興味深いと思いました。

次のようなシートがあります。

auto-sorting sheet

次の手順を使用して、新しいスクリプトを追加しました。

  • メニューで、Tools->Script Editor ...に移動します
  • 選択新しいプロジェクトの作成
  • 表示される空のコードウィンドウに、セルが編集されるたびに自動的に実行される次のコードを貼り付けます。

    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"はテーブル範囲を表します(ヘッダー行を除く)

テーブルはおそらく私のものとは異なるため、これらの値はそれに応じて調整する必要があります。

41

以下は、最初の列に基づいて自動ソートされ、ヘッダー行を前提とする一般的なスクリプトです。

スクリプトを作成するには:

  • メニューで、[ツール]-> [スクリプトエディター]に移動します。

空のコードウィンドウに、セルが編集されるたびに自動的に実行される次のコードを貼り付けます。

 // 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 } );
  }
}
10
geekzspot

スクリプトを使用しない別のオプションは次のとおりです。

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

範囲が制限されています(A1:C3)。順序が昇順の場合、空白のエントリが最初に表示されるためです。

6
pnuts

Google Sheetsには Filters という理由があり、ドキュメントに新しいシートを作成する必要はありません。

ドキュメント:https://support.google.com/docs/answer/3540681

0
Jay

スクリプトソリューションを使用するが、複数の列で並べ替える

ドロップダウンメニューの列で並べ替えてから、日付で並べ替えたいと思いました。

これを行うには、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の回答から取得したコード変更のソートはこちらシートの自動ソート

0
deepstructure