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
Excel 简单如果然后乘以VBA_Excel_Vba - Fatal编程技术网

Excel 简单如果然后乘以VBA

Excel 简单如果然后乘以VBA,excel,vba,Excel,Vba,我有一个表,如上图,我只想有一个简单的代码,如果ID彼此相等,(1=1),那么它将返回底部(答案)的另一组行,显示 answer = price * (1 + discount) 假设答案将出现在价格和折扣的下方,以下内容应该会有所帮助 Sub Demo() Dim ws As Worksheet Dim lastRow As Long, i As Long Dim dictPrice As Object, dictDiscount As Object Dim

我有一个表,如上图,我只想有一个简单的代码,如果ID彼此相等,(1=1),那么它将返回底部(答案)的另一组行,显示

answer = price * (1 + discount)

假设
答案
将出现在
价格
折扣
的下方,以下内容应该会有所帮助

Sub Demo()
    Dim ws As Worksheet
    Dim lastRow As Long, i As Long
    Dim dictPrice As Object, dictDiscount As Object
    Dim rng As Range, cel As Range

    Set ws = ThisWorkbook.Sheets("Sheet1")      'change Sheet1 to your data sheet
    Set dictPrice = CreateObject("Scripting.Dictionary")
    Set dictDiscount = CreateObject("Scripting.Dictionary")

    With ws
        lastRow = .Cells(.Rows.Count, "A").End(xlUp).Row    'get last row with data using Column A
        For Each cel In .Range("A2:A" & lastRow)            'loop though all cells in Column A
            If cel.Value = "Price" Then                     'check if its Price
                dictPrice.Add cel.Offset(0, 1).Value, cel.Offset(0, 3).Value    'add id and correspoding price in dictionary
            ElseIf cel.Value = "Discount" Then              'check if its Discount
                dictDiscount.Add cel.Offset(0, 1).Value, cel.Offset(0, 3).Value 'add id and correspoding discount in dictionary
            ElseIf cel.Value = "Answer" Then                'check if its Answer
                cel.Offset(0, 3).Value = dictPrice(cel.Offset(0, 1).Value) * (1 + dictDiscount(cel.Offset(0, 1).Value))
            End If
        Next cel
    End With
End Sub


注意:
如果cel.Value=“Price”那么
是区分大小写的匹配,只匹配
Price
而不匹配
Price
,同样适用于
ElseIf cel.Value=“折扣”那么
ElseIf cel.Value=“应答”那么
请将实际代码作为文本发布,而不是图像链接!我还没有密码@KenY-N这是一个非常简单的表格,但我不知道该用什么,为什么它甚至需要VBA?你不能用一个SUMIFS乘以另一个SUMIFS吗?@YowE3K我正在做一个更复杂的部分,但我只需要简化它,因为我不太擅长VBAis。有什么理由
ID/fruit/price/discount/answer
不是列名。。。。和
1/apple/500/5%/525
不在一行???好的一个Mrig+你赢了我。我正要发布类似的答案,不过使用了数组。:)@sktneer-偶数数组在这里是一个不错的选择,也许你应该将其作为答案发布。我使用字典和数组导出了一个解决方案,正如我所说,我正要发布它时,我看到你已经发布了类似的答案,只是我使用了数组而不是范围变量,所以放弃了文件而不保存它。英雄联盟