A列 買い物リスト サラダ ご飯 パン ご飯 サラダ ご飯 スープ
から
サラダ 2 ご飯3 パン1 スープ1
という風に単語と個数を調べるのにはどうすればいいのでしょうか??
※サラダなどの項目は決まっておらず、変動します。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
あくまでも目的を果たすだけなら、わざわざGASを使用する必要はありませんよ。
一例ですが、組み込み関数で事足ります。
例)A列3行目からデータが存在
B列3行目に =UNIQUE(A3:A)
を入力。
C列3行目に =ARRAYFORMULA(IF(B3:B<>"",COUNTIF(A3:A,B3:B),""))
を入力。
その他、QUERY()
を使っても可能かと思います。
投稿2018/02/07 02:44
退会済みユーザー
総合スコア0
0
ベストアンサー
スクリプトでの集計例です。配列で集計結果を得られます。
itemDataResult_aとitemDataResult_bいずれも同じ結果を返します。
A3以下にデータ部分があるものとします。
function myFunction() { var Sp = SpreadsheetApp.getActiveSpreadsheet();//アクティブスプレッドシート指定でオブジェクト代入 var Sh = Sp.getActiveSheet();//アクティブシートオブジェクト代入 var itemData = [];//買い物リスト格納用配列の宣言 var StartRow = 3;//買い物リストの開始行を宣言して代入 var lastRow = Sh.getLastRow();//データの入っている最終行数の取得 Logger.log('最終行数:' + lastRow);//ログ出力 itemData = Sh.getRange(StartRow,1,lastRow-StartRow,1).getValues()//配列itemDataにセル値を押し込む Logger.log('セルデータ取得配列:' + itemData); var itemDataResult_a = [[]];//買い物リスト集計結果格納用配列の宣言:① var itemDataResult_b = [];//買い物リスト集計結果格納用配列の宣言:② var itemCounter = 0;//アイテム種数カウンタ変数宣言と代入(①に必要) for (var i = 0; i<itemData.length ; i++){ if (itemData[i][0] == ""){continue}//カウント済のアイテムで空白が既にセットされていればスルー var tmpCounter = 1;//アイテム発生数カウンタ変数宣言と代入 for (var j = i+1 ;j<itemData.length; j++){ if (itemData[i][0] == itemData[j][0]){//同じアイテムが後方に見つかったら tmpCounter += 1;//アイテム発生数カウンターに1加える itemData[j][0]="";//同じアイテムの2個目以降のデータを空白にする } } itemDataResult_a[itemCounter]=[itemData[i][0],tmpCounter];//①集計結果配列へ格納 itemDataResult_b.push([itemData[i][0],tmpCounter])//②集計結果配列へ格納 itemCounter += 1//アイテム種数カウンタに1を加える } //①シートC3~D列に集計結果配列を一斉書き込み Logger.log('集計配列_a:' + itemDataResult_a); Sh.getRange(1,3,lastRow,2).clearContent()//①シートC~D列をクリア Sh.getRange(1,3).setValue('発生数itemDataResult_a')//①C1に表題セット Sh.getRange(3,3,itemDataResult_a.length,2).setValues(itemDataResult_a); //②シートE3~F列に集計結果配列を一斉書き込み Logger.log('集計配列_b:' + itemDataResult_b); Sh.getRange(1,6,lastRow,2).clearContent()//②シートE~F列をクリア Sh.getRange(1,6).setValue('発生数itemDataResult_b')//②E1に表題セット Sh.getRange(3,6,itemDataResult_b.length,2).setValues(itemDataResult_b); }
投稿2018/02/07 07:55
編集2018/02/07 09:07総合スコア107
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
ご回答ありがとうございます!
2通りの方法をあげていただきとてもわかりやすく コメントつきで
丁寧なご回答に感謝しております!
処理も早いのでとても嬉しく思います!
GASを使ってとのことでしたので、ベストアンサーにさせていただきます!
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/02/07 06:37
退会済みユーザー
2018/02/07 07:50
2018/02/07 18:00