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

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

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

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

Google Apps Script

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

Q&A

解決済

2回答

308閲覧

スプレッドシートで別シートをもとに組み合わせの可否を求めたい

teratailuser123

総合スコア16

Google スプレッドシート

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

Google Apps Script

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

0グッド

0クリップ

投稿2022/09/17 12:54

編集2022/09/18 09:31

スプレッドシートでシートを参照して組み合わせの可否を求めたいのですが、どのように関数を組めば良いか分からず質問させていただきました。
口頭の説明が難しいため以下の表をまずご覧ください。

シート1

ABCDE
a
b
c
d
e

シート2

ABCDEabcde
2022/06/102022/04/102022/05/142022/06/252022/04/302022/04/092022/09/172022/05/212022/06/042022/05/05
2022/05/072022/06/112022/09/172022/06/042022/07/162022/07/172022/05/142022/08/062022/07/09
2022/06/042022/07/152022/07/012022/08/082022/07/09

シート1希望結果

ABCDE
a
b×
c×
d××
e

上記のようにA〜Eの日付の記録とa〜eの日付の記録をもとに同じ日付があった場合にバツを入れたいのですが、方法が全く思い浮かばず、検索ワードすら浮かばない状態です。
方法でなくとも検索ワードや必要な関数だけでも良いのでご教授いただけますと幸いです。

また、関数のみで行え場合はGASを使用することも視野に入れていますが、いずれにしても方法はおろか検索ワードすら分からず、GASが必須の場合も解決の手かがりだけでも教えていただけますと助かります。

質問内容に不備や、不足がございましたら申し訳ないのですがどうかご指摘ください。

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

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

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

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

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

sawa

2022/09/18 02:52

希望結果の方、b-C や d-E には×が入らないんですか?
teratailuser123

2022/09/18 09:31

ご指摘ありがとうございます。 見落としていました。 申し訳ございません。
sawa

2022/09/18 12:15

修正ありがとうございます。 関数でやる場合の回答を入れておきました。
guest

回答2

0

ベストアンサー

最近使えるようになった LAMBDAを使った式を。シート2の適当なセルに以下で。

GoogleSheets

1=LAMBDA(target1,target2,MAKEARRAY(COLUMNS(target2)+1,COLUMNS(target1)+1,LAMBDA(r,c,IFS(AND(r=1,C=1),"",r=1,INDEX(target1,r,c-1),c=1,INDEX(target2,c,r-1),true,IF(COUNTA(INDEX(target1,,c-1),INDEX(target2,,r-1))>COUNTUNIQUE(INDEX(target1,,c-1),INDEX(target2,,r-1)),"×",)))))('シート2'!A1:E4,'シート2'!F1:J4)

↓インデントつけて見やすくしたバージョン

GoogleSheets

1 =LAMBDA(target1,target2, 2 MAKEARRAY( 3 COLUMNS(target2)+1,COLUMNS(target1)+1, 4 LAMBDA( 5 r,c, 6 IFS( 7 AND(r=1,C=1),"", 8 r=1,INDEX(target1,r,c-1), 9 c=1,INDEX(target2,c,r-1), 10 true, 11 IF( 12 COUNTA(INDEX(target1,,c-1),INDEX(target2,,r-1)) 13 >COUNTUNIQUE(INDEX(target1,,c-1),INDEX(target2,,r-1)), 14 "×", 15 ) 16 ) 17 ) 18 ) 19 ) 20 ('シート2'!A1:E4,'シート2'!F1:J4)

投稿2022/09/18 12:14

sawa

総合スコア3002

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

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

teratailuser123

2022/09/19 06:15

ご回答誠にありがとうございます! LAMBDAは初めて知りました… また、関数を作ってくださりありがとうございます泣 インシデントを見ましたが、非常にまとめられてて応用も効きやすく素晴らしいです… この度は誠にありがとうございました!
sawa

2022/09/19 07:00

書き忘れたので補足ですが、重複あるなし を COUNTA() とCOUNTUNIQUE() の比較で処理してます。 もし元データの同じ列内に同じ日付がある(例えば Aの下に 2022/06/10 が2つ以上ある等の)場合は、この方法だと正しい回答が得られません。FILTERを使った重複判定処理に変更する必要があります。 さらに式が長くなるので避けましたが。
guest

0

効率等は全く考えていませんが、
仕組みとしては

\AB
a16
b27
c38
d49
e510

というの順番で確認していき、
チェックのやり方はそれぞれのデータの配列を比較していくのが無難でしょうかね...

javascript

1const A = ["2022/06/10","2022/05/07","2022/06/04"]; 2const a = ["2022/04/09","2022/07/16","2022/07/09"]; 3// 省きます 4const d = ["2022/06/04","2022/08/06"]; 5 6const isAa = A.some((v)=>a.includes(v)); // false 7// 省きます 8const isAd = A.some((v)=>d.includes(v)); // true

というような形で取得できます
もちろんスプレッドシートから取得する必要があるので
上記のように一つ一つ変数に入れてチェックというのはあまり効率的ではないので、

javascript

1const smallData = [ 2 ["2022/06/10","2022/05/07","2022/06/04"], // aのデータ配列 3 ["bのデータ配列"], 4 ["cのデータ配列"], 5 ["dのデータ配列"], 6 ["eのデータ配列"], 7]; 8const AColumnResult = smallData.map((smallValues)=>A.some((v)=>smallValues.includes(v))); 9// 多分こんな感じのデータになる 10// [false,false,false,true,false]

というような形に直した上で、setValuesを使ってまとめてチェックボックスの値を入れてあげれば良いかと思います。

\A
afalse
bfalse
cfalse
dtrue
efalse

これをAのデータのみならずA~Eをmap等を用いてやれるようになれば良いかと思います。

setValuesの仕組み上、column単位ではなくrow単位でやったほうが良いかもしれません
下記のようなデータにすれば一回のsetValuesで済むためです。(column単位でやると転値するか1列毎にデータを挿入することになると思うので)

javascript

1[ 2 [false,false,false,false,false], 3 [false,false,false,false,false], 4 [false,false,true,false,false], 5 [true,false,false,false,false], 6 [false,false,false,false,false], 7]

投稿2022/09/18 01:58

sk-sora--ypi

総合スコア528

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

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

teratailuser123

2022/09/19 06:17

この度は回答いただき誠にありがとうございます! なるべくスプレッドシート上で完結させたかったためsawaさんの回答をベストアンサーにいたしましたが、こちらも大変参考になりました。 いろんなアプローチがあってすごいなぁと思いつつ自分も一層勉強していこうと思いました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問