Excel VBA查找账簿和子账簿之间的金额差异

Excel VBA查找账簿和子账簿之间的金额差异,excel,vba,dataset,Excel,Vba,Dataset,我有两个包含70000多条记录的大型数据集,这可能或多或少取决于日期。表1包含从今天提取的信息,表2包含从昨天提取的信息。这些是会计系列 列E具有该区域。列G有几个(许多)不同的图书Id。这些账簿可能在K列中有一个子账簿。现在,N列为每个账簿和子账簿确定了金额。我需要做的是构建一个宏来生成一个报告,为每本书及其子书查找第1天和第2天之间的差异 现在这里比较棘手的部分是,K列中的子图书可能会在G列中的不同图书中使用多次 我所做的是将所有信息连接在一张表中,构建一个透视表并获得这些差异。但是,当我试

我有两个包含70000多条记录的大型数据集,这可能或多或少取决于日期。表1包含从今天提取的信息,表2包含从昨天提取的信息。这些是会计系列

列E具有该区域。列G有几个(许多)不同的图书Id。这些账簿可能在K列中有一个子账簿。现在,N列为每个账簿和子账簿确定了金额。我需要做的是构建一个宏来生成一个报告,为每本书及其子书查找第1天和第2天之间的差异

现在这里比较棘手的部分是,K列中的子图书可能会在G列中的不同图书中使用多次

我所做的是将所有信息连接在一张表中,构建一个透视表并获得这些差异。但是,当我试图使用Vlookup构建报告并创建唯一标识符时,我发现了一条死胡同,因为许多子书籍在不同的书籍和地区中使用

我附上一个简单的例子来说明数据是如何相互关联的

表1

绵羊2

正如你所看到的,第二排位于城市QN。图书ID为FLC,子图书TTL555带有53000.00。我需要将此位置与第2页中的位置(如果有)进行比较,并获得金额差异。现在的问题是,子书TTL555也在不同城市的第11行中使用,也在不同的书下使用

有什么想法吗

这是我用于pivot的代码(我并不真的需要pivot,只是我想不出其他方法)


感谢您的帮助

两张纸之间应该比较什么组合?城市+书籍+附属书籍,还是书籍+附属书籍唯一?表1中的每个独特组合是否会出现在表2的某个位置(反之亦然)?您希望产生什么样的输出?看起来像是一个数据透视表,其中city、book和sub book作为行字段,date作为列字段,可以满足您的需要。表与表之间应该比较什么组合?城市+书籍+附属书籍,还是书籍+附属书籍唯一?表1中的每个独特组合是否会出现在表2的某个位置(反之亦然)?您希望产生什么样的输出?看起来像是一个数据透视表,其中city、book和sub book作为行字段,date作为列字段,可以满足您的需要。
'Create Pivot Table

'Declare Variables
Dim PSheet As Worksheet
Dim DSheet As Worksheet
Dim PCache As PivotCache
Dim PTable As PivotTable
Dim PRange As Range
Dim Lastrow As Long
Dim LastCol As Long

'Insert a New Blank Worksheet
On Error Resume Next
Application.DisplayAlerts = False
Sheets.Add Before:=ActiveSheet
ActiveSheet.Name = "Differences"
Application.DisplayAlerts = True
Set PSheet = Worksheets("Differences")
Set DSheet = Worksheets("Concatenated")

'Define Data Range
Lastrow = DSheet.Cells(Rows.Count, 1).End(xlUp).Row
LastCol = DSheet.Cells(1, Columns.Count).End(xlToLeft).Column
Set PRange = DSheet.Cells(1, 1).Resize(Lastrow, LastCol)

'Define Pivot Cache
Set PCache = ActiveWorkbook.PivotCaches.Create _
(SourceType:=xlDatabase, SourceData:=PRange). _
CreatePivotTable(TableDestination:=PSheet.Cells(2, 2), _
TableName:="Differences")

'Insert Blank Pivot Table
Set PTable = PCache.CreatePivotTable _
(TableDestination:=PSheet.Cells(1, 1), TableName:="StatusReport")
          
'Insert Data Field
ActiveSheet.PivotTables("SD Differences").AddDataField ActiveSheet.PivotTables( _
"Differences").PivotFields("Qty"), "Sum of Qty", xlSum

'Insert Row Fields
With ActiveSheet.PivotTables("Differences").PivotFields("Book ID")
.Orientation = xlRowField
.Position = 1
End With

With ActiveSheet.PivotTables("Differences").PivotFields("Security Code")
.Orientation = xlRowField
.Position = 2
End With

 'Insert Column Field
With ActiveSheet.PivotTables("Differences").PivotFields("Position Date")
.Orientation = xlColumnField
.Position = 1
   
End With
    
 'Add a calculated field to compute variance
With ActiveSheet.PivotTables("Differences").PivotFields("Sum of Qty")
.Calculation = xlDifferenceFrom
.BaseField = "Position Date"
.BaseItem = "(Previous)"
.NumberFormat = "0.00"
.Name = "Position Difference"
End With
    
'Remove Grand Total
ActiveSheet.PivotTables("Differences").PivotSelect "'Row Grand Total'", _
    xlDataAndLabel, True
ActiveSheet.PivotTables("Differences").RowGrand = False

Dim src As Range
Dim ws2 As Worksheet
Set src = Range("B2").CurrentRegion
Set ws2 = ActiveSheet
ws2.ListObjects.Add(SourceType:=xlSrcRange, Source:=src, xlListObjectHasHeaders:=xlYes, tablestyleName:="TableStyleMedium1").Name = "Differences"