• 締切済み

EXCELの更新された部分だけリストしたい

2つのEXCELファイルがあって、片方のシートの中のどこかのセル(複数)を更新して保管しただけのファイルが残った方です。 この2つのファイルを後から比較して、更新されたセルだけ、更新前の値と更新後の値を添えて自動的に拾いたいのですが、便利な方法はありますか? 関数を使ってもよいのですが、たとえば更新前と更新後(ファイル名も変更)のファイルを同一フォルダに入れて、何か実行ファイルを起動すると差分リストが即座にできるようなのも理想です。

みんなの回答

  • Chiquilin
  • ベストアンサー率30% (94/306)
回答No.5

「差分リスト」がどんなものかよく分かりません。 とりあえず編集する前に ファイルに[変更履歴の記録]を付けとい たらどうですか?

  • HohoPapa
  • ベストアンサー率65% (454/692)
回答No.4

>このVBAを実行する方法を知らず、 >もし可能でしたらそれが簡単にわかるようなサイトでも >ご紹介いただけないでしょうか。 https://excel-ubara.com/excelvba1/ これがいいと思います。 この第7回までを学習すれば 今回提示したコードを標準モジュールに貼り付け 実行することができるようになります。 個人差があるかもしれませんが おそらく、30分を超えることはありません。 第8回以降は、後でゆっくり取り組むこととし、 躓いたら、 okwaveで都度聞いてしまうというのもアリだろうと思います。

  • HohoPapa
  • ベストアンサー率65% (454/692)
回答No.3

>片方のシートの中のどこかのセル(複数)を更新して という作業には、 ・セルの値を書き換える ・計算式を修正する。 ・罫線など書式を変える などいろいろと考えられますが ・セルの値を書き換える ・計算式を修正する。 この2つに限定してよければ かつ、VBAでよければ 以下のようなコードはいかがでしょうか。 よかったら参考にしてください。 Sub sample()   '2つのブックを比較し、差分を自ブックのシート1枚目に列挙する。  Dim BefBook As String  Dim AftBook As String  Dim BefSheet As Worksheet  Dim AftSheet As Worksheet  Dim wkCol As Integer  Dim wkRow As Integer  Dim wkRange As Range  Dim PutLineNum As Integer  Dim SheetNum As Integer  Dim BefFile As String  Dim AftFile As String     Const intvalCols = 5     BefFile = Application.GetOpenFilename("Microsoft Excelブック,*.xlsx")  If BefFile <> "False" Then   Workbooks.Open BefFile   BefBook = ActiveWorkbook.Name  Else   Exit Sub 'ファイルを指定しなかったら抜ける  End If  AftFile = Application.GetOpenFilename("Microsoft Excelブック,*.xlsx")  If AftFile <> "False" Then   Workbooks.Open AftFile   AftBook = ActiveWorkbook.Name  Else   Workbooks(BefBook).Close   Exit Sub 'ファイルを指定しなかったら抜ける  End If  If Workbooks(BefBook).Sheets.Count <> Workbooks(AftBook).Sheets.Count Then   MsgBox ("シート数が不一致")   Workbooks(BefBook).Close   Workbooks(AftBook).Close   Exit Sub  End If  ThisWorkbook.Sheets(1).Cells.ClearContents    For SheetNum = 1 To Workbooks(BefBook).Sheets.Count   Set BefSheet = Workbooks(BefBook).Sheets(SheetNum)   Set AftSheet = Workbooks(AftBook).Sheets(SheetNum)      If BefSheet.Name <> AftSheet.Name Then    MsgBox ("シート名不一致 " & BefSheet.Name & "/" & AftSheet.Name)    Workbooks(BefBook).Close    Workbooks(AftBook).Close    Exit Sub   End If     With ThisWorkbook.Sheets(1)    .Cells(1, ((SheetNum - 1) * intvalCols) + 1).Value = BefSheet.Name    .Cells(2, ((SheetNum - 1) * intvalCols) + 1).Value = "行番号"    .Cells(2, ((SheetNum - 1) * intvalCols) + 2).Value = "列番号"    .Cells(2, ((SheetNum - 1) * intvalCols) + 3).Value = "値Bif"    .Cells(2, ((SheetNum - 1) * intvalCols) + 4).Value = "値Aft"    PutLineNum = 3    For Each wkRange In BefSheet.UsedRange     wkCol = wkRange.Column     wkRow = wkRange.Row          If wkRange.Formula <> AftSheet.Cells(wkRow, wkCol).Formula Then      .Cells(PutLineNum, ((SheetNum - 1) * intvalCols) + 1).Value = wkRow      .Cells(PutLineNum, ((SheetNum - 1) * intvalCols) + 2).Value = wkCol            If wkRange.HasFormula = True Then       .Cells(PutLineNum, ((SheetNum - 1) * intvalCols) + 3).Value = "'" & wkRange.Formula      Else       .Cells(PutLineNum, ((SheetNum - 1) * intvalCols) + 3).Value = wkRange.Formula      End If            If AftSheet.Cells(wkRow, wkCol).HasFormula = True Then       .Cells(PutLineNum, ((SheetNum - 1) * intvalCols) + 4).Value = _        "'" & AftSheet.Cells(wkRow, wkCol).Formula      Else       .Cells(PutLineNum, ((SheetNum - 1) * intvalCols) + 4).Value = _         AftSheet.Cells(wkRow, wkCol).Formula      End If            PutLineNum = PutLineNum + 1     End If    Next wkRange   End With  Next SheetNum  Workbooks(BefBook).Close  Workbooks(AftBook).Close End Sub

HOKKAPOKKA
質問者

お礼

まことにありがとうございます。もともと計算式は入っていないシートなので、値がかわっているところだけ知りたいので、これを使ってみようと思います。情けないことに、このVBAを実行する方法を知らず、もし可能でしたらそれが簡単にわかるようなサイトでもご紹介いただけないでしょうか。

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

以下は、シートのセルの文字・数値の情報に限って議論する。 (1)VBAなどのプログラムを組めること。 (2)シートにキー情報(何に関して情報を集めているか=>キー、及びユニークであるか=>別物・別人に同じキーが振られてないこと。氏名とか社員番号とか商品コードなどは別物や別人には同じもの(コード、固有名称)を振らないはず。)があること。 (1)(2)の条件を満たせば、初歩的なプログラムで(マッチングのプログラムで)変わった項目と変更後の内容をリスト(列挙)できる。その際、並び順を、両シートで、上記キー順に並べて比較する。 その後当初のデータ順に戻すことも、工夫すれば簡単。 ーー これを「既製ソフト」にしたものも、探せば出てくる可能性が多い。 ーー この方法は、キーというものを考えにくいところの、ワードで作る文章などでは、比較位置を決めることが、原理的にむつかしい。2文書の中対比する箇所や・変更箇所を見つける箇所をどう決めるか、がはっきりしておれば、役立つ資料(2文書)比較表が作れるだろう。

  • msMike
  • ベストアンサー率20% (363/1775)
回答No.1

ひょっとして下記が参考になるかも。 https://oshiete.goo.ne.jp/qa/2075852.html それ、12年前の投稿ですが、私の[回答2]に本日現在で「good 47件」が付いてます。 また、質問と[No.1]の間の[このQ&Aに関連する最新のQ&A]も見落としなく。

関連するQ&A

  • Excel 外部リンクセルとドロップダウンリストとの連携

    Excelの外部参照セルについての質問です。 例えばC1セルに外部リンクさせて、ファイル1シート1のC1セルの値を入力させたい場合、 C1='[ファイル1.xls]sheet1'!$C$1 と表記すればよいのですが、このセルを簡単にドロップダウンリストと連携させて、 C1='[ファイル2.xls]sheet1'!$C$1 C1='[ファイル3.xls]sheet1'!$C$1 C1='[ファイル4.xls]sheet1'!$C$1 ・ ・ という具合に簡単に変更できないでしょうか? "ファイル1"の部分をリスト化したセルで数式を作成したい思っているのですが、「値の更新」のウィンドウが表示されてしまい上手くいきません。 何か良い方法はありますでしょうか? どなたかご教授いただきますようお願いいたします。

  • エクセル 値の更新

    シート1のA1の値をシート2のあるセルに表示させるためにシート2のあるセルに =1!A1 といれました。 入力後、すぐに反映されていたのですが、あるときを境にこの入力をすると”値の更新”という保存時のダイアログのようなものが開表示されるようになりました。 分からないなりにもあてずっぽで更新先をシート1にして、なんとか対応していたのですが、同じようにしているのもかかわらず、リンクさえしなくなりました。 これはどうなっているのでしょうか。 原因がまったくわかりません。 最初のように、すぐに反映させるにはどうすればよいのでしょうか。 よろしくお願いいたします。

  • エクセルの入力規則のリストについて

    エクセル2013での入力規則のリストを使った方法について質問です。 例として、 A2には、「部署名」という名前のリストを作成。 A3には、INDIRECT関数を使って、A2で選択したものに応じてリストを切り替えるように。 A4に、VLOOKUP関数を使って、A3で選択したものから、他のデータを参照して売り上げを表示するようにするとします。 機能としてはうまくはたらいているのですが、A2で選択したリストに応じて即座にA3のセルが更新されないのが気になっています。 たとえば A2で営業、A3で田中、とリストで選択した後、A2で総務を選択しても、A3のセルには田中、と表示されたままになってしまいます(リストの▽を押せばリストは正しく選択できます。) できれば、A2で違う部署を選択したら、A3のセルに表示されていた名前は消える、または新しいリストで上書きされるような仕様にしたいと思っています。 また、マクロ、VBAは使用したことがないため、可能な限り使わない方向でお願いします。 文章のみで、拙い説明ですが、ご助言お願いいたします。

  • エクセルで一つのブック上のいくつかのシートのドロップダウンボダンでリスト

    エクセルで一つのブック上のいくつかのシートのドロップダウンボタン のリストで、 3枚のシートの一つのセルに、 一枚目は鈴木  2枚目はたなか  3枚目は佐藤   と同じ書式の同じ場所のセル位置にはいっていてそれをドロップダウンボタンで表示させるのに、リスト→元の値 の欄に、いちいち入力せずにクリックして選択させる方法はありますか? 一つのブックのシートの枚数が多く、同じ書式なのでクリックで選択できればと思い質問しました。 無理ならべつにシートを用意してそこにリストを選択するために、入力するかと。もかんがえていますが、それでは、エクセルの便利な機能を 使いこなしていないかと悩んでいます。 どなたか教えてください。

  • Excel入力規則のリストの代替え。

    入力規則のリストはセルの結合をしている場合は↓ボタンが小さくなって入力しづらいです。 そこで何か便利な代替えになるような機能はないでしょうか。 理想としては、セル上にカーソルを持ってきたりクリックすると、選択肢が現れるというのが理想です。 条件としては、リストを選択したら条件書式で背景色が変るようにしてあるのでセルが見えるようにする。 何か良い案がありますでしょうか。

  • エクセル リストの連動について教えてください。

    エクセルの入力規則のリストを連動させて使用させたいのですが上手くできないのでご教授願いたいと思います。 まず、A1に食材の分類(野菜、肉など)をリストで選択できるようにしてあります。 A1の結果によってB1に食材(人参、玉ねぎなど)をリスト表示したいのですが、 (別シートに分類ごとにセル範囲に名前を付けてあります) 元の値を=indirect(A1)とするとエラーが出ます。 (A1には先に入力してあります) 食材のセル範囲の名前をoffsetを使って定義しているのですが (確認しましたが関数自体は間違っていません) offsetを使っているとエラーになるようなのです。 (A1:A5のようにセル範囲名前を定義しているときはちゃんと出来ます。) いろいろ調べましたが名前の定義、リストの連動の仕方自体は間違っていないと思うのですが・・・ 連動させるときはセル範囲をoffsetなどを使って可変にすると出来ないのでしょうか?

  • エクセルでのシート間の検索(関数)について

    関数についての質問です エクセルでSheet1にコマンドボタンを設定。 このコマンドボタンを押した時、例えば、同じファイル内にある「Sheet2のセルA1」にある値を「Sheet1のセルA1」に貼り付ける関数はありますか? また、エクセルファイルを2つ活用して、「ディスクトップにあるBファイル、Sheet2のセルA1にある値」を「○○フォルダ内にあるAファイル、Sheet1のセルA1に貼り付ける」などの関数もありますか? 申し訳ありませんが、お教え願います。

  • エクセル関数で、リストのグループ別分割と集計

    行いたいことは、添付データの通り、sheet1に元リストがあります。それをグループ別にsheet2~4に分割します。分割されたリストは注文番号が一致した場合、数量おうなを合計し、一行に集約します。但し、注文番号が一致しても、拡販対象は行を分けます。sheet1のリストを更新すれば、前述の処理を自動で行い、分割したリストも更新できる様、sheet2~4の各セルに設定する関数をご教授ください。マクロでできるのでしょうが、後でマクロの知識がない人も修正ができるよう、あえて関数で作成したいと思います。色々試みましたが私の力不足です。ご教授いただきますようお願いします。

  • EXCEL で検索、更新したい

    EXCEL でわからない箇所があり質問します。 前提条件 Sheet1 A列:名前 B列:年月 C列:値 データは、名前と年月で一意になるデータシートがあり マスターデータとして全データが登録されている Sheet2 A列:名前 B列:年月 C列:値 ある条件でとあるデータベースから抽出した名前と年月の一覧がある この段階で値のセルには何も入っていない やりたい事 (1)この状態でマクロを実行し、A列、B列を条件に該当する行から    C列を抽出しSheet2 にセット (2)Sheet2のC列の値を変更後、マクロの実行で    A列、B列の条件を元該当する行から、Sheet1の C列に値を更新 (3)もし、Sheet2のA列、B列の条件に該当しない行がある場合、    Sheet1に行追加しC列を格納 という事をしたいと考えています。 Sheet1 の全ての行をマクロでループさせて A列、B列をif分で比較し行を取得し、Sheet2 に張る場合、 遅くなるのであまりやりたくないと思っています Find 関数も考えたのですが、ヘルプを見る限り、条件が1つしか指定でき ないように思えるのですが、複数列の条件を指定できる Find 関数 あるいは、類似の関数とあかがあるのなら教えてください 最悪は、EXCEL ADO で、自分自身をSQLで抽出、Update、Insert を行う 事も考えていますが、 EXCELのセル内の式で、INDEX関数やDGET関数で簡単に抽出できるのに (ただ、値を変更するので式はかけないけど・・・) わざわざ、ADOでプログラムを組むのもどうなんだろうと疑問に思ってます。

  • エクセルでのセル内のデータをリスト有るか調べる

    エクセルであるセルにあるデータを、同じエクセルファイル内のリストと比較して、そのデータがリスト内に有るかどうかを調べたいのですが、どうしたら良いでしょうか?

専門家に質問してみよう