Excel VBA質問箱 IV

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

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


9756 / 76734 ←次へ | 前へ→

【72536】Re:明細の再確認
発言  UO3  - 12/8/20(月) 12:18 -

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

以下でお試しください。

Sub Sample2()
  Dim dicA As Object
  Dim dicB As Object
  Dim dicAonly As Object
  Dim dicBonly As Object
  Dim dicComp 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 vntTitle As Variant
 
  vntTitle = Array("型名", "数量", "合価", "構成GC")
  
  ReDim colA(1 To UBound(vntTitle) + 1)
  ReDim colB(1 To UBound(vntTitle) + 1)
  
  Set dicA = CreateObject("Scripting.Dictionary")
  Set dicB = CreateObject("Scripting.Dictionary")
  Set dicAonly = CreateObject("Scripting.Dictionary")
  Set dicBonly = CreateObject("Scripting.Dictionary")
  Set dicComp = CreateObject("Scripting.Dictionary")
 
  Set shA = Sheets("Sheet1")
  Set shB = Sheets("Sheet2")
 
  If Not GetCol(shA, colA, vntTitle) Then Exit Sub
  If Not GetCol(shB, colB, vntTitle) Then Exit Sub
 
  CreateDic shA, dicA, colA
  CreateDic shB, dicB, colB
 
  OnlyCheck dicA, dicB, dicAonly
  OnlyCheck dicB, dicA, dicBonly
 
  If dicAonly.Count = 0 Then
    MsgBox "資料(A)にある内容はすべて資料(B)と同じでした"
  Else
    MsgBox "資料(A)のうち、以下が資料(B)にありません" & vbLf & Join(dicAonly.keys, vbLf)
  End If
 
  If dicBonly.Count = 0 Then
    MsgBox "資料(B)にある内容はすべて資料(A)と同じでした"
  Else
    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
  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) = True
  Next
  
End Sub

Private Sub OnlyCheck(dic1 As Object, dic2 As Object, dicOnly As Object)
  Dim d As Variant
  For Each d In dic1
    If Not dic2.exists(d) Then dicOnly(d) = True
  Next
End Sub

8 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 お礼

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