Vba 从两张图纸上的不同位置减去值
理想的解决方案是在VBA中,而不是在公式中,因为我每次都需要第一张图纸重置自己,因此公式将被覆盖 我有两张纸:Vba 从两张图纸上的不同位置减去值,vba,excel,excel-2003,Vba,Excel,Excel 2003,理想的解决方案是在VBA中,而不是在公式中,因为我每次都需要第一张图纸重置自己,因此公式将被覆盖 我有两张纸: Sheet1 (Subtract Inventory) Item# Sold 1022 23 1024 56 1025 52 Sheet2 (Count) Item# Count 1020 1027 1021 99 1022 76 1023 128 1024 57 1025 1023 1026 987 我想做的
Sheet1 (Subtract Inventory)
Item# Sold
1022 23
1024 56
1025 52
Sheet2 (Count)
Item# Count
1020 1027
1021 99
1022 76
1023 128
1024 57
1025 1023
1026 987
我想做的是用VBA代码更新Sheet2
,方法是从Sheet2
上的“计数”中减去Sheet1
上的“售出”。结果如下所示:
Sheet2 (Count)
Item# Count
1020 1027
1021 99
1022 53
1023 128
1024 1
1025 971
1026 987
我已经能够找出几个代码,但我永远无法使它们适合。而Sheet1
将让用户从网站粘贴信息,因此它必须根据项目编号而不是列a进行搜索
我认为最好的办法是重新开始,以确保我没有因为出发方向错误而搞砸。有人知道从哪里开始吗?公式法:
使用Vlookup的另一种方法 希望这就是你正在尝试的 经过尝试和测试
Option Explicit
Sub Sample()
Dim ws1 As Worksheet, ws2 As Worksheet
Dim ws1LastRow As Long, ws2LastRow As Long, i As Long
Dim SearchRange As Range
Set ws1 = Sheets("Sheet1")
ws1LastRow = ws1.Range("A" & ws1.Rows.Count).End(xlUp).Row
Set SearchRange = ws1.Range("A1:B" & ws1LastRow)
Set ws2 = Sheets("Sheet2")
With ws2
ws2LastRow = .Range("A" & .Rows.Count).End(xlUp).Row
For i = 2 To ws2LastRow
On Error Resume Next
If Not IsError(Application.WorksheetFunction.VLookup(.Range("A" & i).Value, SearchRange, 2, False)) Then
.Range("B" & i).Value = .Range("B" & i).Value - _
Application.WorksheetFunction.VLookup(.Range("A" & i).Value, SearchRange, 2, False)
End If
On Error GoTo 0
Next i
End With
'~~> Clear Sheet1 for next input
ws1.Cells.ClearContents
'~~> Clean Up
Set SearchRange = Nothing
Set ws1 = Nothing
Set ws2 = Nothing
End Sub
快照
跟进
你现在正在做的清洁工作不正确。如果我用手清洁床单,应该是这样的吗
此外,如果您注意到,则数字存储为文本或有空格。在这些情况下,Vlookup将失败
在这种情况下,我建议如下
1)您需要在一些地方安装一个宏,以便更有效地清理数据以进行输入
2)要么将“SKU”移到“数量”之前,然后使用Vlookup或者使用另一种方法
3)如果您对另一种方法感兴趣,请参阅此链接中的(第4节)
该问题可通过以下简单代码解决:
For sht2 = 2 To 8 ' Sheet2 rows
For sht1 = 2 To 4 ' Sheet1 rows
If Cells(sht2, 1).Value = Sheet1.Cells(sht1, 1).Value Then
Cells(sht2, 2).Value = Cells(sht2, 2).Value - Sheet1.Cells(sht1, 2).Value
End If
Next
Next
表2中的2至8行和表1中的2至4行基于引用的示例。但是,可以使用单元格捕获每张表(即销售数据表和库存数据表)中的行数。结束方法如所示:
For sht2 = 2 to sheet2.Cells(2,2).End(XlDown).Row +1 ' for Sheet2 rows
For sht1 = 2 to Sheet1.Cells(2,2).End(XlDown).Row +1 ' for Sheet1 rows
上面的循环遍历所有有数据的单元格,并通过If语句扣除库存感谢您的帮助,但它对我不起作用。。。我做了一次编辑,并将名称更改为程序中的名称。我现在有一个问题,一个盒子在最后弹出。我认为它正在试图保存我的文件,但它没有改变我第二张工作表“计数”上的计数。有什么办法吗?什么盒子?你改变了什么?我看不见的东西我帮不了你。你应该先用公式版。手动输入并编辑,直到显示第一个值。然后发布公式,我可以帮助调整上面的宏版本以使用正确的公式。对不起,Jerry,我更改了工作表的名称,因为我对措辞感到困惑。请容忍我,我是新手。杰瑞,我试着用你建议的公式,它说它不允许“循环引用”。请告知。我有Excel 2003。它可以满足我的所有需求,但由于某些原因,它无法与第二张工作表交互。你的excel是哪一年?我的是2003年。。。你认为这会把事情搞砸吗?我从2003年开始就有所有版本的Excel。问题不在于版本。当你说“它不与第二张纸互动”时,你是什么意思?首先我想说,我打字的时候太不得体了。我向你保证,我非常感谢你的帮助。第二我在你输入代码时输入了代码,它完成了所有需要的操作,只是没有为我更新第二页的单元格。不管我试了多少次,它们都是一样的。请告知。我已经有一段时间没有上VBA课程了,我可能已经忘记了一些基础知识。你会要求我提供什么信息?为了快速解决问题,你能在wikisend.com上上传你的工作簿样本,然后在这里共享链接吗?好的,我以前从未使用过该引用,因此我需要几分钟的时间使用此引用两件事。首先,这是一个示例,因此我的实际工作表比4行和8行长。遗憾的是,4行表格每次都必须更改。第二,我是否在我的子行后面加上“sht2=工作表(“计数”)?
For sht2 = 2 to sheet2.Cells(2,2).End(XlDown).Row +1 ' for Sheet2 rows
For sht1 = 2 to Sheet1.Cells(2,2).End(XlDown).Row +1 ' for Sheet1 rows