问题1:如何编写VBA代码以完成此任务,最重要的是,将公式复制到N列的所有单元格?
L栏,从第13行(L13)开始。在此列中,用户将通过从位于每个单元格中的下拉框中选择三种可能性的数组来通知货币。它们是字母,定义为“真实”或“美元”或“欧元”字样)
M栏,从第13行开始。此处,用户将输入一个数字
列N,也从第13行开始。此列将计算投资。此列中单元格的属性设置为“currency”)
I $ 3 = 2,42(恒定美元)
I $ 4 = 3,30(常数欧元)
J栏,从第13行开始。这是分析的物品数量(玉米粒,米袋等)
编程算法
==================
代码将检查列L的单元格中是否存在“Real”或“Dollar”或“Euro”字样。 *如果有“美元”,那么它将乘以美元乘以用户提示的数字* (商品价值)乘以M列单元格中的数量。结果将放在N列的单元格中,这些单元格始终位于“Real”
如果L13 =“Dollar”那么
N13 = J13 * M13 * I $ 3
其他
如果L13 =“真实”那么
N13 = J13 * M13
否则
如果L13 =“欧元”则为
N13 = J13 * M13 * I $ 4
其他
N13 =“0”且M13 =“0”
问题2:同样关于投递箱,假设我想要在第N列中拥有总金额,并且只有当它们单独匹配某些标准时才会将其单元格相加。以下是用户选择从投递箱继承的符号的示例(4种可能的Wigdings符号:I,&,x,þ)
Z1 = SUMIF(B13:B300; “=þ”; N13:N300)
(区间;标准;区间总和)。这意味着单个单元Z1包含与列N有关的所有单元的总量,条件是列B具有上述符号。然而,这不起作用。它总是给我零值。然而,有趣的是要注意,如果我用字母(a,b,c,d)替换(I,&,x,þ),则Z1接收非零值。并非所有字母都有效,我们可以通过上面的字母“x”看到。
答案 0 :(得分:0)
Q1:解决方案
Sub Invest()
Application.ScreenUpdating = False
Dim cell As Range
Sheets("Invest").Select
Range("N13").Select
ActiveCell.FormulaR1C1 = _
"=(RC[-4])*(IF(RC[-2]=""Dolar"",RC[-1]*R3C[-5],IF(RC[-2]=""Real"",_
RC[-1],IF(RC[-2]=""Euro"",RC[-1]*R4C[-5],AND(0,RC[-1]=0)))))"
这翻译了上面写的内容
= J13 (SE(L13 = “豆捞”; M13 * I $ 3; SE(L13 = “真”; M13; SE(L13 = “欧元”; M13 * I $ 4; E(0; M13 = 0)))))*
t = Cells(1048576, "B").End(xlUp).Row
Selection.AutoFill Destination:=Range("N13:N" & t), Type:=xlFillDefault
以上部分非常好。它在B列中搜索数据,直到B1048576的最后一行。例如,如果列有一些数据直到单元格B300,那么它将计算B300和B13之间有多少单元格。因此,它将公式从N13复制到N300。但是,应该记住,在工作簿中复制完整的工作表和数百行可以增加excel文件的最终大小。另一种方法是复制最后一次计算的结果,并将其特殊粘贴在同一位置,作为值。例如:
Range("N13:N" & t).Select
Selection.Copy
Range("N13").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
End Sub
Q2:解决方案
不要使用“=”。然后是:
Z1=SUMIF(B13:B300;"þ";N13:N300)
在英文版的MSOffice中,您将使用逗号代替分号
嗯,就是这样。 见ya,Luiz