Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
不同工作表上的VBA VLookup单元格_Vba_Excel - Fatal编程技术网

不同工作表上的VBA VLookup单元格

不同工作表上的VBA VLookup单元格,vba,excel,Vba,Excel,我试图编写一个代码,检查两个不同工作表上的两个单元格是否相同。如果它们相同,则使用VLOOKUP查找这些单元格(位于不同列中)的赋值之间的差异 这是我到目前为止写的,我一直收到错误消息 对象不支持此属性或方法 也不知道为什么。有人能提供意见吗?谢谢 Sub testing() Product = Range("A2:A506") Set myrange = Worksheets("open_prices").Range("A2:D506") Set myrange2 = Worksheets(

我试图编写一个代码,检查两个不同工作表上的两个单元格是否相同。如果它们相同,则使用VLOOKUP查找这些单元格(位于不同列中)的赋值之间的差异

这是我到目前为止写的,我一直收到错误消息

对象不支持此属性或方法

也不知道为什么。有人能提供意见吗?谢谢

Sub testing()

Product = Range("A2:A506")
Set myrange = Worksheets("open_prices").Range("A2:D506")
Set myrange2 = Worksheets("close_prices").Range("A2:B506")

Dim popen As Integer
Dim pclose As Integer

Dim ws As Worksheet

For Each Cell In Workbooks("TDO VBA Test.xlsx")
    If Worksheets("open_prices").Range("A2:A506") = Worksheets("close_prices").Range("A2:A506") Then
            popen = WorksheetFunction.VLookup(Product, myrange, 4, False)
            pclose = WorksheetFunction.VLookup(Product, myrange2, 2, False)
            result = popen - pclose
    End If
Next Cell

End Sub

我猜这就是您要做的,即迭代一张表的A2:A506中的每个单元格,查看该值是否在另一张表中,如果是,则进行计算

Sub testing()

    Dim popen As Integer
    Dim pclose As Integer
    Dim result As Integer ' Are you sure these are integers?  Usually prices will be Double

    Dim VLookupResult As Variant
    Dim cel As Range

    For Each cel In Worksheets("open_prices").Range("A2:A506").Cells
        popen = cel.Offset(0, 3).Value
        VLookupResult = Application.VLookup(cel.Value, Worksheets("close_prices").Range("A2:B506"), 2, False)
        If Not IsError(VLookupResult) Then
            pclose = VLookupResult
            result = popen - pclose
            ' You will need to decide what to do with this "result" now
            ' that it has been calculated
        End If
    Next cel

End Sub

对于工作簿中的每个单元格(“TDO VBA Test.xlsx”),您打算用
做什么?因为我要比较的两个单元格位于同一工作表的不同工作表中workbook@jsotola失败的将是
,我不确定
工作簿
中的默认对象是什么,但是我怀疑它是否可以被迭代。@YowE3K你知道如果两个单元格相同,我如何比较两个单元格并执行减法吗?你是想只在“开盘价格”中的单元格(比如A56单元格)与“收盘价格”中的等价单元格(即A56单元格)相同的情况下执行减法,还是想先在其中找到位置相同值的“收盘价”(即可能在单元格A92中)然后进行计算?非常感谢!!如果我做得正确,我应该进行505次计算…我想做的是从所有计算中找出最大的结果…你知道我该怎么做吗?@maddie是的,从一个值设置为0的变量开始。每次计算
结果
时,测试
结果是否正确
大于它,如果大于,则将变量的值设置为
结果
。循环完成后,该变量将包含遇到的
结果
的最大值。如果尝试编码后该变量不起作用,请提出一个新问题,说明您尝试了什么。另请注意@maddie在合作前需要考虑的问题de it:(a)你是在追求最大的结果(即开盘和收盘之间价格跌幅最大)还是最小的结果(即价格涨幅最大)?(b)你是在追求最大/最小的绝对差异,还是最大/最小的百分比差异,即你想知道10减少了9比1,还是1011减少了10比1001?(c)您是想找出最大/最小的差异,还是有差异的项目?@YowE3K感谢您的帮助这是我编写的代码,我仍然得到相同的结果值,这不是最大值结果=((Vlookuppreslt-popen)/popen)*100 Dim x作为双x=0如果Abs(结果)>x Then x=如果下一个单元格我试图找到最大百分比差异(Abs值)以及存在差异的项目,则结果结束。我希望这是清楚的。再次感谢!@maddie请提出另一个问题-注释中的代码太难阅读。(我怀疑这只是将
x=0
移动到循环之前的一种情况[看起来它在循环中],但如果这是它自己的问题,它将对未来的读者更有用。)