[[20061027174147]] 『異なる2つのファイルのシートを比較し、2つの条件』(困りました・・・) ページの最後に飛ぶ

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

 

『異なる2つのファイルのシートを比較し、2つの条件にあったものに印(*)をつけたい』(困りました・・・)
エクセルマクロ初心者です・・・

異なる2つのファイルシートAとBで、条件にあったものに * をつけたいのですが、
なかなか上手くいきません・・・

【条件】
ファイルシートA M列(M4〜)
ファイルシートB D列(D2〜)

ファイルシートA N列(N4〜)
ファイルシートB E列(E2〜)

が同じならば、ファイルシートB の
L列に * を入れたいのです。

ファイルシートA

   A B C D E F G H I J K L M N ・・・
4  あ い う え お か き く け こ さ し す せ
5  そ た ち つ て と な に ぬ ね の や ゆ よ

ファイルシートB

   A B C D E F G H I J K L M N ・・・
2  た ち つ す と な に ぬ ね の は * 
3  ま や ら わ よ ん あ い う え お * 

条件が、2つあり、どのように処理したらよいか??です・・・

どなたかお知恵をお貸しいただけませんでしょうか?

よろしくお願いいたします。


 どちらか一方の組みが同じだったら「*」で良いんですかね?
 Bシートの
 L2=IF(AND(COUNTA(A!M4,B!D2,A!N4,B!E2)>0,OR(A!M4=B!D2,A!N4=B!E2)),"*","")
 下にコピー。

 (HANA)


 ブックも違ったのですね。
 AシートがAと言う名前のブックに有るとして
 (Aシートが開いている状態の時の式です)
 Bシートの
 L2=IF(AND(COUNTA([A.xls]A!M4,[A.xls]A!N4,D2,E2)>0,OR([A.xls]A!M4=D2,[A.xls]A!N4=E2)),"*","")
 下にコピー。

 (HANA)

 横から失礼します。(別の人の質問に入ると掟破りになるでしょうか?)

 HANAさん、私は出来ました。
 以前、重複の自分の質問でシート間の重複を調べたい旨、書かせていただきましたが
 「 困りました・・・」さんの質問が、同じような感じだったので、
 HANAさんの式のセルをすべて1(A!M1・・・等)に作り変えてみたところ、みごと
 思い通りの結果を出すことが出来ました。

 重複で教えていただいた方法(式)の応用だと思いますが、
 自分で、ここまでの応用は、できませんでした。(色々チャレンジしてみたのですが)
 明日から仕事で生かすことができます。ありがとうございます。

 「 困りました・・・」さん、横からごめんなさい。

 (ranmal)


 ranmalさん
 出来ましたか。良かったです。
(困りました・・・)さんの困ったも解決出来ていると良いのですが・・・。

 >重複で教えていただいた方法(式)の応用だと思いますが、
 えっと・・・違います。(多分)
[[20061018231154]]『同じ行データの検索』(ranmal)
 あれは、COUNTIF関数を使ったものですよね。
 これはIF関数を使って単純に見比べています。
 「あるセルと同じ順番に並んでいる別のセルとの内容を見比べたい」
 とか言う時に便利だと思います。
 「どこにあるか分からないけど、とにかくこれと同じものがあれば・・・」
 とか言う時には向かないでしょう。
(もしかして
  >Y13=IF(COUNTIF($X$13:X13,X13)>1,"TRUE","FALSE")
  こっちの話だったのですかね?これなら似ていますが・・・・・)

 (HANA)

 >Y13=IF(COUNTIF($X$13:X13,X13)>1,"TRUE","FALSE")
 >こっちの話だったのですかね?これなら似ていますが・・・・・)
 そうです。この式の応用と考えてしまったのですが・・ ・
 まだまだですね。私。(^_^.)

 >「あるセルと同じ順番に並んでいる別のセルとの内容を見比べたい」
 私の場合は両シートとも、列NO.は違っても、同列に同じ内容のデータが並んで
 いるので、結果が出せたのですね。

 マクロを使わない場合は、元データが50位あって、シート内のどこにあるか
 分からないけど、それと一致するものを探し出す・・なんてことは出来ませんよね。
 ctrl+Fキーでの検索では1個ずつしか探せないし・・

 仕事で使うデータは大抵並んでいるので便利に使うことが出来ています。
 HANAさん、今後とも宜しく指導お願いいたします。(^_^)

 (ranmal)


 ははぁ、やっぱりIF関数の話でしたか。
 どちらもIF関数を使っていますが
 前の方法を知ったからその「応用」で今回の方法が分かるか・・・
 と言うと、そうは言えないと思います。
 IF関数は単に「この場合はA、そうでなければB」と
 場合分けをするだけの関数で、重要なのは「この場合は」
 の部分の式をどの様に設定するかだと思います。

 どちらかというと「Y13=TRUE」と書いた部分
 (条件付き書式を設定した時の数式です)の方が
 今回の式を思いつくのに近かったのかもしれません。
 今回の式の「この場合は」の部分を見てみると
 AND(COUNTA(A!M4,B!D2,A!N4,B!E2)>0,OR(A!M4=B!D2,A!N4=B!E2))
 この部分ですが・・・・・COUNTA関数の方は単にエラー処理で
 重要なのはOR関数で纏められた方です。
 OR関数はご存じですよね?(今回は二つなので)「どちらかがTRUEならTRUE」です。
 “どちらか”の片方を取り出すと「A!M4=B!D2」ですね。
 「シートAのM4セルの値とシートBのD2セルの値は同じですか?」
 を確認する式になっています。
 「Y13=TRUE」とよく似てると思いませんか?
 こちらは「Y13セルの値はTRUEと言う値と同じですか?」ですよね。

 応用を試みるか別の方法を探すのかの分かれ目は
 「あ、この関数見たことがある」ではなく
 「あ、この考え方つかえるかも」だと思います。
 そのためには、式の考え方が何となくでも分かる事が必要でしょう。

 と、言うことで
 >マクロを使わない場合は、元データが50位あって、シート内のどこにあるか
 >分からないけど、それと一致するものを探し出す・・なんてことは出来ませんよね。
 この部分は、例えば「列は特定出来るがどの行に有るか分からない」と言うだけなら
 「COUNTIF関数ってどんな関数?&
  前回どうして同じ内容かどうかが分かったんだっけ?」
 ってのが分かったら
 「それと一致するもが存在するかどうかチェックする」
 方法は案外簡単に見つかるかもしれません。

 (HANA)

 出来るということなのですね?
 考えて見ます。
 出来たら、必ず書き込みます(時間はかかるかもしれませんが・・)

 (ranmal)

 HANAさん、報告が大変遅くなりました。
 HANAさんから課題を頂いたという認識で
 HANAさんの大事なコメントを読み流してしまい
 自分の世界で考えすぎていました。
 IF関数を使うということだけ、HANAさんのコメントにてINPUTされていたのですが
 なんとか自力で思い、MATCH関数、INDERECT関数、DGET関数、それから
 馬鹿な方法でVLOOKUP関数の1列指定(苦し紛れです。情けない・・)
 ・・と色々挑戦して、全部・・方向が違うということに気づき、
 HANAさんのことだから、今まで教えていただいたこと以外の方法での
 課題は出さないと思いつき(今更ですが・・)
 再度、上記コメントをじっくり、読み、分かりました。
 出来たんですぅーーーーっ。すごく嬉しいです。

 リスト(検索する元データ)がシート2のC1からC10にあるとして
 検索対象がA列にある場合。 

 =IF(COUNTIF(Sheet2!$C$1:$C$10,A3)=1,"*","")

 この式をしたまで式コピーして、あっという間に検索できました。
 HANAさんをはじめ、今まで私に教えてくれた先生方などが
 この質問と、私の「時間はかかるかも・・」という答えを見て
 歯がゆさと、じれったさと、何今まで聞いていたんだ(教わっていたんだ)
 と思っていたのだろうな・・と顔から火が出る思いです。

 でも、大分回り道しましたが、悩んだ分、しっかり理解できた感じです。
 そして、すご〜〜く、嬉しいです。(~o~)

 思い込みが激しく違った方向に行きがちな私ですが
 これからも、ご指導宜しくお願いいたします。

 (ranmal)


 出来ましたか、良かったです。
 一日待って定時(5時の事では無いですよ)迄に書込がなかったら
 「思いが違うのかも」とサンプルを書こうと思ってました。

 まずは
 >=IF(COUNTIF(Sheet2!$C$1:$C$10,A3)=1,"*","")
 ですが・・・・これってSheet2!$C$1:$C$10に重複があったら
 困ったことになりませんか?
 もちろん「重複無し」と言う事なら十分使えると思いますが。

 そして
 >MATCH関数、INDERECT関数、DGET関数、それから
 >馬鹿な方法でVLOOKUP関数の1列指定・・と色々挑戦して、
 「INDERECT関数、DGET関数」この辺りはどの様に使うのか思いつかないのですが
 MATCH関数とVLOOKUP関数は(私はCOUNTIF関数よりなじみ深いので)
 無駄に使ったりします・・・・。その無駄さ加減がこちらの過去ログ。
[[20060921231356]]『別シートにある同内容の行を削除したい』

 >大分回り道しましたが、悩んだ分、しっかり理解できた感じです。
 いくら時間がかかっても、それはranmalさんの時間ですから
 じっくりゆっくりのんびりやっても、ここの人は誰も文句なんて言わないでしょう。
 ・・・心配はするかもしれませんが。
 大分回り道した時に諦めた式も、もう一度見てみると
 どこに気が付けば諦めなくて済んだのか
 分かるかもしれませんね。
 (どちらもISERROR関数をプラスで使うことになりそうですが)

 (HANA)


 >サンプルを書こうと思ってました。
 ありがとうございます。m(__)m

 >ですが・・・・これってSheet2!$C$1:$C$10に重複があったら
 >困ったことになりませんか?
 >もちろん「重複無し」と言う事なら十分使えると思いますが。
 私の場合、sheet2は元データ(重複無しのリスト)なので
 大丈夫でした。

 『別シートにある同内容の・・・』拝見しました。
 そして、また教えていただきたいことが出来てしまいました。  
 2つあるのですが、
 初歩的なことだと思うのですが、

 >一度きりの作業なら
 >シート1のA列を挿入して作業列を作ります。
 >A1=MATCH(B1&C1,Sheet2!$A$1:$A$1000&Sheet2!$B$1:$B$1000,FALSE)
 >を入力して、【Ctrl+Shift+Enter】 で確定して下さい。
 >数式が { } で囲まれたら、必要行フィルドラッグ。

 【Ctrl+Shift+Enter】で確定の技も知りませんでしたし、
 何故、{ }で囲むのか。

 もちろん、その操作をしないと全部エラーになり、
 HANAさんの教えのとおりにやって、正しい結果が出ました。

 もう一つは、
 >Sheet1にA〜C列を挿入して
 >A1=D1&E1
 >B1=Sheet2!A1&Sheet2!B1
 >としたら
 >C1=VLOOKUP(A1,B:B,1,0)
 >  (エラー値以外が重複有り)
 範囲でB:Bというのと、列で1行を指定することです。
 式を拝見したときと、実際に試して、このような式が成立するので
 驚きました。

 ただ、私は結果が出ませんでした。
 結果を出すことが出来た、MATCH関数と同じデータで試してみたのですが
 以下のようになってしまいます。何かが抜けているのかもしれません。

 sheet1( C1=VLOOKUP(A1,B:B,1,0)の式を入れてコピーした結果)

      A    B         C       D       E
 1  122	101	#N/A	12	2
 2  143	113	#N/A	14	3
 3  164	126	#N/A	16	4
 4  185	158	#N/A	18	5
 5  206	1610	206	20	6
 6  227	1821	227	22	7
 7  248	1922	248	24	8
 8  269	206	#N/A	26	9
 9  2810	227	#N/A	28	10
 10 3011	248	#N/A	30	11

sheet2

    A    B     
 1  10	1 
 2  11	3
 3  12	6
 4  15	8
 5  16	10
 6  18	21
 7  19	22
 8  20	6
 9  22	7
 10 24	8

 宜しくお願いいたします。

 (ranmal)


 えっと、じっくり検証出来て居ないのですが・・・
 どうなる事を予想してますかね?
 重複が3件ではないのですか?

 うっかりしていたのでデータによってはうまく行きません。
 たとえば、A:B列が11:2 と 1:12 のものは、同じものとして扱われてしまいます。
 問題がそこにある様ならA1&B1のところをA1&"-"&B1にかえてみてください。

 うまく行きますかね?
 それとも、私が何か勘違いしてます?

 (HANA)

 HANAさん、ごめんなさい。
 私の勘違いでした。(ーー;)
 結果は上の表通り、ちゃんと出ていました。
 「勘違い」という言葉で、今、私が勘違いしていることに気づきました。
 またまた私の思い込み&勘違いで、ご迷惑おかけしてしまいました。
 m(__)mm(__)mm(__)m

 (ranmal)


 勘違いでしたか。
 良かったです。

 続きは夜にします。

 (HANA)

 「続きは夜に・・・」なんて書きましたが
 大したことがあるわけではなく・・・

 >【Ctrl+Shift+Enter】で確定の技も知りませんでしたし、
 >何故、{ }で囲むのか。
 この数式は「配列数式」と呼ばれるもので「その様に確定するもの」なのです。
 『エクセル 配列数式』として検索エンジンで検索して
 ヒットしたページを見るのが分かりやすいと思います。
 おそらく『日経PC21 / エクセル(Excel)「配列数式」講座』
http://pc.nikkeibp.co.jp/pc21/special/hr/index.shtml
 このページが一番上に来ると思いますが・・・。

 >A1=MATCH(B1&C1,Sheet2!$A$1:$A$1000&Sheet2!$B$1:$B$1000,FALSE)
 「B1&C1」と言う組合せのものを「A1:A1000とB1:B1000」を上から順に
 組み合わせていったものの中から完全一致で探しなさい
 『上から順番だから、勝手に組み合わせて見比べてね』
 とお願いしたりするときに、その様な式を作り
【Ctrl+Shift+Enter】で確定すると、エクセル君は
「そう言うことをご希望ですか」と、お願いを聞いてくれます。
 だから、単にEnterだけだと「何いってんの?」って言われちゃいます。(涙)

 (HANA)

 HANAさん、よく分かりました。
 毎回のことですが、分かりやすい説明ありがとうございます。
 今回は、(困りました・・)さんの質問から始まり
 様々なことを勉強させていただきました。ありがとうございす。
 これからも宜しくお願いいたします。

 (ranmal)


 補足ですが・・・・
 リンク先は「二つの並び順が同一のものが存在するかしないか」を見るものなので
 今回の(困りました・・)さんの意図する「二つのどちらかが存在したら」
 と言う場合には使えません。

 また、双方並び順も含め合致したら「*」を表示させたい場合は
 ISERROR関数でエラー値かどうかを調べ、IF関数を使って
 TRUEの場合(エラー値となった場合)は空欄、
 FALSEの場合(同じ並び順が有った場合)は「*」を表示
 と言う数式に組み込む必要があります。

 そうそう、
 >【Ctrl+Shift+Enter】で確定の技も知りませんでしたし、
 この部分ですが、「エクセルに関する【Ctrl+Shift+Enter】で確定」と言うことで、
 グーグル等で『エクセル Ctrl+Shift+Enter』として検索してみると
「配列数式」と言う言葉にたどり着けたかもしれませんね。

 (HANA)

 >今回の(困りました・・)さんの意図する「二つのどちらかが存在したら」
 >と言う場合には使えません。
 はいm(__)m(困りました・・・)さんの質問を私が横取り(乗っ取り?)して、
 途中から私の質問に 変えてしまいました。申し訳なく思っております。

 >(どちらもISERROR関数をプラスで使うことになりそうですが)
 前回、回答をいただいたときに、最後に記載されていたので
 気になり、私なりに関数辞典やネットで調べてみました。
 これを使うと色々応用するときに 便利な関数ですね。
 とても勉強になりました。

 >『エクセル Ctrl+Shift+Enter』として検索してみると
 >「配列数式」と言う言葉にたどり着けたかもしれませんね。
 つい、甘えて、そのまま直に聞いてしまいました。(ーー;)

 自分だけで考え悩んでいると、一つのことに固まって抜け出せなくなりますが
 質問・回答をいただき、新たな関数に出会えたり、応用方法を学べたりで
 感謝しています。
 でも、基本的なことは自分で調べて勉強しなくては駄目ですよね。
 気をつけたいと思います。(^_^)

 (ranmal)


 >>・・・と言う場合には使えません。
 これは、「後でちらっとこのスレを見た人が思い違いをしないように」
 と思って書いただけですので、ranmalさんは気にしないで下さい。

 > つい、甘えて、そのまま直に聞いてしまいました。(ーー;)
 「こうやったら分かったでしょ!!」
 と言うことではなく、「検索ワードの選定の参考」です。
 (・・・参考になればですが。)

 >自分だけで考え悩んでいると、一つのことに固まって抜け出せなくなりますが
 最初に思いついた方法って、なかなかあきらめがつかないものですよね。
 To be or not to be, that's the question.

 (HANA)


コメント返信:

[ 一覧(最新更新順) ]


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