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

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

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

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

3435閲覧

実行ボタンを押すと、出席できる人の戦闘力を均等に必要に応じたグループ数に分配したい

yuiu

総合スコア17

Google スプレッドシート

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2020/08/17 23:15

編集2020/08/17 23:38

やりたいことイメージ
・【戦闘力まとめシート】について
戦闘力のデータシートです。
このシートの値を抽出し、Bシートでグループ分けしたいイメージです。
イメージ説明

・【グループ分けシート】について
赤い実行ボタンを押すと、
グループ分けしたい班の数に応じて戦闘力まとめシートから抽出した内容をグループ分けシートに均等に自動でグループ分けするイメージです。
イメージ説明

・【グループ分けシート】の実行ボタンを押した際にやりたいこと(順不同)
1 【戦闘力まとめシート】の出席できる方(○、×、△の三種類)のみ抽出し、ついでに職業と戦闘力も抽出する。(実際は100人います。)
※ ○ と △ のみ抽出する。 × は抽出しない。
2 【グループ分けシート】のユーザーが入力した[グループ分けしたい班の数]に応じてグループ分けできること(実際は20グループくらいになる予定です。)
3 【グループ分けシート】戦闘力の数値を均等に各グループに分配したい。
4 【グループ分けシート】には名前だけじゃなく、職業と戦闘力も記載されるようにしたい。
5 【グループ分けシート】グループ分けの条件は [グループ数] と [出欠] と [戦闘力] の3つのみ。(職業はグループ分けの条件に含まない。)

自分の検索したこと
・JS,GASでコードかけるのか。と思い「データ集計、グループ分け」などで検索したが、近しいものが何も検索にヒットしない。
・JS,GASでコードをかくことに拘ってはいないので、何か関数で何かできるのか。と検索したが自分のやりたいことに近しいものはヒットせず・・・。
どうやればいいのか全くわからず困っています。

よろしくお願い致します。m(_ _)m

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

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

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

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

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

guest

回答2

0

スプレッドシートを使っているならGASが使えます。
使用感はJavascriptと同じなのでとっつきやすいと思います(画面上部の「ツール」から「スクリプトエディタ」でエディタを開けます)。

例えば抽出する場合

GAS

1// シートを取得 2var sheet = SpreadsheetApp.openById("スプレッドシートID").getSheetByName("戦闘力まとめ"); 3// シートをA2からA列に文字が入っている行を全て取得 4const datas = sheet.getRange("A2:D").getValues() 5 .filter(function (e) { return e[0] !== '' }); 6var filterdDatas = []; 7// 1行ずつ処理 8for (var i = 0; i < datas.length; i++) { 9 var row = datas[l]; 10 // B列が`×`でないならfilterdDatasに追加 11 if(row[1] !== '×'){ 12 filterdDatas.push(row); 13 } 14}

のように書くことができます。
書き込みも同様にシート名と書き出し範囲を指定して行うことができます。
書き込みは下記の記事が参考になります。

投稿2020/08/17 23:31

編集2020/08/18 13:26
nekoniki

総合スコア2409

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

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

0

ベストアンサー

やりたいことをGASや関数で処理できるように落とし込むと、

1.まとめシートを出欠の〇、△でフィルター
2.戦闘力の高い方から降順に並び替え
3.グループのメンバーの戦闘力合計値が一番低いグループに上から順にメンバーを入れていく
4.グループ分けシートに書き出し

って流れですかね。このままだと、どうしても毎回戦闘力トップの人がグループ1に入っちゃうので、上位メンバー(グループに入れていく1巡目)をランダムに並び替えしてから、3の処理とした方がいいかも。

GASでやった方が良さそうですが、作業用シートを用意してQueryで1,2を実行すれば関数でも多分可能。

あとは自力で作れるとこまで頑張ってください。

投稿2020/08/19 05:07

sawa

総合スコア3002

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問