在I2和J22之间,您可以看到一些食品名称和价格。例如,AYÇICEKYAĞI(英语中的向日葵油)每公斤4美元。在工作表的左侧,您可以看到其他列表。我需要的是什么;
我想比较所有A *列与I2:I22之间的字符串,并得到J2:J22之间写的价格,然后将其写入D *列。
有超过500行,我需要为所有行执行此操作。
你可以用粗体看到一些标题,它们应该受到保护。
答案 0 :(得分:2)
你似乎想出了一个公式;现在你需要一种方法来分配它。您的工作表设计不适合简单地填写公式。但是,如果C列中的数字标识了需要D和E列中的公式的有效条目,则短子过程可以快速将公式放入正确的位置。
Sub fillFormula()
Dim w As Long, vWSs As Variant, vFRMLs As Variant
vWSs = Array("ogle_aksam_gramaj", "kahvalt" & ChrW(305) & "_gramaj", _
"araogun_gramaj")
For w = LBound(vWSs) To UBound(vWSs)
With Worksheets(vWSs(w))
With .Columns(3) '<~~ going to look at column C for numbers
With .SpecialCells(xlCellTypeConstants, xlNumbers)
.Offset(0, 1).FormulaR1C1 = _
"=IFERROR(VLOOKUP(RC1, 'urunler'!C1:C2, 2, FALSE), """")"
.Offset(0, 2).FormulaR1C1 = _
"=IFERROR(RC4*RC3, """")"
End With
End With
End With
Next w
End Sub
IFERROR function已用于“包装”查找和mulltiplication公式。它捕获错误并提供替代结果;在这种情况下,零长度的字符串看起来是空白的。
由于unicode字符,kahvaltı_gramaj工作表会导致VBA出现问题。您可以尝试其他循环工作表的方法。
可以从我自己的公共保管箱here获取该二进制(启用宏)工作簿。
答案 1 :(得分:0)
在您附加的工作簿中,VLOOKUP
会在没有可用值时返回#N/A
。
在工作表ogle_aksam_gramaj中,单元格D4使用以下公式:
=SUMIF($I:$I,$A4,$J:$J)
然后你可以将它拖下来,它应该根据同一张表格中提供的详细信息给你价格(范围I:J)
如果没有任何要求,它将返回0,那么总和的好处(或者坏,取决于你)。在您的工作表中,项目在列表中必须是唯一的,否则,它将保持对每个实例的求和。因此,如果AYÇICEKYAĞI在那里2次,它将被加总两次。
您可以使用高级过滤器(仅限唯一值)以确保所有成分都被计算在内并且仅提及一次。
感谢。