Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


9753 / 76734 ←次へ | 前へ→

【72539】Re:明細の再確認
発言  UO3  - 12/8/21(火) 11:49 -

引用なし
パスワード
   ▼杏子 さん:

それでは、総入れ替えで。
比較タイトル規定、従来はA,B 一本でしたが、別々にそれぞれ規定します。
以下のコードでは、B のほうを契約金額としています。
もし違っていれば変更してください。

Sub Sample3()
  Dim dicA As Object
  Dim dicB As Object
  Dim dicAonly As Object
  Dim dicBonly As Object
  Dim d As Variant
  Dim colA() As Variant
  Dim colB() As Variant
  Dim shA As Worksheet
  Dim shB As Worksheet
  Dim c As Range
  Dim vntTitleA As Variant
  Dim vntTitleB As Variant
  
  vntTitleA = Array("型名", "数量", "合価", "構成GC")
  vntTitleB = Array("型名", "数量", "契約金額", "構成GC")
  
  If UBound(vntTitleA) <> UBound(vntTitleB) Then
    MsgBox "比較タイトル規定に関するプログラムエラーです。" & vbLf & _
        "処理を終了します"
    Exit Sub
  End If
  
  ReDim colA(1 To UBound(vntTitleA) + 1)
  ReDim colB(1 To UBound(vntTitleB) + 1)
  
  Set dicA = CreateObject("Scripting.Dictionary")
  Set dicB = CreateObject("Scripting.Dictionary")
  Set dicAonly = CreateObject("Scripting.Dictionary")
  Set dicBonly = CreateObject("Scripting.Dictionary")
 
  Set shA = Sheets("Sheet1")
  Set shB = Sheets("Sheet2")
 
  If Not GetCol(shA, colA, vntTitleA) Then Exit Sub
  If Not GetCol(shB, colB, vntTitleB) Then Exit Sub
 
  CreateDic shA, dicA, colA
  CreateDic shB, dicB, colB
 
  OnlyCheck shA, dicA, dicB, dicAonly, colA
  OnlyCheck shB, dicB, dicA, dicBonly, colB
 
  If dicAonly.Count = 0 Then
    MsgBox "資料(A)にある内容はすべて資料(B)と同じでした"
  Else
    shA.Select
    MsgBox "資料(A)のうち、以下が資料(B)にありません" & vbLf & Join(dicAonly.keys, vbLf)
  End If
 
  If dicBonly.Count = 0 Then
    MsgBox "資料(B)にある内容はすべて資料(A)と同じでした"
  Else
    shB.Select
    MsgBox "資料(B)のうち、以下が資料(A)にありません" & vbLf & Join(dicBonly.keys, vbLf)
  End If
 
 
End Sub

Private Function GetCol(sh As Worksheet, v As Variant, vntT As Variant) As Boolean
  Dim x As Long
  Dim ck As String
  Dim z As Variant
  
  x = UBound(vntT) + 1
  For x = 1 To x
    ck = vntT(x - 1)
    z = Application.Match(ck, sh.Rows(1), 0)
    If IsError(z) Then
      MsgBox sh.Name & "のタイトル行に" & ck & "がないので処理を終了します"
      Exit Function
    End If
    v(x) = z
    sh.UsedRange.Columns(z).Interior.ColorIndex = xlNone
  Next
  GetCol = True
End Function

Private Sub CreateDic(sh As Worksheet, dic As Object, v As Variant)
  Dim c As Range
  Dim sep As String
  Dim d As Variant
  Dim dKey As String
  
  For Each c In sh.Range("A2", sh.Range("A" & sh.Rows.Count).End(xlUp))
    dKey = ""
    sep = ""
    For Each d In v
      dKey = dKey & sep & c.Offset(, d - 1).Value
      sep = "/"
    Next
    dic(dKey) = c.Row
  Next
  
End Sub

Private Sub OnlyCheck(sh As Worksheet, dic1 As Object, dic2 As Object, dicOnly As Object, v As Variant)
  Dim d As Variant
  Dim n As Variant
  
  For Each d In dic1
    If Not dic2.exists(d) Then
      dicOnly(d) = True
      For Each n In v
        sh.Cells(dic1(d), n).Interior.Color = vbRed
      Next
    End If
  Next
End Sub
12 hits

【72509】明細の再確認 杏子 12/8/18(土) 9:20 質問
【72511】Re:明細の再確認 UO3 12/8/18(土) 11:12 発言
【72512】Re:明細の再確認 杏子 12/8/18(土) 15:31 質問
【72515】Re:明細の再確認 UO3 12/8/18(土) 20:54 発言
【72516】Re:明細の再確認 杏子 12/8/19(日) 13:12 発言
【72517】Re:明細の再確認 UO3 12/8/19(日) 14:41 発言
【72518】Re:明細の再確認 杏子 12/8/19(日) 15:02 発言
【72520】Re:明細の再確認 UO3 12/8/19(日) 16:15 発言
【72521】Re:明細の再確認 杏子 12/8/19(日) 16:27 発言
【72523】Re:明細の再確認 UO3 12/8/19(日) 17:25 発言
【72524】Re:明細の再確認 杏子 12/8/19(日) 17:32 発言
【72525】Re:明細の再確認 UO3 12/8/19(日) 17:34 発言
【72527】Re:明細の再確認 杏子 12/8/19(日) 18:58 発言
【72528】Re:明細の再確認 UO3 12/8/19(日) 19:17 発言
【72529】Re:明細の再確認 杏子 12/8/19(日) 19:30 発言
【72533】Re:明細の再確認 杏子 12/8/20(月) 9:32 発言
【72536】Re:明細の再確認 UO3 12/8/20(月) 12:18 発言
【72537】Re:明細の再確認 杏子 12/8/21(火) 6:23 質問
【72538】Re:明細の再確認 杏子 12/8/21(火) 10:37 質問
【72539】Re:明細の再確認 UO3 12/8/21(火) 11:49 発言
【72540】Re:明細の再確認 杏子 12/8/21(火) 12:14 質問
【72541】Re:明細の再確認 UO3 12/8/21(火) 17:48 発言
【72542】Re:明細の再確認 UO3 12/8/21(火) 20:40 発言
【72543】Re:明細の再確認 杏子 12/8/21(火) 21:14 お礼
【72544】Re:明細の再確認 杏子 12/8/21(火) 22:42 質問
【72546】Re:明細の再確認 UO3 12/8/22(水) 0:50 発言
【72548】Re:明細の再確認 杏子 12/8/22(水) 6:26 質問
【72549】Re:明細の再確認 UO3 12/8/22(水) 13:59 発言
【72551】Re:明細の再確認 杏子 12/8/22(水) 15:19 お礼

9753 / 76734 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free