質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

置換

置換とは文字列中の特定の文字に対して、別の文字列に置き換えることを指します。

Q&A

解決済

1回答

742閲覧

GASを使って 年月日時→年月日に置換

maccori7

総合スコア1

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

置換

置換とは文字列中の特定の文字に対して、別の文字列に置き換えることを指します。

0グッド

1クリップ

投稿2022/01/07 15:19

前提・実現したいこと

GASを使い、「2022/1/6 23:04」→「2022/1/6」のような変換を行いたいです。
以下では、(13,7)のセルから最下行までをコピーし、(13,2)のセルから最下行にペースト、
その後貼り付け後の値に対して、上記の変換をしようとしています。

発生している問題・エラーメッセージ

現状、以下のコードで実行するとエラーはでず、
コピー&ペーストまではできるのですが、
置換ができていない状態です。

該当のソースコード

function

1 2var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("db"); 3var lastRow1 = sheet.getRange(13,7).getNextDataCell(SpreadsheetApp.Direction.DOWN).getRow(); 4var lastRow2 = sheet.getRange(13,2).getNextDataCell(SpreadsheetApp.Direction.DOWN).getRow(); 5var getsourcedata = sheet.getRange(13,7,lastRow1); 6var destination = sheet.getRange(13,2,lastRow1); 7var timerecord = /\s[0-9][0-9]:[0-9][0-9]/; 8getsourcedata.copyTo(destination); 9var destination2 = sheet.getRange(13,2,lastRow2); 10destination2.getValue().replace(/\s[0-9][0-9]:[0-9][0-9]/g,''); 11}

試したこと

getValue()の他、toString()なども試しましたが同じでした。
正規表現でヒットしていないように思うのですが対応方法がわかりません。
お手数ですが、御指南いただけますと幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

こんにちは。

セルには文字列として 2022/1/6 23:04 と入力してあっても、getValue() で出力の際に、日付型で認識されているのかなと思います。

デバッグかログ出力してみるとわかると思います。
destination2.getValue() だと、コピーした先の最初の値かと思います。

JavaScript

1var value = destination2.getValue(); 2 3// ログに書き出してみる 4// おそらく 2022/1/6 23:04 ではなく Thu Jan 06 09:04:00 GMT-05:00 2022 とか? 5Logger.log(value); 6 7// 日付型だったら、フォーマットする 8var convertedValue = Utilities.formatDate(value,"JST", “yyyy/MM/dd”); 9

なにかの参考になれば幸いです。
置換する場合は、ループで実施になるような気がします。

投稿2022/01/08 03:29

suama

総合スコア1997

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maccori7

2022/01/09 08:50 編集

お忙しいところアドバイスをありがとうございました! log書き出しを行ってみたところ、「情報 2022/1/6 23:04」と出てきました。 フォーマットを使用して、以下の形で実現できました。 ```function replacedate2() { var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("db"); var lastRow1 = sheet.getRange(13,7).getNextDataCell(SpreadsheetApp.Direction.DOWN).getRow(); var lastRow2 = sheet.getRange(13,2).getNextDataCell(SpreadsheetApp.Direction.DOWN).getRow(); var lastRow3 = sheet.getRange(13,3).getNextDataCell(SpreadsheetApp.Direction.DOWN).getRow()-12; var getsourcedata = sheet.getRange(13,7,lastRow1-12);//右側のソース範囲 var destination = sheet.getRange(13,2,lastRow3-12);//貼り付け先範囲 Logger.log(lastRow1);//ソース行の最下行 Logger.log(lastRow2);//貼り付け先の最下行 Logger.log(lastRow3);//3列目の最下行-12 changedate1 = new Date(getsourcedata.getValue());//2022/1/6 23:04 Logger.log(changedate1); var changedate2 = Utilities.formatDate(changedate1,"JST", "yyyy/MM/dd");//2022/01/06 Logger.log(changedate2); var sourcedata = sheet.getRange(13,7,lastRow3);//7列目の値がある範囲 var sourcedata2 = sourcedata.setValue(changedate2);//代入 sourcedata2.copyTo(destination);//B列に貼り付け } ```
suama

2022/01/09 09:44

よかったです!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問