質問: ### 前提・実現したいこと Googleスプレッドシートを開き A列からD列まで入力し、C列とD列を範囲指定してD列を基準に 昇順並べ替えをしたいです。 ### 発生している問題・エラーメッセージ 指定した範囲の、データが含まれているデータのみを指定して 並べ替えをしたいがうまくいきません。 自分でいろいろ調べ、いろんな方の実用例等を参考にしましたが まったくの初心者でこの次をどうしていいのか分かりません。 ``` function myFunction() { var spreadsheet=SpreadsheetApp.getActiveSpreadsheet(); var sheet=spreadsheet.getSheets()[0]; var lastcol=sheet.getRange("D:D").getValues(); var lastrowD=lastcol.filter(String).length; }; ``` ### 試したこと 初心者なりに見様見真似で以下のコードを書いて並べ替えは成功しますが ascending:trueと最後に記載すると空白部分が一番上にきて データ入力されたセルが後ろのほうに並べ替えてしまいます。 また、falseにすると空白セルは後ろへいき、入力されたデータは上にくるのですが D列に記載した番号が当たり前ですが「10.9.8.7..」となります。 なので空白セルは除いた並べ替えがしたいと思い、上記に記載したコードを 調べながら書きましたが分からなくなってしまいました。 ``` function myFunction() { var spreadsheet=SpreadsheetApp.getActiveSpreadsheet(); var sheet=spreadsheet.getSheets()[0]; var lastrow=sheet.getLastRow(); var lastcol=sheet.getLastColumn(); sheet.getRange(1, 3, lastrow, lastcol).sort({column: 4, ascending: false}); } ``` ### 補足情報(FW/ツールのバージョンなど) まったくの初心者で関数が少しわかる程度の者です。 業務でGoogleスプレッドシートを使う事が多く、業務効率化とスキルアップで GASの存在を知り勉強し始めて、手始めに今回の並べ替えを自分でやってみようと したところさっそく行き詰った次第でございます。 レベルの低い質問でお恥ずかしいですがご教授ください。 ### 補足情報(シートデータの具体的な内容) 質問があったのでシートデータの内容を記載します。 不備ございましたら教えてください。 内容としては商品の在庫確認するための商品リストとチェックリストの フォーマットです。 『シート1』商品リスト セルA:1.2.3.4..といった番号 セルB:商品の区分(例:冷蔵庫/エアコン/テレビ) セルC:型番+日付 セルD:セルCには型番以外に日付まで入っているため純粋な型番を抽出するため 関数のMIDを使って型番を抽出 『シート2』チェックリストのフォーマット セルA:1.2.3.4..といった番号 セルB:VLOOKUPでセルAの番号を検索キーとし、シート1から型番を反映 セルC:作業者が現物確認できたら✔を書き込む用の空白枠
回答: dodox86さんが試して頂き、正常に作動したとの事で私も別のスプレッドシートに適当に作ったデータを並べ替えましたが、下記のコードで正常に昇順で並べ替えが出来ました。 改めて並べ替えしたいデータを確認しました。 『シート1』の商品リストには以下のように記載してあります。 セルA:1.2.3.4..といった番号 セルB:商品の区分(例:冷蔵庫) セルC:日付+型番 (例:20190415-AB123-45) セルD:セルCには型番以外に日付まで入っているため純粋な型番を抽出するため関数のMIDを使って型番を抽出(例:AB123-45) やりたい事:セルDをキーとして昇順並べ替えをしたい。 問題:昇順並べ替えををすると”空白”が上にきて型番が記載されたセルが下に並べ替えされる。 原因:セルDには一見空白に見えても関数の入っているセルがあった。 対処:不必要な関数の記載されたセルは削除し、ascending: trueでソースコードを書き直すと正常に並べ替えが出来ました。 そもそも、コードが間違っているという所ではなく初歩から間違っておりました・・・。 大変お恥ずかしい限りですがコメントしてくださり誠にありがとうございました。 ``` function myFunction() { var spreadsheet=SpreadsheetApp.getActiveSpreadsheet(); var sheet=spreadsheet.getSheets()[0]; var lastrow=sheet.getLastRow(); var lastcol=sheet.getLastColumn(); sheet.getRange(1, 3, lastrow, lastcol).sort({column: 4, ascending: true}); } ```