| 
    
     |  | ▼UO3 さん: >▼t−k さん:
 >
 >こんばんは
 >
 >>素人なのでわかりやすく教えてください
 >
 >わかりやすくはないと思いますが・・・
 >必要なら、主要なところにコメントをつけますけど、とりあえず。
 >
 >アップされたコードは全く読んでいません。
 >提示されたレイアウトだけを見て処理しています。
 >
 >Sheet2に転記できなかったSheet1のセルに色づけするとともに、
 >Sheet2にしか存在しなかったものについてもSHeet2側のセルに色づけしています。
 >
 >Sub Sample()
 >  Dim fSh As Worksheet
 >  Dim tSh As Worksheet
 >  Dim fDic As Object
 >  Dim tDic As Object
 >  Dim c As Range
 >  Dim dt As Double
 >  Dim com As String
 >  Dim dKey As Variant
 >
 >  Application.ScreenUpdating = False
 >
 >  Set fDic = CreateObject("Scripting.Dictionary")
 >  Set tDic = CreateObject("Scripting.Dictionary")
 >
 >  Set fSh = Sheets("Sheet1")
 >  Set tSh = Sheets("Sheet2")
 >
 >  fSh.Cells.Interior.ColorIndex = xlNone
 >  tSh.Cells.Interior.ColorIndex = xlNone
 >
 >  With fSh.Range("A1").CurrentRegion
 >    For Each c In .Offset(1, 2).Resize(.Rows.Count - 1, .Columns.Count - 2)
 >      dt = fSh.Cells(1, c.Column).Value2
 >      com = fSh.Cells(c.Row, "A").Value
 >      fDic(com & dt) = VBA.Array(c.Value, c.Address(External:=True))
 >    Next
 >  End With
 >
 >  With tSh.Range("A1").CurrentRegion
 >    For Each c In .Offset(1, 2).Resize(.Rows.Count - 1, .Columns.Count - 2)
 >      dt = tSh.Cells(1, c.Column).Value2
 >      com = tSh.Cells(c.Row, "A").Value
 >      tDic(com & dt) = VBA.Array(c.Value, c.Address(External:=True))
 >    Next
 >  End With
 >
 >  'Sheet1からSheet2への転記
 >
 >  For Each dKey In fDic
 >    If tDic.exists(dKey) Then
 >      Range(tDic(dKey)(1)).Value = Range(fDic(dKey)(1)).Value
 >    Else
 >      Range(fDic(dKey)(1)).Interior.ColorIndex = 3
 >    End If
 >  Next
 >
 >  'Sheet2 にしか存在しない項目の色つけ
 >
 >  For Each dKey In tDic
 >    If Not fDic.exists(dKey) Then Range(tDic(dKey)(1)).Interior.ColorIndex = 3
 >  Next
 >
 >  tSh.Activate
 >  Application.ScreenUpdating = True
 >  MsgBox "転記完了"
 >
 >End Sub
 
 
 T-Kですさっそく回答ありがとうございます
 
 Dictionary 配列等使わないとむりかなとはおもっていましたが
 正直苦手な領域(理解しきれていない)為困っていました
 コードでわからない部分があるため教えてください
 
 For Each c In .Offset(1, 2).Resize(.Rows.Count - 1, .Columns.Count - 2)
 *行列範囲の指定なのは理解できるのですが それぞれ-1、-2する理由が不明
 です
 fDic(com & dt) = VBA.Array(c.Value, c.Address(External:=True))
 配列を格納しているのは理解できるのですが VBA.Arrayの部分
 とValueとAddresを行と列で言い方を変えてる部分が理解できません
 
 日付の部分でVALUE2と表記してる部分も理解できていません
 勉強の意味も含めて教えていただけないでしょうか?
 
 |  |