Excel2000を使用しています。
2つのシート間で同一データの有無の比較がしたいのです。
仮に比較したいものをシートA・Bとします。
それぞれ項目として、大字・小字・地番があり、それが同じ時に同一データと判断します。
件数にすると4000~5000件ぐらいあり、関数でやってみたのですが、うまくいきません。
比較で結果としては、下記の3パターンがあります。

1)AとBに有る。
2)Aに有って、Bに無い。
3)Bに有って、Aに無い。

希望としては、新たなシートに 2)と 3)のデータのみ抽出して、そのデータが 2)なのか 3)なのかわかるようにしたいのです。宜しくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (6件)

VBAでやってみました。


エクセルのウィンドウ左下にあるシートタブの、左から1番目と2番目のシートを比較します。

各々のシートのA列に大字、B列に小字、C列に地番を置いてください。
セルA1から下に、空白のセルがでるまで検索、比較します。
1)はSub両方()で、
2)3)はSub片方()でどうぞ。

Sub 両方()
Dim c As Range, c2 As Range, c3 As Range, p As Byte
Dim w As Worksheet, f As Long

Set c = Worksheets(1).Range("A1:C1")
Set c2 = Worksheets(2).Range("A1:C1")
Set w = Worksheets.Add(, Worksheets(2))
w.Range("A1").Value = Worksheets(1).Name & _
" と、 " & Worksheets(2).Name & " 両方にある"
Set c3 = w.Range("A2:C2")

Do
Do While c2.Columns(1).Value <> ""
For p = 1 To 3
If c.Columns(p).Value <> c2.Columns(p).Value Then Exit For
If p = 3 Then
c3.Offset(f, 0).Value = c.Value
f = f + 1
Exit Do
End If
Next p
Set c2 = c2.Offset(1, 0)
Loop
Set c2 = Worksheets(2).Range("A1:C1")
Set c = c.Offset(1, 0)
Loop Until c.Columns(1).Value = ""
End Sub


Sub 片方()
Dim c As Range, c2 As Range, c3 As Range, p As Byte
Dim w As Worksheet, f As Long, i As Byte, n As Byte, k As Byte
Set w = Worksheets.Add(, Worksheets(2))
w.Range("A1").Value = Worksheets(1).Name & " だけにある"
Set c3 = w.Range("A2:C2")

For n = 1 To 2
If n = 1 Then
k = 2
Else
k = 1
f = 0
w.Range("E1").Value = Worksheets(n).Name & " だけにある"
Set c3 = w.Range("E2:G2")
End If

Set c = Worksheets(n).Range("A1:C1")
Set c2 = Worksheets(k).Range("A1:C1")

Do
i = 0
Do
For p = 1 To 3
If c.Columns(p).Value <> c2.Columns(p).Value Then Exit For
If p = 3 Then
i = 1
End If
Next p
Set c2 = c2.Offset(1, 0)
Loop Until c2.Columns(1).Value = ""
If i = 0 Then
c3.Offset(f, 0).Value = c.Value
f = f + 1
End If
Set c2 = Worksheets(k).Range("A1:C1")
Set c = c.Offset(1, 0)
Loop Until c.Columns(1).Value = ""
Next n
End Sub
    • good
    • 0

#5です、またまた補足です。

何度もすみません。

Sub片方()の下から14行目あたり、

>If p = 3 Then
>i = 1
>End If

を、

If p = 3 Then
i = 1
Exit Do  '←を追加
End If

としていただけると、処理時間が短縮されます。
    • good
    • 0
この回答へのお礼

回答、ありがとうございます。
何回も補足していただき、とてもうれしいです。
貴重な時間をいただきました。感謝します。

お礼日時:2003/09/23 20:23

3#4#です。

また補足を。

見た目は同じでも、セル中の文字列の前後にスペースがあると、うまくヒットしません。スペースが入っていることが考えられる場合は、各々のSubプロシージャの

If c.Columns(p).Value <> c2.Columns(p).Value Then Exit For

を、

If Trim(c.Columns(p).Value) <> Trim(c2.Columns(p).Value) Then Exit For

に書き換えてください。
    • good
    • 0

#3です。

ちょっと補足を。

>セルA1から下に、空白のセルがでるまで検索、比較します。

A列に空白のセルがでてくるまで、という意味です。
B、C列に空白のセルがあってもかまいません。

あと、各々のシートに重複するデータがある場合は想定していません。
    • good
    • 0

(1)優秀なデータベースソフトを使う(#1のご回答では桐なら易しく出来るそうです)


(2)VBA等のプログラムが組めて組む
のでないと難しいと思います。関数などでは、出来ても極く複雑になって、実質出来ないといえるでしょう。
敢えてやるなら、A列(大字)B列(小字)C列(番地)の
各々の内容的な最大文字数を決めて、左寄せ的に実質内容(文字)をセットし、残り(右後尾)最大文字数まではスペースを入れた文字列を作ることです。
A列の最大文字数を全角7文字と決めたとする。
山田北と入っているセルを、山田北△△△△(△は全角スペースを表す)と言う内容のセルにする。
元禄新田と入っているセルを、元禄新田△△△と言う内容のセルにする。
同じことをB、C列について行う。
そして=A1&B1&C1のようにして、結合したセルを
D列ならD列に作る。
シートAとシートBの両方でそれを行う。
なぜコンな面倒なことが必要かピンとこなければ、この方法もプログラムも無理でしょう。
これでマッチングキーが出来あがります。
そしてVLOOKUP関数(第4引数はFALSE)を使って、シートBのD列を表(テーブル)と見たてて、シートAのD列の値で、表引きをする。見つからない時は#N/Aが出るので、シートAにあり、シートBになしが判ります。
逆にシートBより上記をやればシートBありシートA無しが判ります。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
はい。私も、関数でやる時に結合してみたのですが、うまくいかなかったのです。文字数を合わせなかったからだと、気が付きました。やってみます。

お礼日時:2003/09/23 20:21

》2つのシート間で同一データの有無の比較がしたいのです。



 この類はExcelでする仕事ではない。データベースソフトでする仕事です。

》1)AとBに有る。
》2)Aに有って、Bに無い。
》3)Bに有って、Aに無い。

 こんな作業はいとも簡単です。できて当たり前。

 Accessをお持ちなら、それを使ったらいいけど、取っつきが悪いからね。覚えるのに暇がかかる。データベースソフトが初めてなら、「桐」をお勧めします。覚えが早いし便利だから、お金を出すだけの値打ちがあります。

参考URL:http://www.k3-soft.com/kiri9/index.html

この回答への補足

回答ありがとうございます。
データベースソフトでしたら、どのようにするのですか?
簡単に教えていただけませんか?
Accessならあるのですが。。。

補足日時:2003/09/22 13:02
    • good
    • 0

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qエクセル プルダウンの作り方

お世話になります。
エクセルでプルダウンの作り方を教えていただけませんでしょうか?
住所を▼のボタンでクリックしたら【北海道,青森,秋田,岩手・・・】などの選択ができるようにしたいのです。
宜しくお願いします。

Aベストアンサー

メニューから「データ」、「入力規則」、「設定」で「入力値の種類」を「リスト」を選択します。
そうすると「元の値」という表示がでますので、そこで前もって作っておいたリストの範囲を指定します。
多くないのでしたら、そのままそこにカンマで区切って入力しても出来ます。

QExcelのVlookupについて質問です シート1 ▽ A B ⑴ ⑵ シート2 ▽ A B C

ExcelのVlookupについて質問です

シート1
▽ A B



シート2
▽ A B C D E F
⑴ 1 あ 4 か 7 さ
⑵ 2 い 5 き 8 し
⑶ 3 う 6 く 9 す

というふたつの表から検索したいのですが、何か方法はあるのでしょうか。
シート1のA⑴に「5」と打てばA⑵に「き」と、「7」と打てば「さ」と検索するようにしたいです。
列は2列でないと検索できないのでしょうか。
よろしくお願いします。

Aベストアンサー

こんにちは!

VLOOKUP関数ではないのですが、A2セルに
=IFERROR(INDEX(Sheet2!A1:Z100,SUMPRODUCT((Sheet2!A1:Z100=A1)*ROW(A1:A100)),SUMPRODUCT((Sheet2!A1:Z100=A1)*COLUMN(A1:Z1))+1),"")

どうしてもVLOOKUP関数でやりたい場合は
=IFERROR(VLOOKUP(A1,OFFSET(Sheet2!A1:B100,,SUMPRODUCT((Sheet2!A1:Z100=A1)*COLUMN(A1:Z1))-1),2,0),"")

といった感じでしょうかね。

※ A1~Z100セルまでを対象としています。m(_ _)m

Qエクセルでプルダウンメニューの作り方

  エクセルの画面で、よく三角形を逆さまにした形をクリックするといくつかメニューが出てき、どれかを選べるようになっていますが、その作り方を教えてください。
 会社で人事を担当していますが、三角形(プルダウンボタン)をクリックすると社員氏名一覧が表示され、そこから選択できるようにしたいのです。
 しばらく自力でいろいろやってみましたが、さっぱり見当がつかず、どうやればいいのか分かりませんでした。よろしくお願いします。

Aベストアンサー

こんばんは!
当方使用のExcel2003での一例です!

↓の画像のようにSheet2に名簿表を作成しておきます。
画像ではSheet2のA2セル以降を範囲指定 → 名前ボックスに仮に「名簿」と入力しOK
これで範囲指定したセルが「名簿」と名前定義されましたので、

Sheet1のリスト表示させたいセルを範囲指定 → メニュー → データ → 入力規則
→ リスト → 「元の値」の欄に
=名簿
としてOK

これでSheet1のセルをアクティブにすると右側に下向き▼が表示されますので、そこをクリック!
これで希望に近い形にならないでしょうか?
Excel2007の場合は↓のURLが参考になるかもしれません。

http://www.eurus.dti.ne.jp/~yoneyama/Excel2007/excel2007-ny_kis2.html

尚、同一Sheetに「名簿表」を作成する場合は名前定義する必要はなくて
「元の値」の右側の四角をクリックし、リスト表示したいセルをそのまま範囲指定すればOKです。

以上、お役に立てば良いのですが・・・m(_ _)m

こんばんは!
当方使用のExcel2003での一例です!

↓の画像のようにSheet2に名簿表を作成しておきます。
画像ではSheet2のA2セル以降を範囲指定 → 名前ボックスに仮に「名簿」と入力しOK
これで範囲指定したセルが「名簿」と名前定義されましたので、

Sheet1のリスト表示させたいセルを範囲指定 → メニュー → データ → 入力規則
→ リスト → 「元の値」の欄に
=名簿
としてOK

これでSheet1のセルをアクティブにすると右側に下向き▼が表示されますので、そこをクリック!
これで希望に近い形にならない...続きを読む

Q【質問】ブック名AからシートをブックBへ移動する時、ブックAにシートを残してブックBにもコピーするには?

こんにちは、みなさん!!

【質問】ブックAのシートを、ブックBに移動する時に、ブックAにも
同シートを残しておき、さらに、ブックBに同シートを移動する事は
できますか?ドラック&ドロップでは、ブックAにシートはなくなり、
完全に、ブックBに移動されてしまいます。

ご存知の方いらっしゃいましたらよろしくお願いします。

Aベストアンサー

はじめまして

ブックAの該当シートタブを右クリック、移動またはコピーを選択、移動先ブックをブックBに、コピーを作成するにチェックを入れてOK。
これでいけます。

また、ドラッグアンドドロップでするなら、「CTRL」キーを押しながらやってみてください。
移動ではなくコピーになります。

的外れでしたらごめんなさい。

Qエクセル(Excel) 納品書の作り方【画像修正版

昨日http://oshiete.goo.ne.jp/qa/7348426.htmlで質問させていただき、詳しくご回答いただき少し進んだのですが、状況が変わったので改めて質問させていただきます。

■エクセル(Excel)で納品書の作成をしています。
シート1に納品書、シート2に商品マスタ(一覧)を作っていて、シート2の一覧を反映させて
納品書に番号を打ち込むだけで、商品名・単価までが出るシステムを作りたいのですが、
昨日のご回答の中の「VLOOKUP」?を入れて、自分なりにマス目の数字を変えてやってみたのですが
反映されずN/?のようなエラーになってしまいます。

※画像が見にくかったのでシート<CENTER></CENTER>だけにしました。

1、上記のように、シート2との関連付けの係数を、写真の場合の数字で教えてください。

2、合計と、合計から20%を引いた数値を割り出す関数も、写真の数字で御願いします。

宜しくご教授お願い致します。

Aベストアンサー

こんばんは!
前回投稿した者です。

当方もかなり古い(人間も古い!なぁ~んちゃって!)Excel2003を使用しています。
↓の画像のようにSheet2にデータを作成しておきます。

#N/A というエラーは、「検索値」がない!ということですので
お示しの画像のB列にSheet2のA列にないデータを入力するとそういったエラーが表示されます。

画像のセル配置ですと
C4セルに
=IF($B4="","",VLOOKUP($B4,Sheet2!$A:$C,COLUMN(B1),0))
(「$」マークの位置に気を付けてください)
という数式を入れD4セルまでオートフィルでコピー!
そのまま最後の24行目までコピーしておきます。

F4セルには
=IF(COUNTBLANK(B4:E4),"",D4*E4)
という数式を入れ、F24までオートフィルでコピー!

これでB列に商品番号を入力すればSheet2のデータが反映され、
E列に数量を入力でF列に金額が表示されると思います。

最後に合計金額のF26セルは
=IF(COUNT(F4:F24),SUM(F4:F24),"")
手数料のF27セルは
=IF(F26="","",F26*0.2)

これで何とか形にならないでしょうか?

※ 振込金額の欄は不明ですので手を付けていません。

参考になりますかね?m(_ _)m

こんばんは!
前回投稿した者です。

当方もかなり古い(人間も古い!なぁ~んちゃって!)Excel2003を使用しています。
↓の画像のようにSheet2にデータを作成しておきます。

#N/A というエラーは、「検索値」がない!ということですので
お示しの画像のB列にSheet2のA列にないデータを入力するとそういったエラーが表示されます。

画像のセル配置ですと
C4セルに
=IF($B4="","",VLOOKUP($B4,Sheet2!$A:$C,COLUMN(B1),0))
(「$」マークの位置に気を付けてください)
という数式を入れD4セルまでオートフィルで...続きを読む

QExcel でシート間の重複データ(Sheet1のA=Sheet2のA かつ Sheet1のB=Sheet2のB)

Excel2000です。

Sheet1のA列・B列・C列・・・にデータが入っています。
Sheet2のA列・B列・C列・・・にデータが入っています。

Sheet1のA列とSheet2のA列は、似たようなデータが入っています。
Sheet1のB列とSheet2のB列も、同様です。
C列以降のデータは、シート間で全然関係ありません。

Sheet1の行データ(A列・B列)が、Sheet2(A列・B列)にも存在しているかどうか、
を知るには、どうすればよいですか。
C列以降の列のデータは、比較する際に使いません。

つまり、
Sheet1のA = Sheet2のA
かつ
Sheet1のB = Sheet2のB
であるような行を知りたいのですが、

どうすればよいのでしょうか。

Aベストアンサー

Sheet1、Sheet2 ともに空いている列に =A1&B1 のような連結データを作り、Matchなどで比較するとか、、、

Sheet1 の E1 =A1&B1
Sheet2 の E1 =A1&B1
Sheet1 の F1 =MATCH(E1,Sheet2!E:E,0)

Qエクセル(Excel) 納品書の作り方【改めて】

昨日http://oshiete.goo.ne.jp/qa/7348426.htmlで質問させていただき、詳しくご回答いただき少し進んだのですが、状況が変わったので改めて質問させていただきます。

■エクセル(Excel)で納品書の作成をしています。
シート1に納品書、シート2に商品マスタ(一覧)を作っていて、シート2の一覧を反映させて
納品書に番号を打ち込むだけで、商品名・単価までが出るシステムを作りたいのですが、
昨日のご回答の中の「VLOOKUP」?を入れて、自分なりにマス目の数字を変えてやってみたのですが
反映されずN/?のようなエラーになってしまいます。

※画像が貼り付けてあります。商品名は1番以外伏せさせていただいています。
くっつけてありますが、左側がシート1・右側がシート2です。

1、上記のように、シート2との関連付けの係数を、写真の場合の数字で教えてください。

2、合計と、合計から20%を引いた数値を割り出す関数も、写真の数字で御願いします。

宜しくご教授お願い致します。

Aベストアンサー

画像がいまいちよく見えないのですが、納品書の項目は左から、No、商品番号、商品名、単価、数量、金額でいいのでしょうか(名前は多少違っていても意味があっていればもんだいないです)

でしたら、
C1セルに=IF(ISBLANK(B2),"",VLOOKUP(B2,Sheet2!$A$2:$C$200,2,FALSE))
D1セルに=IF(ISBLANK(B2),"",VLOOKUP(B2,Sheet2!$A$2:$C$200,3,FALSE))
E1セルは空白で
F1セルに=IF(D2="","",D2*E2)
といれて、C1からF1までをコピーしてその下の行にタテに貼り付ければ出来ますよ。
おそらくエラーが出たのは、コピーしたときにVLOOKUP関数の最初のセルの指定がずれてしまっているのでは無いかと思いますよ。     

QシートAとシートBの値を比較する演算式を教えてください

こんにちは。
シートAとシートBと言う2つのシートがあります。

それぞれが、カンマ区切りのファイルで、20×20程度の行列になってます。

このシートAとシートBですが、差分が発生してしまい、差分に色を塗ることをしたいと思ってます
一部追加列が発生しているため、追加列にも、同じ色でいいので、つけたいと思ってます。

そこで、この2つのを比べて、同じ行、列で、シート間で差異があれば、Bシートに色をつける。
と言う演算式を教えていただけますでしょうか

マクロがよくわからないため、演算式で出来ると嬉しいです

よろしくお願いします。

Aベストアンサー

>同じ行、列で、シート間で差異があれば、Bシートに色をつける。
ですので条件付書式を設定しますが シートを跨いだ条件付書式が設定できません。
準備として
シートAの 20×20程度の行列 を選択して
挿入 定義 で名前を Aデータとでもつけていきます。
あとは
シートBの 20×20程度の行列 を選択して
書式 条件付書式 で
「数式が」にして 式には 
=INDEX(Aデータ,ROW(),COLUMN())<>A1
書式 パターン でご希望の色を選択 OKします。

Qエクセル2007でプルダウンで選んだものに反応

Excel2007でプルダウンで選んだものに反応して隣のセルが自動入力される方法(エクセル2007)
A1をプルダウンで「猫」「犬」から選べるようにし、「猫」を選んだ場合B1に自動に「111」が、「犬」を選んだ場合B1に自動に「222」と入力されるようにしたいです。
ご教授の程、宜しくお願いします。

Aベストアンサー

VLOOKUP関数での方法です。
(1)別シートに入力文字列と対応コード表を作成。(仮にSheet2のA:B列範囲で順不同)
(2)B1に=IF(COUNTIF(Sheet2!A:A,A1),VLOOKUP(A1,Sheet2!A:B,2FALSE),"")を設定
   入力文字列が存在しない場合は空白としています。

QExcelでシート2のデータ(A1からA10)をシート1(A10からA1)に反映させるには・・・。

いつもお世話になっています(_ _)
シート2のデータ(A1からA10)をシート1の(A10からA1)(シート2は上からに対してシート1は下から上へ)データを反映(=のかたちでシート2と同じ数字がシート1のも入るように)したいのですが・・・。

わかりにくいですね・・・。
もし補足の要求があればすぐに書き込みますのでよろしくお願いします。

Aベストアンサー

こんにちは

コピーですむような者ですね。

=INDEX(Sheet2!$A$1:$A$10,11-ROW(),1)

をSheet1のA1セルからA10セルにコピーペーストして見てください。
もし、Sheet2の値が空白だった場合、Sheet1も空白にするのであれば、

=IF(INDEX(Sheet2!$A$1:$A$10,11-ROW(),1)="","",INDEX(Sheet2!$A$1:$A$10,11-ROW(),1))

で良いですね。


人気Q&Aランキング

おすすめ情報