アプリ版:「スタンプのみでお礼する」機能のリリースについて

皆さんのお知恵をお借りしたいです。宜しくお願いします。
今回、私が解決したい内容は複数のセルに入力された文字を1つのセル内に統合したいのです。
但し、例えば、A1に入力された苗字と、B1に入力された名前を、C1に統合するのであれば出来るのですが、
私の業務では、毎日入荷する商品と、欠品している店舗がそれぞれ異なる為、統合する対象セルの行数が毎日異なるのです。
そこで具体的な例を添付します。
欠品中の店舗は毎日異なるので、例では8行目から20行目となっていますが、これが8行目から10行目の時もありますし、8行目から50行目もしくはそれ以上になる事もあります。

私が理想とする結果はC列になります。
入庫した商品の型番を入力すると、それが欠品している店舗のみをC列のセル内に統合したいです。

エクセルでは無く、Googleスプレッドシートで作業しています。
更に付け加えると、1行目から5行目に関しては、D列より右側のセルは利用できませんが、
7行目以降に関してはC列より右側のセルも利用が可能です。

何卒宜しくお願い致します。

「【Googleスプレッドシート】複数のセ」の質問画像

質問者からの補足コメント

  • 親身なご対応に本当に感謝の気持ちしかありません。
    [shift][tab]...字下げの意味も分からず言うとおりにやってみたところ、感動しました。
    気持ちよかったです 笑

    そこで、このパターンだとどう変更すればよろしいでしょうか?

    ちなみに、A列に関しては19行目が見出しになります。
    最大で55行目までありますが、すべての行が埋まった事はありません。
    沢山入力ができるように余裕をもって55行目まで枠を作っています。

    また欠品店リストは必ず90行目が見出しになります。
    型番はE91から入力されます。
    型番については、実は非常に多いです。
    品切れ店舗と、実は商品名もパソコンはパソコンでも複数の品番があるので、
    それこそ300行目まで利用する事を想定しています。

    最初の質問と違う!と怒られても仕方がないのですが、、
    まさかこのような回答を頂けるとは夢にも思わなかったのでご寛容ください><

    「【Googleスプレッドシート】複数のセ」の補足画像1
    No.3の回答に寄せられた補足コメントです。 補足日時:2019/11/04 19:16

A 回答 (7件)

補足の件はこれでできると思います。


---
// 在庫切れの店舗リストの書き出し
function outOfStockStoresListExport() {

// スプレッドシートを取得する
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();// Container Bound Script
var sheet = spreadsheet.getSheets()[0];// シート数を指定して取得
var lastRow = sheet.getLastRow();

// 出力型番を取得する
var models = sheet.getRange(20, 3, 55, 1).getValues();// 型番

// 出力店舗リストを作成する1
var storesList = [];// 型番, 店舗一覧
for (var i=0; i < models.length; i++) {
if (models[i][0]=='') {
break;
}
for (var j=0; j < storesList.length; j++) {
if (models[i][0]==storesList[j][0]) {
continue;
}
}
if (j==storesList.length) {
storesList.push([models[i][0], '']);
}
}

// 欠品中の店舗を取得する
var records = sheet.getRange(91, 1, lastRow-90, 5).getValues();// 店舗, '', '', '', 型番

// 出力店舗リストを作成する2
for (var i=0; i < storesList.length; i++) {
for (var j=0; j < records.length; j++) {
if (storesList[i][0]==records[j][4]) {
storesList[i][1] = storesList[i][1] + [',', ''][Number(storesList[i][1]=='')] + records[j][0];
}
}
}

// 出力店舗リストを出力する
for (var i=0; i < storesList.length; i++) {
sheet.getRange(i+20, 1).setValue(storesList[i][1]);
}
}
「【Googleスプレッドシート】複数のセ」の回答画像7
    • good
    • 2
この回答へのお礼

手とり足とり教えて頂き本当にありがとうございます!
これで永い間苦労してきた事を解決する事が出来ました。
Androさんのおかげです。
Androさんには他人を豊かにする力があると思います!

お礼日時:2019/11/06 10:02

回答No.1です。

続きです。
4. 画面右下の「+トリガーを追加」というボタンを押します。
5. [トリガーを追加]ダイアログが表示されます。
6. ここで「自動実行したい関数」「タイミング等…」を入力して[保存]すれば、設定したタイミングで関数が自動実行されます。
7. 「トリガー管理画面」「プロジェクト管理画面」ともに「︙」メニューの左隣の「ペンマーク」を押下すると編集が可能です。
「【Googleスプレッドシート】複数のセ」の回答画像6
    • good
    • 2

回答No.1です。

ちなみにスクリプトは自動実行できます。Google Apps Script はクラウド上で実行されるので、トリガーを設定しておけばPCを閉じていても自動で実行されます。
1. まずは、以下のURLを開いて自分のプロジェクトを見てみましょう。
https://script.google.com/home
2. 自動実行したいプロジェクトがあれば、右端の「︙」メニューから[トリガー]を選択します。
3. トリガー画面が表示されます。
「【Googleスプレッドシート】複数のセ」の回答画像5
    • good
    • 2

もし、自分でスクリプトに変更を加えたら必ず保存をしましょう。

「【Googleスプレッドシート】複数のセ」の回答画像4
    • good
    • 2

回答No.1です。


ちなみに貼り付けたスクリプトを[ctrl][A]ですべて選択して、[shift][tab]を押すと、全文のインデント(字下げ)が自動で設定されます。
この回答への補足あり
    • good
    • 1
この回答へのお礼

インデント(字下げ)の自動設定には、ただただ感動しました!
ありがとうございます!

お礼日時:2019/11/04 20:13

回答No.1です。


1. スプレッドシートのメニューバーの[ツール][スクリプトエディタ]を選択すると、スクリプトエディタが開きます。
2. 回答No.1のスクリプトを貼り付けて、スクリプトエディタのアイコンバーから、「myFunction」という関数名を選択して[▶]実行しましょう。

※最後の見出しが、「// 店舗一覧を連結する」になってますが、「// 店舗一覧を出力する」に訂正します。
「【Googleスプレッドシート】複数のセ」の回答画像2
    • good
    • 1
この回答へのお礼

親切・丁寧にご教示頂き本当にありがとうございます!

お礼日時:2019/11/04 20:08

これでできるよ。


【 Google Apps Script 】
function myFunction() {

// スプレッドシートを取得する
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();// Container Bound Script
var sheet = spreadsheet.getSheets()[0];// シート数を指定して取得
var lastRow = sheet.getLastRow();

// 欠品中の店舗を取得する
var records = sheet.getRange(8, 1, lastRow-7, 2).getValues();// 店舗, 型番

// 型番見出しを作成する
var listOfStores = [];// 型番, 店舗一覧
for (var i=0; i < records.length; i++) {
for (var j=0; j < listOfStores.length; j++) {
if (records[i][1] == listOfStores[j][0]) {
break;
}
}
if (j == listOfStores.length) {
listOfStores.push([records[i][1], '']);
}
}

// 店舗一覧を連結する
for (var i=0; i < listOfStores.length; i++) {
for (var j=0; j < records.length; j++) {
if (listOfStores[i][0] == records[j][1]) {
listOfStores[i][1] = listOfStores[i][1] + [',', ''][Number(listOfStores[i][1]=='')] + records[j][0];
}
}
}

// 出力型番を取得する
var models = sheet.getRange(2, 2, 4, 1).getValues();

// 店舗一覧を連結する
for (var i=0; i < models.length; i++) {
for (var j=0; j < listOfStores.length; j++) {
if (models[i][0] == listOfStores[j][0]) {
sheet.getRange(i+2, 3).setValue(listOfStores[j][1]);
}
}
}
}
「【Googleスプレッドシート】複数のセ」の回答画像1
    • good
    • 1
この回答へのお礼

私が想像すら出来なかったまさに神回答です!
感謝の言葉しかありません!

お礼日時:2019/11/04 20:11

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!