2014-02-11 39 views
0

问题1:如何编写VBA代码以完成此任务,并且最重要的是,将公式复制到列N的所有单元格?在Excel中复制单元格VBA:删除框和公式交互

  • L行,从第13行开始(L13)。在此栏中,用户将通过从位于每个单元格中的下拉框中选择三种可能性的数组来通知货币。他们是字母和定义为词“真实”或“美元”或“欧元”)

  • 列男,来自管线13从这里开始,用户将开关输入一些

  • 列N,也从第13行开始。本专栏将计算投资。的细胞在此列中的属性被设置为 “货币”)

  • I $ 3 = 2,42(恒定美元)

  • I $ 4 = 3.30(恒定欧元)

  • J列,从管线13开始这是被分析项目的数量(玉米粒,大米袋等)

规划算法
==================

该代码将检查单词“真”或“元”或“欧洲”是存在于柱的细胞L. *如果存在“美元”,那么它会乘以恒定的美元乘以用户提示的数字* (商品价值)乘以列M的单元格中的数量。结果将放置在单元格中N列,它总是在 “真实”

如果L13 = “美元” 然后
N13 = J13 * M13 * I $ 3

否则

如果L13 = “真” 然后
N13 = J13 * M13

否则

如果L13 = “欧元” 然后
N13 = J13 * M13 * I $ 4

否则

N13 = “0” 和M13 = “0”

问题2:还有关于下拉框,假设我想要N列中的总金额,并且它的单元格只在它们单独匹配某些条件时才会相加。这里是用户拿起从下拉框继承的符号的示例(4个可能的Wigdings符号:&,x,+)

Z1 = SUMIF(B13:B300;“= +”; N13: N300)

(interval; criteria; interval sum)。这意味着单个单元格Z1包含属于列N的所有单元格的总数,条件是列B拥有上述符号。然而,这不起作用。它总是给我零值。然而,有趣的是要注意,如果我用字母(a,b,c,d)代替(I,&,x,+),Z1会收到一个非零值。并非所有字母都能正常工作,正如我们上面的字母“x”所看到的那样。

+0

嗯......你的具体问题是什么? – lowak

+0

如果'A5 =“Real”'不应该赋值为'Dn = Bn/E $ 1'。您是否需要一个公式,以便在用户更改源值时计算值发生变化?如果源值不会更改,VBA可以计算值而不是植物公式。 –

+0

经过一些试验和错误之后,我设法想出了一个解决方案。见下文 –

回答

0

Q1:SOLUTION

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 =“Real”; M13; SE(L13 =“Euro”; 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:SOLUTION

不要使用 “=”。那么这将是:

Z1=SUMIF(B13:B300;"þ";N13:N300) 

在英文版本的MSOffice的你会用,而不是分号

好逗号,that's它。 看到亚,路易斯

相关问题