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

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

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

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

Google Apps Script

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

Q&A

1回答

5624閲覧

【GAS】空白のセルは読み込まないようにする

veruvi

総合スコア5

Google スプレッドシート

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

Google Apps Script

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

0グッド

0クリップ

投稿2020/03/05 05:06

###現在の挙動
■複数の Google スプレッドシートのデータを集約する
https://qiita.com/kz_takatsu/items/a89e89a4c5e82414ae3f

スプレッドシートの別シートに指定してある、読み込み領域に達するまで、
空白を無視して処理してしまう
※領域に達すると次のスプレッドシートを読み込む
※尚、空白を無視して処理してしまいますが、対象のセルには数式などは含まれていません

前提・実現したいこと

空白は処理しないようにする
→ 空白の場合は次のスプレッドシートを読み込むor
→ 空白の結果は反映しない

### コード全文

// Sidebar.htmlをテンプレートにHTMLServiceを生成
// Sidebar.htmlが必要
function showSidebar() {
var ui = HtmlService.createTemplateFromFile('Sidebar')
.evaluate()
.setTitle("シート集計");
SpreadsheetApp.getUi().showSidebar(ui);
}

// スプレッドシートを開いたときに呼ばれる
function onOpen() {
showSidebar();
}

// 集計対象フォルダ以下のファイルを集計
function aggregateData() {
var cfg = getConfig();
var targetFolder = DriveApp.getFoldersByName(cfg['集計対象フォルダ']).next();
var files = targetFolder.getFiles();
Logger.log(files);

var outputSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(cfg['書き込み先シート']);
if (! outputSheet) {
var sheetName = String(cfg['書き込み先シート']);
Logger.log(sheetName);
outputSheet = SpreadsheetApp.getActiveSpreadsheet().insertSheet(sheetName);
}
outputSheet.clear();

var curRow = 1;
var fileList = [];
while(files.hasNext()){
var file = files.next();

var spreadsheet = SpreadsheetApp.open(file); var sheet = spreadsheet.getSheets()[0]; var id = sheet.getRange(cfg['識別子']).getValue(); fileList.push( { "fileName": file.getName(), "id": id } ); var srcRange = sheet.getRange(cfg['読み込み領域']); outputSheet.getRange(curRow, 2, srcRange.getHeight(), srcRange.getWidth()) .setValues(srcRange.getValues());

//var lastRow = outputSheet.getLastRow()+1;
outputSheet.getRange(curRow, 1, srcRange.getHeight(), 1)
.setValue(id); // 識別子の書き込み
curRow += srcRange.getHeight() - 1;
}

return fileList;
}

// 集計設定という名前のシートを読み込んで key-valueに落とし込む
function getConfig() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var cfgSheet = ss.getSheetByName("集計設定");
var cfgValues = cfgSheet.getDataRange().getValues();
var cfg = {};

for (var i=0; i<cfgValues.length; i++) {
cfg[cfgValues[i][0]] = String(cfgValues[i][1]);
}
return cfg;
}

### 試したこと
①セルに使用しているUNIQUE関数のせいかと思い「あ、い、う、え、お」に置き換えたが挙動は変わらない
②他のセルの記入されている行数が影響していると思い消したが変わらない
③実際5行までしか数式は入れずにやってみたけど最後まで空白処理してしまう

雑になってしまい申し訳ございません
スクリプト知識が無味なため、このような形となっております
よろしくお願いいたします

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

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

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

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

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

guest

回答1

0

cfg['読み込み領域']が空白を考慮していないからだと思います。
多分 "A1:M10" とか書いているのだと思いますので、それを空白がない範囲に限定すればいいと思います。(8行しかデータがないなら A1:M8にする、など)

投稿2020/03/05 13:48

papinianus

総合スコア12705

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

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

veruvi

2020/03/13 09:06

ソースコードで空白がない範囲に限定することはできませんか? 読み込むシートがいくつもあり、それぞれがばらばらの行になってます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問