• 締切済み

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

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

みんなの回答

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

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

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

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

  • HohoPapa
  • ベストアンサー率65% (455/693)
回答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/17069)
回答No.2

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

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

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

関連するQ&A