[[20200510143625]] 『二つのブックを選んで比較』(noa) ページの最後に飛ぶ

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

 

『二つのブックを選んで比較』(noa)

よろしくお願いします。

「まとめる」フォルダの、
「全員」というサブフォルダ内に、
「山田」「田中」「吉村」「鈴木」…というブックがある。

作業ブック「比較する」(「まとめる」フォルダに存在)で、
サブフォルダ「全員」内のブック「山田」と「田中」を選び、
(「田中」と「鈴木」のこともあれば、「山田」と「吉村」のこともある)
その二つのブックの特定名シートを比較する。

・・・ということをやりたいと考えています。

1.フォルダを二つダイヤログボックスで選ぶ

2.シートの比較は複数セルの一致不一致を知りたいので、
  countifsのようなことをvbaで

と考えているのですが、具体的にどうすればよいのか分かりません。
ご指導いただけませんか?

< 使用 Excel:unknown、使用 OS:unknown >


誤) 1.フォルダを二つダイヤログボックスで選ぶ
正) 1.ブックを二つダイヤログボックスで選ぶ

(noa) 2020/05/10(日) 15:01


>2.シートの比較は複数セルの一致不一致を知りたいので、

これだけでは、イメージできないので、具体例をあげて説明してください。
比較する元データと、期待する出力結果の
レイアウト(セル番地がわかる)が必要です。

(マナ) 2020/05/10(日) 15:34


追記します。

1.は、GetOpenFilenameの繰り返しでなんとかなりそうな気がしてきました。
 今のところ、「一つ目は?」「二つ目は?」と二回msgBoxを出して開く形にしていますが、
 どうも不細工なので、プルダウンなどにできれば目視もできていいのですが…

2.は、実はさっぱりわかりません。
  ifを繰り返す形…? ぐらいしか思いつかずです。

 一致不一致を見るというのは、
  複数セルのセット、たとえばA1/B1/C1/D1(中身は空白のこともある)が、
  もう一つのシート内にも同じセットとしてあるか、
  (場所はシート内のどこにあるか不明、範囲指定は可能)
 その一致不一致を見たい。ということです。
 (できれば、不一致ならそこを色付けしたい)
(noa) 2020/05/10(日) 15:44


一致不一致の説明不足補足します。何度も申し訳ありません。

ブック1のシート1内のA1/B1/C1/D1 (A2/B2/C2/D2と続けてループさせたい)
シート2のシート1内のどこか(たとえばB:E)にあるかどうか。

(noa) 2020/05/10(日) 16:00


マナ様(隠居じーさん様)

質問に答えたことになっていないとご指摘いただいたので(ありがとうございます)、
おっしゃるところの「具体例」になっているかどうかわかりませんが、追記してみます。
よろしくお願いします。

ブック1のシート1に下記内容が入っています。

A1 B1 C1 D1
あ い う え

A2 B2 C2 D2
か き   け

A3 B3 C3 D3
さ し す せ


ブック2のシート1に下記内容が入っています。

B  C  D  E
あ い お え
あ い う え
さ し す せ
か き く け
か き   け
あ あ う え

  
ブック1のシート1とブック2のシート1を照合し、
ブック1の「あいうえ」セットがブック2にも存在するか確認する。
続いて「かき(空欄)け」、「さしすせ」、その次、とすべてチェック。
結果はブック1(ブック2でもよいのですが)に、

A1 B1 C1 D1
あ い う え 一致

のように表示。

…以上がやりたい形です。

Excel2016/win10
(noa) 2020/05/11(月) 14:48


こういうことでしょうか。
 1)ブック1は、比較の対象はA〜D列固定である
 2)ブック2は、どの列が対象になるか決まっていない
 3)フォルダ内の、どれがブック1か、操作者はわかる?
 4)ブック1、ブック2とも、データは1行目からである(見出し行はない)
 5)ブック1、ブック2とも、比較対象の列以外にも、無関係なデータがある

(マナ) 2020/05/11(月) 18:38


マナ様

ありがとうございます。
なるほど。おっしゃっていることが理解できました。
例ではなく、そのままの形の提示が必要、ということなのですね?
見出し行など細かいところまで考えてくださってありがたいです。

申し訳ありません、実はどちらのシートも最終完成品がないのでイメージだけなのです、
が、仮に固定してみます。

それから、はじめはブック1に結果を、と書きましたが、たしかに
「どれがブック1か操作者がわかるか」という問題も出てきそうですので、
(ブック名で類推はできますが)、ブック3でこの作業ができればいいのかな、
と思い始めました。その形でお願いできますか?

1) ブック1は、比較の対象はA-D列固定
2) ブック2は、比較の対象はE-H列固定
3) ブック3にて、ブック1とブック2を呼び出して作業する
  (ブック3に結果表示として、ブック1をコピペしたもの+一致不一致、を表示させる)
4) ブック1、ブック2ともいずれもデータは2行目から
5) ブック1、ブック2とも、比較対象の列以外にも無関係なデータがある

以上です。

(noa) 2020/05/11(月) 18:55


あらら、そういう条件であれば、簡単です。

1)ブック3に、ブック1のデータをコピペ
2)E列にCOUNTIFS関数を挿入
3)E列を値に変換

(マナ) 2020/05/11(月) 19:05


>見出し行など細かいところまで考えてくださってありがたいです。

そういうことではなくて

どの列と比較してよいかわからないと困るので
見出しがあれば、
それを目印にできないかとか、
フォルターオプションで一致データを抽出できないか
と考えただけです。

ブック2の列は、「まだ」決まっていない
というだけですね。

(マナ) 2020/05/11(月) 19:23


マナ様

ありがとうございます。
つまり、vbaに関数を組み込む(ことができる?)ということでしょうか。
もしくは、関数だけでやったほうが簡潔という意味?

関数だけだとしたら、
1.ブック3を開き、
2.ブック1を選んでコピペ(手作業?)
3.ブック2を選んで(開いて?)countifs?(どうやって指示すれば?)
4.countifsで空欄の場合も空欄同士なら「一致」としたい。どうすれば?

と、これまた疑問がいっぱいで…

(noa) 2020/05/11(月) 20:52


>4.countifsで空欄の場合も空欄同士なら「一致」としたい。どうすれば?

できないんですね。知りませんでした。
では、ブック2のデータもブック3にコピペし
空欄には、「空欄」という文字列を入力しましょう。
で、最後に、「空欄」を置換で、空欄に戻しましょう。

>vbaに関数を組み込む(ことができる?)ということでしょうか。

できます。
まずは手作業で、どんな式にしたらよいか試してみましょう。

(マナ) 2020/05/11(月) 21:34


こんな感じで、イメージできますか。

1.作業ブック「比較する」を開き、マクロ実行
ここから、マクロ
2.「山田」を開いて「比較する」にコピペし閉じる
3.「田中」を開いて「比較する」にコピペし閉じる
4.空欄を置換で、「空欄」にする
5.数式(COUNTIFS)を入力
6.数式を値に変換(コピーして値貼り付け)
7.「空欄」を置換で、空欄にする
8.「比較する」を名前を付けて保存

(マナ) 2020/05/11(月) 21:48


マナ様

ありがとうございます。まだ解決していませんが、取り急ぎ今日のお礼とご報告を。

今のところ
1.〜 3.まではいけてます。
4.で空欄を「空欄」にするところで止まっています。
 はじめは、「山田」と「田中」を同じシートに並べてコピペしてみたのですが、
 空欄にする範囲指定が難しくなりそうだったので、それぞれシート分けました。
 で、どうするか、usedrange?  ifで見つけて置換?
 ってところでトライ中です。

countfsでもつまりそうです。
WorksheetFunction.CountIfs で書いてみてもうまくいかずエラーが続いてますが、
もしかしたら$を使えないのか?それとも何かほかの理由?…などなど手探りです。

6.〜8.はいけそうです。

(noa) 2020/05/11(月) 23:28


>空欄にする範囲指定が難しくなりそうだったので、それぞれシート分けました。
>で、どうするか、usedrange?  ifで見つけて置換?

1列あければ、Currentregionが使えます。
置換は、まずは手作業で試してください。
それを「マクロの記録」です。

>WorksheetFunction.CountIfs

違います。これも手作業で数式を入れてみてください。
で、「マクロの記録」です。

手作業でできていない段階で、マクロのことを考えなくてよいです。

(マナ) 2020/05/11(月) 23:50


マナ様

無事できました。ありがとうございました。
(noa) 2020/05/13(水) 01:39


コメント返信:

[ 一覧(最新更新順) ]


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