Googleスプレッドシートで、列C
などのデータを自動的に並べ替えてほしいとしましょう。
これを行うにはどうすればよいですか?
右クリックして[データの並べ替え]を選択することでデータを手動で並べ替えることができることは知っていますが、これは私が行っていることではありません。探しています。
回答
sort()
関数ですが、データを1つの場所に置き、そのデータのコピーを自動的に別の場所に並べ替える必要があります。
たとえば、次のように言います。データを含む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
コメント
回答
Google Apps Scripts を使用して、データの自動インプレース並べ替えを実現することもできます。
これは達成するのがより難しく、エラーが発生しやすいかもしれません(私はまだウィリアム・ジャクソンのソリューション、+ 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 editoredCell = sheet.getActiveCell(); var columnToSortBy = 4; var tableRange = ” A2:F99 “; if(editedCell.getColumn()== columnToSortBy){var range = sheet.getRange(tableRange); range.sort({列:columnToSortBy}); }}しかし、エラーが発生し続けます:TypeError:プロパティ”ソース”を未定義から読み取ることができません。 (2行目)これは次のコードです:var sheet = event.source.getActiveSheet();何か案は? NM、スクリプトページから実行した場合にのみエラーが発生しますが、実際のスプレッドシートでは正しく機能します
- エラーが発生し続けます:TypeError:プロパティ” source “が未定義から。 (2行目)これは次のコードです:var sheet = event.source.getActiveSheet();何か案は? NM、スクリプトページから実行した場合にのみエラーが発生しますが、実際のスプレッドシートでは正しく機能します。ここで質問…そのソートA-Z、自動ソートZ-Aに変更するにはどうすればよいですか?ありがとう
- @ drizzt09メソッドを呼び出すときは、おそらく
null
をevent
パラメーターに指定します。実際のイベントがトリガーされたときにGoogleスプレッドシートインフラストラクチャによって入力されます。 - @ drizzt09並べ替え順序を変更するには、次のように
range.sort
行を変更します。range.sort( { column : columnToSortBy, ascending: false } );
。その他の並べ替えオプションについては、 Developers.google.com/apps-script/class_range#sort - @ w0lfをご覧ください。今、私はそれに追加するか、まったく同じ機能を実行するが、開いているか更新するときに別の機能を持ちたいと思います。したがって、Excelシートを開いたり更新したりすると、4列目のコードを現在のコードで編集したときと同じように、4列目が降順で自動並べ替えられます。ありがとう
回答
スクリプトを使用しない別のオプションは次のとおりです。
=QUERY(A1:C3,"SELECT * ORDER BY C")
順序が昇順の場合、空白のエントリが最初に表示されるため、範囲が制限されます(A1:C3)。
コメント
- これをどこに入れるべきか教えていただけますか?
-
SELECT * WHERE C <> '' ORDER BY C
で空白のエントリを無視すると、現在および将来のすべての行を含めるのに十分な範囲を使用できます。
回答
ここでは、最初の列に基づいて自動ソートされ、ヘッダー行を想定する一般的なスクリプトです。
スクリプトを作成するには:
- メニューで、[ツール]-> [スクリプトエディター…]に移動します…
空のコードウィンドウに、セルが編集されるたびに自動的に実行される次のコードを貼り付けます。
// 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 } ); } }
コメント
-
var sheet = SpreadsheetApp.getActiveSpreadsheet();
ここにある’の代わりに。 - これはうまく機能しますが、これを編集してドキュメント内の1枚のシートでのみ並べ替えるにはどうすればよいですか?
- 動作しない’機能していないようです
回答
ウシスクリプトソリューションを使用しますが、複数の列で並べ替えます
ドロップダウンメニューの列で並べ替えてから、日付で並べ替えたいと思いました。
これを行うには、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のStackOverflowの回答から取得したソートコードの変更:シートの自動並べ替え
回答
ここで作成しました自動並べ替えスクリプトとスプレッドシート(シートに少し作業を加え、コードをコピーして貼り付け、範囲を設定する必要があります。複数のスタック交換の回答に基づいています
https://docs.google.com/spreadsheets/d/1LDohwCuy8HZg4YCQEOuWmgpY_WG2BVh_aH-i4JGM5BE/edit#gid=0
その記録と、最後の編集でフォーカスした範囲の値を取得し、実際の編集後の値と比較します。別の方法でテーブルを並べ替えます。
回答
GoogleSheetsにはフィルターがありますまさにこの理由で、ドキュメントに新しいシートを作成する必要はありません。
回答
Google AppScriptを使用して実行できます。シートデータに変更があると、スクリプトは自動的に並べ替えます。
Googleスプレッドシート:
[ツール] –> [スクリプトエディタ]を選択し、以下のスクリプトを貼り付けて保存します。
SHEET_NAME、SORT_DATA_RANGE、SORT_ORDER変数を対応する値に置き換えます。
SHEET_NAME = "Sheet1"; SORT_DATA_RANGE = "A1:C999"; SORT_ORDER = [ {column: 3, ascending: false}, // 3 = column number, sorting by descending order {column: 1, ascending: true}, // 1 = column number, sort by ascending order {column: 2, ascending: true} ]; function onEdit(e){ multiSortColumns(); } function multiSortColumns(){ var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getSheetByName(SHEET_NAME); var range = sheet.getRange(SORT_DATA_RANGE); range.sort(SORT_ORDER); ss.toast("Sort complete."); }
出典: https://www.idiotinside.com/2018/06/08/sort-multiple-columns-google-sheets-apps-script/
例:
= sort(Sheet1!A:C; 3; TRUE)