dポイントプレゼントキャンペーン実施中!

こちらで、ひとつのシート内での重複データの抽出はできました。

http://www12.ocn.ne.jp/~momonet/excel-temp41.htm

これを応用し、複数のシートの列内の重複を抽出することはできますか?
シート1のA列とシート2のC列というように、同じ列ではないこともあります。

よろしくお願いします。

A 回答 (5件)

こんにちは。



URLのあるページを応用してなさっているということ
なので、それに倣って書くと

=COUNTIF(Sheet1!A:A,A1)+COUNTIF(Sheet2!C:C,A1)>1
となります。

ただし、上記の式は、セルに書く場合はエラーが出ない
のですが、条件付き書式には使えません。

条件付き書式に使う場合は、それぞれの範囲に名前を
つけておく必要があります。

Sheet1!A:Aにはhoge1
Sheet2!C:Cにはhoge2
とつけた場合は、

(Sheet1のA列を選択しておいて、名前ボックスに名前を
 つけます。[挿入][名前][定義]からでも可)

=COUNTIF(hoge1,A1)+COUNTIF(hoge2,A1)>1

となります。
    • good
    • 1
この回答へのお礼

できました!!
勉強不足で申し訳ないのですが教えてください。
=COUNTIF(hoge1,A1)+COUNTIF(hoge2,A1)>1
           ↑           ↑
       ここのA1の意味って何ですか?
私のデータの場合は、
シート1がF列、シート2がD列なので、
=COUNTIF(hoge1,F1)+COUNTIF(hoge2,D1)>1
かと思いましたが、
=COUNTIF(hoge1,F1)+COUNTIF(hoge2,F1)>1
なんですね~。

お礼日時:2004/07/23 15:22

遅くなりました。



>なぜそこがA1なのか?
>> hoge1の中にA1と同じセルはいくつあるか
>A1って、A列の1行目ですよね?
>他の行A50とかでもいいわけですよね?
>A1には何も入力されてないんですが・・・・

了解です。が、説明が難しいですねぇ・・・

まず、相対参照と絶対参照は理解されていますか?
理解していなかったら、ヘルプで「絶対参照」などを
調べて、$の意味を理解してください。

次に、条件付き書式を設定したセル(F列やD列)の
下の方(一行目以外)の条件付き書式を表示させて
式を見てみて下さい。

もし、F3のセルだったら、条件は
=COUNTIF(hoge1,F3)+COUNTIF(hoge2,F3)>1
となっていると思います。

つまり、各セルに対して異なった条件が設定されて
いると思います。
(これは式の意味がわかっていれば、F3のセルに
 対しては上記の式に「なっていなければならない」
 ことは理解されていると思います)


このように複数のセルを選択しておいて、一気に書式や
式を設定する場合の仕様というかテクニックというか
そいういうものを理解していただく必要があります。

あるセル範囲を選択した場合、ひとつのセルを除いて
グレーに反転していると思います。そのひとつの白い
セル(アクティブセル)を基準に式を書くと
アクティブセルに式を書いてから、他のセルにコピー
したのと同じ効果が得られます。

ちょっとだけ例を挙げると
B11からB20を選択してB11が白い状態で、数式バーに
=A11
と書いて、Ctrlを押しながら、Enterキーを押すと
選択した範囲に式が入力されます。
その場合は、B11に=A11,B12に=A12・・・
となっています。

ところが、
B20からB11を選択してB20が白い状態で、数式バーに
=A11
と書いて、Ctrlを押しながら、Enterキーを押すと
選択した範囲に式が入力されます。
その場合は、B20に入力した=A11という式が入りますが、
B19には、=A10と
B20のセルをコピーした場合と同じ式が入っていると
思います。

つまり、複数のセルを選択しておいて式を書く場合は、
アクティブセルを基準に式を書く必要があります。

・・・やっと本題です。

で、F列を選択すると、F1だけが白くなっていますよね?
つまり、F列を選択しておいて、F列全体に式を入力する
場合は、F1を基準に式を書かなければいけないわけです。

ですから、F1が空欄だろうとなかろうと、F列を選択して
条件付き書式を設定する場合は、
=COUNTIF(hoge1,F1)+COUNTIF(hoge2,F1)>1
と書かなければいけないことになります。

・・・分かりにくいですね。申し訳ない。
    • good
    • 0
この回答へのお礼

基準という言葉で、なんとなくわかりました。
本当に親切にありがとうございました。
これを機会に勉強したいと思います。

お礼日時:2004/07/26 09:38

VBAでやって見ました。


Sub test01()
Dim d(100000)
Dim f(100000)
Dim sh1 As Worksheet
Dim sh2 As Worksheet
s1 = InputBox("シート1名=")
s1 = "Sheet1"
C1 = InputBox("シート1の列名=")
C1 = "A"
s2 = InputBox("シート2名=")
s2 = "Sheet2"
C2 = InputBox("シート2の列名=")
C2 = "B"
Set sh1 = Worksheets(s1)
Set sh2 = Worksheets(s2)
d1 = sh1.Range(C1 & "65536").End(xlUp).Row
d2 = sh2.Range(C2 & "65536").End(xlUp).Row
'-----別シート2列データ統合
n = 1
For i = 1 To d1
d(n) = sh1.Cells(i, C1)
f(n) = i & C1
n = n + 1
Next i
For i = 1 To d2
d(n) = sh2.Cells(i, C2)
f(n) = i & C2
n = n + 1
Next i
'------ソート
For i = 1 To n - 1
For j = i + 1 To n
If d(i) < d(j) Then
Else
w = d(i)
d(i) = d(j)
d(j) = w
w = f(i)
f(i) = f(j)
f(j) = w
End If
Next j
Next i
'-----別シートに結果出力
sh2.Activate
k = 1
For i = 1 To n - 1
If d(i) = d(i + 1) Then
sh2.Cells(k, "X") = d(i)
sh2.Cells(k, "Y") = f(i) & "-" & f(i + 1)
k = k + 1
End If
Next i
End Sub
'-----
シート2のX,Y列にダブリの片方とダブリ両方の行・列記号を出してます。
私のしたテスト時の名前になってますので変えること。
s1 = "Sheet1" をシート1の名前に変える
C1 = "A"    をシート1の列記号に変える
s2 = "Sheet2" をシート2の名前に変える
C2 = "B"    をシート2の列記号に変える
Sheet1+Sheet2で10万行以下。
VBAに興味があれば、改良してやって見てください。
    • good
    • 0

>できました!!


よかったです。私もうれしいです。(^o^)丿

>=COUNTIF(hoge1,A1)+COUNTIF(hoge2,A1)>1
>           ↑           ↑
>ここのA1の意味って何ですか?

COUNTIFの関数の意味はわかりますか?

=COUNTIF(hoge1,A1)
だと、hoge1の範囲の中に、A1のセルに書いてある値が
いくつあるかを数えています。

ですから、
=COUNTIF(hoge1,A1)+COUNTIF(hoge2,A1)

で、hoge1の中にA1と同じセルはいくつあるか+
hoge2の中にA1と同じセルはいくつあるかを
数えていることになります。

それが、1よりも多ければ、検査している(セルA1)以外に
も同じ値があるということになるわけです。

ヘルプでCOUNTIFを調べて内容をよく理解してみて下さい。
#分からなければ、何度でも質問をどうぞ。

余談:
hoge1というのは好きな名前を付けてよかったんですが。
(^^ゞ
    • good
    • 0
この回答へのお礼

度々ありがとうございます。
COUNTIFの意味は分かりますが、式の書き方について理解できないのだと思います。
なぜそこがA1なのか?
> hoge1の中にA1と同じセルはいくつあるか
A1って、A列の1行目ですよね?
他の行A50とかでもいいわけですよね?
A1には何も入力されてないんですが・・・・
(私の場合はF1とかD1ですけどね)

>hoge1・・・

大丈夫です!違う名前にしてあります。

お礼日時:2004/07/23 16:10

条件付書式は同じシートの値しか使えませんし、COUNTIFはたぶん連続した範囲しか参照できなかったと思いますので、例えば条件付書式を使うシートの使用しない列に、セル参照で全てまとめてしまうというやり方ではいかがでしょうか。


例えば、条件付書式を使うシートをSheet1として、Sheet1のA列とSheet2のB列を参照範囲にしたい場合に、X列とY列を作業列として
X1に =IF(A1="","",A1)
Y1に =IF(Sheet2!B1="","",Sheet2!B1)
として以下コピーして(単に =A1 などだと複数の空白行を重複行として0値として拾ってしまうので、IF文で処理しています)、条件付書式のところの数式を=COUNTIF($X:$Y,A1)>1とする。
もし作業列を表示したくなければ右クリック→表示しないで非表示にする。
そんなところではいかがでしょう。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています