• ベストアンサー

Excelでブックの比較方法を教えてください!

はじめまして!今、エクセルでデータ入力をしていたのですがファイルに閉じるときになってはっと気がついたことがあります。作成しているのは会社別の登録書をいつ発行したかというデータを個人で管理しているデータです。 1:田中さん 田中運輸 2003年8月31日登録 2:佐藤さん 佐藤商事 2005年9月2日登録 ・・・ 158:田中さん 田中運輸 2004年8月31日登録 ・・・ というようなデータを入力していたのですが、新規のデータは、挿入して随時増やしていく、という事だったようです。私は、個人名(たとえば田中さん、佐藤さん)で管理していると思ってしまい、新規作成したあと、検索をかけて、勝手に同じ名前の人は、数行に渡って並んでいる状態にして更新していたので、行番号が、ファイル閉じるときになって間違っていたことに気がつきました。 ・・・ ブックを2つ起動して、見比べながら違っている行を切り取り-行末に貼り付け・・この作業を繰り返していくとかなりの時間のロスになってしまいます。 自分のミスですからしょうがないのですが、もし、「こんなの、こうすればいいよ」と言ってくださる方がいらしたら、是非教えてください。 今後も発生するかもしれないミスのため、 いろいろな方法が知りたいです。よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんにちは。 (私が、アップしようとしたら、回答の補足に書かれていましたので、重複する部分は割愛してください。どうやら、私の予想は合っていたように思いますが。) オリジナルの元ファイルはあるようですね。それと見比べて修正している、とのように受け取れました。 回答者にシミュレートできるぐらいのサンプルはご提示していただけたらと思います。 たぶん、「並べ替え」機能を使ったのでしょうか?だから、オリジナルの行番号を換えてしまったので、それを、元に戻して、ダブっているものは、行末に移したいというように読めました。 つまり、以下のようにしたい、ということですか? 失敗に気が付いた表 1:田中さん 田中運輸 2003年8月31日登録 2:田中さん 田中運輸 2004年8月31日登録 3:佐藤さん 佐藤商事 2005年9月2日登録 ↓ '途中までは、オリジナルファイルと同じ。 1:田中さん 田中運輸 2003年8月31日登録  2:佐藤さん 佐藤商事 2005年9月2日登録 ・・・ 158:田中さん 田中運輸 2004年8月31日登録 もし、そういう状況だと、やはり、「並べ替え」を使うしかありませんね。 最初のこのような数式を、任意の補助列の行頭から入れます。(Book2.xlsは、元のデータ) =MATCH(A1,[Book2.xls]Sheet1!$A$1:$A$120,0)+(COUNTIF(A1:$A$1,A1)-1)*200 「200」 というのは、その行の最後尾の次の行数 それで、その補助列で「並べ替え」をすれば、同じ名前のものは下に追いやられます。

teach_meok
質問者

お礼

並べ替えでもそういう方法があるんですね! (普通のメニューから起動するものしか知らなかったです;;すみません、超初心者で。。。。) 任意の補助列というのは、新たに列を挿入してそこに数式を入れていけばよいのですね。 MATCH関数は見たのですが、思いつきませんでした。一度も使用したことがないので、わくわくします。 ありがとうございました。

その他の回答 (4)

  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.5

早速#4の補足ありがとうございました。 まだもやもやした箇所がありますが、私個人のこととして、 結果として、#3のご回答と近くなリましたが 下記でどうでしょう。 Book12(原本)の名前の右列に番号が来れば、VLOOKUP関数が使えるのですが。質問者作成Book11に持って来たいのは Book12のどの項目でしょうか?。 下記はBook12の行番号になってますが、よろしいですか?。 BOOK12(原本)のSheet1のA1:A6に 山田 岡山 山中 岡田 田中 山田 とあるとします。 -------- Book11で A1:A8に A列 B列(=式の結果) 相田 新規 井上 新規 岡田 4 三田 新規 竹中 新規 山中 3 岩村 新規 のとき =IF(ISERROR(MATCH(A1,'C:\Documents and Settings\xxx\My Documents\[Book12.xls]Sheet2'!$A$1:$A$100,0)),"新規",MATCH(A1,'C:\Documents and Settings\xxx\My Documents\[Book12.xls]Sheet2'!$A$1:$A$100,0)) と入れて、下へ複写する。 結果は上記B列の通り。 'C:\Documents and Settings\xxx\My Documents\は補充されるので 式入力は[Book12.xls]でよい。 Match は見つけた最初の行しかとらないのですが、これが好都合かな? これ以上の自動化はVBAの出番でしょうか。

teach_meok
質問者

お礼

凄いですね!Bookわたりの式は初めて見ました。 また、B列を実際に式が実行された後まで記入してくださって、実行せずとも分かってしまうなんてありがたいことです。 この掲示板(質問版?)で、自分では思いつかないたくさんの答えをいただきました。全てやってみます! 私は、勘違いが多いため、このテの間違いをやってしまうことが結構あります。。。本当に助かりました。 ありがとうございました。(^o^)。

  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.4

余分なことが書いてあるためもあって、質問がわかりにくい。 多くの人が読むと予想されるので、下記のYNは、はい・いいえを、それ以外は文章で、補足してください。 (1)2つファイル(ブック)A,Bがある。 YN (2)自分が触った(作った)のはBの方。  YN (3)Aは原本的ファイルで誰も今回作業で触ってない。  YN (4)この質問はBのデータの順序に関する質問である。Bの順序を   変えたい     YN (5)順序はAの方式にすべきである。       YN (6)Aの順序を言葉で表現してください。  (7)Aの順番とBの順番の方式が違っている。   YN (8)現状Bの順序を言葉で表してみてください。 (9)Bをどのように並べたいのか、文章で表現してみてください。 (10)Bを並べ替えるための、手がかりで思いつくことは。 (11)Aの順序の方式を問題にせず、とにかくAの順序に並べたい                YN ーーーー 別の質問として、1:と158:が日付的に、なぜダブっているか? >新規のデータは、挿入して随時増やしていく どこへ? >検索をかけて、勝手に同じ名前の人は、数行に渡って並んでいる状態にして更新 なぜ検索をかけたのか?

teach_meok
質問者

補足

余分なことが書いてあるためもあって、質問がわかりにくい。 ::すみません。状況を説明したほうがいいのかと思って。。。 多くの人が読むと予想されるので、下記のYNは、はい・いいえを、それ以外は文章で、補足してください。 (1)2つファイル(ブック)A,Bがある。 ::Y (2)自分が触った(作った)のはBの方。  ::Y (3)Aは原本的ファイルで誰も今回作業で触ってない。 ::Y (4)この質問はBのデータの順序に関する質問である。Bの順序を   変えたい    ::Y (5)順序はAの方式にすべきである。     ::Y (6)Aの順序を言葉で表現してください。  ::行番号=登録書類番号として割り振ってあり、その番号が登録書ファイルのindexになっている。 (7)Aの順番とBの順番の方式が違っている。   ::Y (8)現状Bの順序を言葉で表してみてください。 ::行番号は昇(?)順、個人の登録書データが複数行、そのため個人で登録書がいくつあるのかを見るのにはよいが、登録書番号が最初割り振られていたものとは違っているため、indexの役割が果たせなくなった。 (9)Bをどのように並べたいのか、文章で表現してみてください。 :: (1)行番号=登録書index (2)新規で登録する場合、個人別になるのではなく、登録書indexを新規に作成し、その番号に割り振られたページに新規登録書をファイルに閉じる (10)Bを並べ替えるための、手がかりで思いつくことは。 ::最初の状態になっているデータと見比べる。 (11)Aの順序の方式を問題にせず、とにかくAの順序に並べたい ::              N ーーーー ::Aの順序は変えない、新たに番号を割り振って作成していきたい 別の質問として、1:と158:が日付的に、なぜダブっているか? >新規のデータは、挿入して随時増やしていく どこへ? ::行末へ順次。 >検索をかけて、勝手に同じ名前の人は、数行に渡って並んでいる状態にして更新 なぜ検索をかけたのか? ::依頼されたときに、『その人がどれだけ更新しているかを管理する』ファイルと説明を受け、意味を汲み違えていたため。また、別の管理ファイルがあり、それと混同もしていたのだと思う。 ::一応、このような答えになりました。

  • nejikuma
  • ベストアンサー率28% (2/7)
回答No.2

#1です。だめなら。 両方のブックを開きます。 どちらかのブックに新しいシートを追加します。 そのシートの先頭行のあるセルに下記の式を入力します。 =IF([book1.xls]Sheet1!A1=[book2.xls]Sheet1!A1,"○","違う") book1.xls,book2.xlsは、比較したいブック名 Sheet1は、それぞれのシート名 A1のAは、田中運輸などが入っている列を指定します。 で、先頭行のあるセルに「○」が表示されたら、その行を下までコピーします。 すると違いが出ている行から「違う」が表示されますのでその行に対して処理する。

teach_meok
質問者

お礼

ありがとうございます! 昔、同じシート内にあるデータの比較はやった事があったのですが、シートが違うときの方法が分からなかったので助かります。 手順が書いてあり、私でもすぐできそうです。 ありがとうございました。

  • nejikuma
  • ベストアンサー率28% (2/7)
回答No.1

例の「1:」「158:」は、セルに入力された値なのでしょうか。又は、「2003年8月31日登録」は時系列でしょうか。例では、2005年の後ろに2004年がきていますが... もしも、データ順が保たれている列があれば、シート全体(あるいは必要部分を)を選択して、「データ」→「並べ替え」で該当列順にソートする手がありますがいかがでしょう。

teach_meok
質問者

お礼

早速の回答ありがとうございました。 ただ、データの並べ替えではうまくいかないような作成の仕方をしてしまったので(というか、並べ替えてしまったためにダメになったので)シートとシートの比較か、ブックとブックの比較を知りたいのです。 orや、EXACT関数を使用するのか、それとももっといい方法があるのか調べながら分からなくなってきてしまって・・・。 質問補足をしましたので、もしご存知でしたら教えてください。 でも、初めてした質問での回答で、うれしかったです。 ありがとうございました。

teach_meok
質問者

補足

早速の回答ありがとうございます。ただ、ソートでは解決しないんです。 質問が要を得なくてすみません。 『1:田中さん 田中運輸 2003年8月31日登録 2:佐藤さん 佐藤商事 2005年9月2日登録 158:田中さん 田中運輸 2004年8月31日登録』 この状態はなぜかと言うと、人別に作成していたせいです。↑の状態にならなくてはいけないのに、現在は 『1:田中さん 田中運輸 2003年8月31日登録  2:田中さん 田中運輸 2004年8月31日登録(*この行が新規) 159:佐藤さん 佐藤商事 2005年9月2日登録』 というようになっているんです。(すみません、ややこしかったですね。焦っていたのではしょりすぎました。) このような状態で登録されたため、行番号は昇順(?)になっているあため変ではないのです。本当は、新規に登録する行はその都度挿入して、行番号が増えていき、その番号で誰の登録書かを見るためのファイルなのに、番号で登録書が検索できない結果になってしまったのです。 そこで、もう保存してしまったので、元のデータ(book1)と新しいデータ(book2)を比較して、新たな行だけいったん、そのデータから削除して、再度、新規で行挿入をしていきたいという状態です。 申し訳ありませんが、比較方法を教えてください。

関連するQ&A