• ベストアンサー

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/17068)
回答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/17068)
回答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

  • ピボットでの合計とデータのカウント方法

    下記のようなデータで 行:日付(月でグループ化)、商品。列:国。データ:[合計/金額]  でピボットを作りました。 データに[データの個数/名前]をプラスすると、商品の行が2行になってしまいますが、 ここには金額だけが表示したいです。 で、月の[合計/金額]の次の行に人数のカウントを表示させたいのですが、 今のやり方だと同じ名前が別カウントになってしまいます。 どうにかうまくやる方法があったら是非教えていただければと思います。  日付 名前 国 商品 金額 1月1日 佐藤 日本 タイヤ 100 2月3日 田中 日本 パソコン100 1月13日 田中 中国 タイヤ 100 4月22日 佐藤 中国 パソコン100 2月16日 佐藤 インド タイヤ 100 1月3日 田中 中国 パソコン100 4月5日 佐藤 中国 パソコン100

  • VBAでの行数を揃える方法

    エクセルで下記のように氏名ごとに1行から複数行の行数が割り振られています。  A      B    C 氏名  出発日  到着日 1佐藤  2/1      2/4 2佐藤  3/1      3/3 3佐藤  8/2       8/15 4小林  5/3       5/4 5田中  1/20      1/25 6田中   1/26     1/28 7田中   2/4      2/6 8田中   6/1      6/30 9田中   11/20    11/23 これらを3行には27行挿入、1行には29行を最後に挿入して必ずどこのかたまりも30行にする方法はありますでしょうか? お分かりになる方、ご回答よろしくお願いいたします。

  • エクセルにて「期間指定」で「データ集計」する方法

    エクセルで営業商談用顧客管理を行っています。 シート1には、商談日を下記のように記載しており A列 B列 日付 担当 1/1  山田 1/6  田中 1/8  佐藤 2/3  山田 2/4  山田 2/6  佐藤 2/9  田中 3/1  佐藤 3/2  山田 3/5  佐藤 別シートにて、例えば1月にどの担当が何件商談をしたか、を 下記のように管理したいのですが 山田 ○件 田中 ○件 佐藤 ○件 こちらの関数の指定方法について、ご教授いただけないでしょうか? よろしくお願いします

  • EXCELで同列違行の複数の単語を同列違行の文章に代入する方法

    EXCEL2007で、A1行に例えば 田中 佐藤 村田 高野 B1行に みけ たま ごん ぽち というデータがあります。この2つのデータからC1行に 千葉の田中さん家のみけはかわいい 千葉の佐藤さん家のたまはかわいい 千葉の村田さん家のごんはかわいい 千葉の高野さん家のぽちはかわいい というデータを出力したいです。このような、 「同じ列の違う行の複数の単語より、一定の法則を持った文章を同じ列の違う行に作成する」 操作を実行したいのですが、どのような操作を行えばいいのでしょうか。 どなたかご教示ください。よろしくお願いします。

  • 【エクセル】縦に続いた表を横にして整理したい

    表題の通りですが、エクセル2003で、以下のようなことがしたいです。 [元データ]   A     B       1  氏名   田中 2  住所   東京 3  電話番号 *** 4  登録日  *** 5 6  氏名   鈴木 7  住所   埼玉 8  電話番号 *** 9  登録日  *** 10 11  氏名   佐藤 12  住所   埼玉 13  電話番号 *** 14  15 氏名   工藤 のように一人分のデータが、空白セル1マス空けて、延々と続いた様な表があります(3万行くらい)。 これを下記のように変更したいのです [整理後]   A    B    C    D    E 1 氏名   住所   電話番号  登録日 1 田中   東京   ***   *** 2 鈴木   埼玉   ***   *** 3 佐藤   埼玉   ***   (空白) 4 工藤    5 のような感じです。 3つ目の佐藤氏のデータのように元データに登録日という項目が無い場合があります。 それ以外の項目に関して順番や有無の違いはありません、1データの最終行にある登録日という 項目だけ有ったり無かったりします。 項目だけは縦のものを横に貼り付け、で出来たのですが、それが意外のデータを効率よく移すには どうしたら良いでしょうか。 関数、マクロを教えていただけたらありがたいです。こうしたら良いというアイデアだけでも助かります。どうか宜しくお願いします。 (説明不足のところがありましたらすいません…補足致します)

  • エクセル他ブック参照について

    エクセル2000です。 他ブックの参照についての質問です。 請求書に書いた内容を日計売上のデーターにリンクさせたいのです。 (1)請求書ファイルの一つのセルには「平成20年1月1日」と書いてあるとします。 それを日計売上に「2008/1/1」と自動的に入力されるようにしたい。 (2)請求書の複数のセルに書かれた内容(文字)を、日計売上の一つのセルに入力されるようにしたい。 (3)請求書を一日に数枚作成するのですが、このデーターで請求書を作り印刷後、毎回消すとしたら、日計売上も毎回消えてしまいます。 ではなく、請求書を作成して日計売上の1の行に参照され、請求書を消した場合でも1の行にはその内容が残り、また次の請求書を作成すると、日計売上の2の行に参照されるようにするためにはどうすればいいのでしょうか? もし無理だったら、請求書のデーターを何枚か用意する方法とか、ボタンを作って、ボタンを押すと参照されるなど、いい案があったら教えてください。 宜しくお願いします いっぱいありますが、どうぞ宜しくお願いします。

  • excel に関しまして質問いたします。

    excelを使って作業しています。 縦列したの行のそれぞれひとつのセル内に鈴木・・、佐藤・・、田中・・、などといった言葉が入力(・・の部分はばらばらです)されています。 このときに鈴木だけ消してそれぞれのセル内に佐藤・・、田中・・という様に一気にまとめ上げることはできないでしょうか? グラフをお示しできればより詳しく説明できるのですが・・・。 なんとなく私の質問の意図がわかってくださればご回答お願いします。

  • エクセルデーター集計について

    現在1月から12月まで各月毎のシートと集計表があります。 そのシート内の集計表は  A  ・   B     ・ C ・ D ・ E ・・・・・・・・BB 1担当・顧客ナンバー・日付・苗字・名前・・・・・・・・ 2田中 3佐藤 4小川 5田中 6田中 7佐藤 8井上 ・ 150位まで(行については月により変動あり) と各列と行にデータが入力されてます。 担当者は12名で元になるデータ表には活動順に担当者名が入力されてます。 やりたい事は (1)各担当別の月別集計と年間集計シート作成 月毎にシートを作成でなく、あくまで担当者毎の月毎集計と12か月の年間合計転記を同一シートにする事は可能でしょうか。(個人成績表の為) またその時担当別にシート作成が出来るとうれしいです。 (2)全担当者の月集計一覧シート 一つのシートに全担当者の月別集計(1月から12月)を一覧にしたいのですが、各担当者の月別合計欄を転記の認識なのですが、他にいい方法もありますか? (3)全担当者の年間集計一覧シート (2)の合計を転記の認識です。他にありますか? 以上3点を作成したいと思ってます。 (1)が出来れば何とかなるような気はしますが、どなたかご教授お願い致します。 項目はA~BBまで横一列にあり 担当者の入力も横一列なのでvlookupでも考えましたが、マクロで何とか出来るなら挑戦してみようかと思ってます。 集計表自体他のブックからのリンクやなんやらで20M位ファイルサイズがあり、今回の(1)(2)(3)は新規ブックに作成したいと思います。

  • エクセルSheet1,2を使っての行ごとでの値の返し方

    Sheet1にデータを行ごとに入れていきます。 Sheet2にSheet1のデータを行ごとに返します。 例えば下記のようなデータがSheet1にあります。 行/列  A     B     C    D     登録番号 申込み日  氏名   住所  1  h1234  15年2月  山田太郎 東京都品川区   2  k0022  14年8月  田中次郎 千葉県浦安市   3  m3651  15年1月  鈴木三郎 埼玉県川口市   4  g7890  13年6月  佐藤四郎 神奈川県横浜市 Sheet2のA1にSheet1の行3のデータを返すため3と入れます。登録番号を入れたいので、次のような関数を入れてみましたがうまく出来ませんでした。 =IF(ISNUMBER(A1),INDIRECT(Sheet1!A3&A1),"") 何がいけないのかわかりませんでした。 それに、出来れば登録番号の数字(全て4桁です)返したいのですが、さらに、MIDを使えばよいのですか?説明が十分かどうかわかりませんがアドバイス宜しくお願い致します!

  • エクセルで別シートから条件付きで抽出する方法

    エクセルの知識が乏しいのに、打ち込み量がとても多く困っています。 どうか皆さんのお知恵を貸してください。 イラストの販売管理をしています sheet1に下記のように入力されています。   A      B     C     D 1 作家名 販売日 オプション 価格  マージン価格 2 田中  2015/1/1   1    29800 20000 3 佐藤  2015/1/10   0    31500 10000 4 鈴木  2015/10/1  1    29800 15000 やりたいことは、上記データから別シートに日別に売上管理を作成することです。 作家によってマージン価格が異なる為 具体的には 2015/1/1に誰が幾ら、オプションは何個販売したかを表示したい sheet2に下記のように表示したいのです。   A      B     C     D 1 作家名 販売日 オプション 価格  マージン価格 2 田中  2015/1/1   1    29800 20000 3 鈴木  2015/1/1   1    29800 10000 4 佐藤  2015/10/10  0    31500 15000 分かりにくいかもしれませんが 今まで日別のマージン管理を手打ちでコピペしていたものを 自動化したいのです。 宜しくお願い致します。

専門家に質問してみよう