[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『別のシートと重複するものを返す方法』(名無しのとうしろ)
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
Office365なら、おそらくVBAは要りません。
(もこな2) 2022/10/21(金) 21:20:50
=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
■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
[[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.