[[20221021190454]] 『別のシートと重複するものを返す方法』(名無しのとうしろ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『別のシートと重複するものを返す方法』(名無しのとうしろ)

Sheet1とSheet2で
同じデータがあった場合、その値を返す方法を教えてください。
それを連続データとして集計していきたいです。
また、各Sheet名は日付にしていて、毎日データが変わるため
シートを追加したときに、前のシートのデータを参照するという形にできるものでしょうか?


 Sheet1とSheet2は同じ表です。

Sheet1(シート名は10.20)
   A  B  C   D  E  F  G  H  
1 ABC  20  〇〇    

2 CDE  3  ▲▲

3 FGH  50  ◇◇

.
.

Sheet2(シート名は10.21)
   A  B  C   D  E  F  G  H 
1 CCC  50  ×〇    連続データ
              CDE 3  ▲▲
2 CDE  3  ▲▲

3 ZZZ  10  !!

.
.

こんな感じです。
説明不足がありましたらすみません。
宜しくお願い致します。

< 使用 Excel:Office365、使用 OS:Windows10 >


 こんばんは

 これって、A列 から C列が一つのデータとみて
 重複だったらってこと?

 それとも、A列 からH列 が一つのデータと見るのかしら?
 1レコードって意味です。

 また…Sheet2に、E列 から重複データが入ってますが
 この意味はなんですか?

 それと、Sheet3が追加されたら、前のシート(Sheet2)と見比べて
 重複データを抽出するって事ですかね?

 で、どこに重複データを出していくのかしら?

 これを…関数でするの? VBAでもいいのかしら?

(あみな) 2022/10/21(金) 19:35:29


「連続」の意味を他人にもわかるように説明したらどうですか?
分かっているのはご自分だけでは?

(XXX) 2022/10/21(金) 20:47:14


大変失礼いたしました。

E F Gに記載のあるのは
そうやった感じでデータを抽出したいという意味です。

Sheet1にある例えばりんごというデータが売れた商品としてあったとして
Sheet2にあるデータの中でもりんごが売れていた商品にあった場合、
連続してりんごがうれているということを抽出したいので
その抽出したデータを
E F Gに記載しているように連続してうれているのがこれだよ
という感じで抽出したいのです。

わかりずらくてすみません。

VBAは自分は全く無知でして、
どのようにすればよいかわからないのですが
可能であればVBAを使った場合、使わなかった場合で教えていただければと思います。
もしVBAを使わなくては実現できないということでしたら、、頑張ります。
(名無しのとうしろ) 2022/10/21(金) 21:08:59


要は、A,B,C列すべてが一致するものが、Sheet1のA,B,C列に1つでもあれば、E2以降に書き出せばよいってことですよね?

Office365なら、おそらくVBAは要りません。

(もこな2) 2022/10/21(金) 21:20:50


10.21シートのE2セル
 =FILTER(A1:C100,COUNTIFS('10.20'!A:A,A1:A100,'10.20'!B:B,B1:B100,'10.20'!C:C,C1:C100),FALSE)

↑で動作しませんか?

(もこな2) 2022/10/21(金) 21:40:11


 ↑ で常に 1つ前のシートを参照できるのか?
 スゴイな、365!
(笑) 2022/10/21(金) 23:47:29

あぁなるほど、シートが変わり得るのか・・・
んじゃダメですね。

(もこな2) 2022/10/22(土) 01:21:18


もこな2さん
回答ありがとうございます!
自分のやりたいことはそちらの関数で実現できました!
シートが追加された毎に反映、となると難しそうなので
この関数を追加したシートごとに変更しながら使っていこうと思います!
ありがとうございます!
(名無しのとうしろ) 2022/10/22(土) 17:18:55

>この関数を追加したシートごとに変更しながら使っていこうと思います!
とのことですが、乗りかかったなんとやらということで追加コメントします。

■1
>Sheet名は日付
>シートを追加したときに、前のシートのデータを参照

↑が"前日"のシートを参照という意味ならば、ブックが1度以上保存してある、ファイル名に"["が含まれない等条件はありますが、↓ようにすれば前日のシート名を取り出すことは可能であるように思います。

 =TEXT(DATEVALUE(SUBSTITUTE(RIGHT(CELL("filename",A1),LEN(CELL("filename",A1))-FIND("]",CELL("filename",A1))),".","/"))-1,"mm.dd")

なので、たとえばI1セルなんかを作業セルにして↓のような数式にすれば、完全に無理という話ではないと思います。

 INDIRECT関数を使用
=FILTER(A1:C100,COUNTIFS(
INDIRECT("'"&I1&"'!A:A"),A1:A100,
INDIRECT("'"&I1&"'!B:B"),B1:B100,
INDIRECT("'"&I1&"'!C:C"),C1:C100),
FALSE)

■2
ただ、必ずしも前のシートが前日じゃないとか、揮発性関数であるINDIRECT関数を使いたくないとかであればやはりマクロでの対応になるように思います。
ということで、マクロ案を2つほど

    Sub 数式を書き込むマクロ()
        Dim 前のシート名 As String

        With ActiveSheet
            前のシート名 = "'" & .Previous.Name & "'!"
            .Range("E2").Formula2 = "=FILTER(A1:C100,COUNTIFS(" & 前のシート名 & "A:A,A1:A100," & 前のシート名 & "B:B,B1:B100," & 前のシート名 & "C:C,C1:C100),FALSE)"
        End With
    End Sub

↑はそのまま数式を書き込んじゃうアプローチです。
スピル機能やFILTER関数を使っているのでoffice365(今はMicrosoft365でしたかね)じゃないと機能しないと思います。

 余談ですが「Office365なら、おそらくVBAは要りません。」といったのは↑を考えてのことでした、混乱させてしまったならごめんなさい。

↓は1行ずつチェックしていく方法です。見て分かるようにCOUNTIFS関数を使っているにすぎませんから、Excel2007以降であれば大丈夫なはずです。

    Sub 条件にマッチするものをコピーする()
        Dim 行 As Long
        Dim MyRNG As Range

        With ActiveSheet
            For 行 = 2 To .Cells(.Rows.Count, "A").End(xlUp).Row
                If WorksheetFunction.CountIfs(.Previous.Columns("A"), .Cells(行, "A"), .Previous.Columns("B"), .Cells(行, "B"), .Previous.Columns("C"), .Cells(行, "C")) > 0 Then
                    If MyRNG Is Nothing Then
                        Set MyRNG = .Cells(行, "A").Resize(, 3)
                    Else
                        Set MyRNG = Union(MyRNG, .Cells(行, "A").Resize(, 3))
                    End If
                End If
            Next 行

            If Not MyRNG Is Nothing Then MyRNG.Copy .Range("E2")
        End With
    End Sub

(もこな2) 2022/10/22(土) 21:10:44


まあマクロになりますけど。
プラス、INDIRECT関数使用

[[20201024145922]] 『左隣のシートを参照して累計を出す』(タツミ)
(不思議) 2022/10/22(土) 23:16:34


こっちは右シート

[[20190302184836]] 『最終提出日を管理したい』(なとー)
(不思議) 2022/10/22(土) 23:22:13


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.