1342596716 Excel2003またはAccess2003で以下のことをやりたいです。


画像を添付しますのでご覧ください。

1.前月と今月の表があり、それぞれにおおよそ200列、200行ほどのデータがあります
2.前月と今月を比較した時に、先月と違った箇所に今月の表に色が(薄い水色)着いて、欲しい

よろしくお願いします。

回答の条件
  • 1人2回まで
  • 13歳以上
  • 登録:2012/07/18 16:31:56
  • 終了:2012/07/24 16:25:19

回答(2件)

id:Mook No.1

Mook回答回数1312ベストアンサー獲得回数3912012/07/18 17:23:34

コメントの運用を想定して、二つのファイルを選択して実行する例です。

ファイル名が提示のルールに沿っていれば、新しいほうのファイルに比較結果を
表示します。

実際のデータのあるフォルダと比較範囲をコードの先頭に記載してください。

新規ファイルを作成し、

EXCEL で ALT+F11 で表示されるウィンドウで、挿入⇒標準モジュールで
表示されたウィンドウに下記を張り付け閉じます。
EXCEL で ALT + F8 で データ比較 を実行するとファイル選択画面が開くので、ファイルを二つ選択してください(Ctlを押しながらファイルをクリック)


個人用マクロブックにコードを置けば、
新規ブックを作成しなくとも処理を実行することが出来ます。
http://allabout.co.jp/gm/gc/297809/

Option Explicit

'//----------------------------------------------
'// ★環境に合わせて設定★
'//----------------------------------------------
Const データフォルダ = "D:\Data\"
Const 比較範囲 = "A3:GQ200"

'//----------------------------------------------
Sub データ比較()
'//----------------------------------------------
'// ファイル選択
    Dim ファイルダイアログ As Office.FileDialog
    Set ファイルダイアログ = Application.FileDialog(msoFileDialogFilePicker)
    With ファイルダイアログ
        Do While .Filters.Count > 0
            .Filters.Delete
        Loop
        .InitialFileName = データフォルダ
        .Filters.Add "選択ファイル", "*.xls;*.xlsx;*.xlsm"
        .FilterIndex = 1
        .AllowMultiSelect = True
    End With
    If ファイルダイアログ.Show() = 0 Then Exit Sub '// ファイルが選択されなかった
    If ファイルダイアログ.SelectedItems.Count <> 2 Then
        MsgBox "ファイルを二つ選択してください"
        Exit Sub
    End If
    
    Dim ファイル名1 As String
    Dim ファイル名2 As String
    
    ファイル名1 = Dir(ファイルダイアログ.SelectedItems(1))
    ファイル名2 = Dir(ファイルダイアログ.SelectedItems(2))
    
'// ファイル名が YYYY_MM だったら日付の新しい方を比較元に設定
    Dim 比較元インデックス As Long
    Dim 比較先インデックス As Long
    If CLng(Replace(Left(ファイル名1, 7), "_", "")) > CLng(Replace(Left(ファイル名2, 7), "_", "")) Then
        比較元インデックス = 1
        比較先インデックス = 2
    Else
        比較元インデックス = 2
        比較先インデックス = 1
    End If
    
'// ファイルを開いていなかったら開く(2重起動の排除)
    Dim 比較元ファイル As Workbook
    On Error Resume Next
        Set 比較元ファイル = Workbooks(Dir(ファイルダイアログ.SelectedItems(比較元インデックス)))
    On Error GoTo 0
    If 比較元ファイル Is Nothing Then
        Set 比較元ファイル = Workbooks.Open(ファイルダイアログ.SelectedItems(比較元インデックス))
    End If
    
    Dim 比較先ファイル As Workbook
    On Error Resume Next
        Set 比較先ファイル = Workbooks(Dir(ファイルダイアログ.SelectedItems(比較先インデックス)))
    On Error GoTo 0
    If 比較先ファイル Is Nothing Then
        Set 比較先ファイル = Workbooks.Open(ファイルダイアログ.SelectedItems(比較先インデックス))
    End If
    
'// 各ファイルの先頭シートを比較
    Dim 比較元シート As Worksheet
    Set 比較元シート = 比較元ファイル.Worksheets(1)
    
    Dim 比較先シート As Worksheet
    Set 比較先シート = 比較先ファイル.Worksheets(1)

'// 比較処理
    Dim 比較セル As Range
    For Each 比較セル In 比較元シート.Range(比較範囲)
        If 比較セル.Value <> 比較先シート.Range(比較セル.AddressLocal) Then
            比較セル.Interior.ColorIndex = 37
        Else
            比較セル.Interior.ColorIndex = xlNone
        End If
    Next
    比較元ファイル.Activate
    比較元シート.Activate
End Sub
id:prius-phv No.2

prius-phv回答回数2ベストアンサー獲得回数02012/07/19 10:43:53

条件付き書式で、相対する表の値が異なる時にセル色を付けたら解決と思います。

6月分の表には行番号がありますが、7月分の表には行番号が付されていませんので、勝手にこちらで行番号をつけて説明します。

仮に、「7月」と記されたセルを A998 とします。
山田太郎さんの職員番号「0001」は A1001 になるわけです。

一方で、1行目に記載されている数字は、文字列ではなく数値であると仮定します。

値を比較した際に、異なる値の場合に TRUE 、
同じ場合には FALSE を返す数式を考えます。

山田太郎さんの班長 D1001 の比較は、
=VLOOKUP($A1001,$A$5:$PQ$200,$D$1,FALSE)<>D1001
となります。
両表共に「A」なので、FALSE を返します。

鈴木三郎さんの班長 D1003 の比較は、
=VLOOKUP($A1003,$A$5:$PQ$200,$D$1,FALSE)<>D1003
ですので、
6月表では「F」、7月表「L」ですから、TRUE を返します。

条件付き書式については、
http://www.ne.jp/asahi/juku/excel/Jouken2432.htm
をご覧ください。
操作手順の画像満載ですので、本回答とあわせるとわかりやすいと思います。

  • id:namaewa_5
    すみません補足させて下さい。

    2012_06ファイルのsheetAと2012_07ファイルsheetAがあり、
    この2つを比較させ、変更箇所を2012_07ファイルsheetAのセルの色が変わる
    ようにしたいです。

    1.当然、ファイル名は毎月変わります。2012_08、2012_09・・・2013_01
    2.毎月、前月と当月のファイルの差を確認します
    3.もしファイルごとが難しければ、2012_07sheetBに2012_06aheetAの内容を
      貼り付けてマッチング作業でも構いません
    4.上のを試しましたが、どの構文をファイル名またはシート名に変更すれば
     いいか分かりませんでした
  • id:Mook
    時間が取れたらファイルを選択する工夫をしたいと思いますが、
    二つのファイルを開いた状態で実行するのであれば、

    For の前は

    Dim 比較元 As Worksheet
    Set 比較元 = Workbooks("2012_07.xls").Worksheets(1)
    Dim 比較先 As Worksheet
    Set 比較先 = Workbooks("2012_06.xls").Worksheets(1)

    でよいと思います。
    ファイル名が提示の名前で、常に今月と先月のファイルの比較というのであれば、
    コード化できると思いますが、明日までお待ちください。
  • id:namaewa_5
    どうぞ、よろしくお願いいたします
  • id:namaewa_5
    Mook様

    試してみましたが「型が違います」というエラーが表示され実行できませんでした
  • id:namaewa_5
    すみませんちょっと一回、閉じて再質問します。
    メッセージでポイントを送ります
  • id:Mook
    うーん、再質問しないでまずはコメントでやり取りしたらどうかと思いますが、
    どの行でエラーが出たのでしょうか。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません