2013-04-03 208 views
6

我一直希望写一个宏,它对我来说是一个非常重复的任务,但进入VBA比预期的要难。当我有一些时间时,我将学习如何为宏编程宏,因为它看起来非常有用,但本周我不能花费5到12个小时。根据另一个单元值将公式写入单元格

也许这里有人可以帮助!

我有几个出类拔萃遵循此模式的文件:

Column C - Column D 
-------------------- 
text  | (empty) 
number | (empty) 
number | (empty) 
text  | (empty) 
number | (empty) 
text  | (empty) 
text  | (empty) 
number | (empty) 
text  | (empty) 
number | (empty) 

凡文本和数字交替随机几个细胞。我需要列d持有,列C时是一个数字,与以往数之差,否则就必须留空白:

Column C - Column D 
-------------------- 
text  | (empty) 
3  | (empty) 
14  | (=C3-C2) : 11 
text  | (empty) 
16  | (=C5-C3) : 2 
text  | (empty) 
text  | (empty) 
21  | (=C8-C5) : 5 
22  | (=C9-C8) : 1 

所以算法是:

var previousNumberCell 
var i = 1 

for all (selected) cells/rows 
if (Row(i).column(C) holds number) { 
    Row(i).column(D).value = "=C"+i+"-"C"+previousNumberCell 
    previousNumberCell = i; 
} 
i++ 

End 

我不在乎如果第一个或最后一个单元格不起作用。

非常感谢你的帮助,或者如果你能指出我在哪里可以找到答案。

编辑:这是一个简化版本的问题,有两件事我不知道如何做好与Excel宏:选择一个单元格,并告诉如果单元格是一个数字...记录,数字单元格已从文本转换为数字格式。

回答

13

这给一个镜头:

Sub MyMacro() 
Dim rng as Range 
Dim cl as Range 
Dim lastNum as Range 
Set rng = Range(Selection.Address) 'Make sure that your active SELECTION is correct before running the macro' 

If Not rng.Columns.Count = 1 Then 
    MsgBox "Please select only 1 column of data at a time.",vbCritical 
    Exit SUb 
Else: 
    For each cl in rng 
     If IsNumeric(cl.Value) Then 
      If lastNum Is Nothing Then 
       cl.Offset(0,1).Formula = "=" & cl.Address 
      Else: 
       cl.Offset(0,1).Formula = "=" & cl.Address & "-" & lastNum.Address 

      End If 
      set lastNum = cl 
     End If 
    Next 
End If 

End Sub 
+0

@Daren现在就试试。 –

+0

在哪一行?它正在努力完成我的目标。 –

+0

你做了*所有*更改(添加了几个&符号,并从设置公式的行中删除了'.Text')。 –

8

你需要VBA?

插入你的价值观列C
C列前新列成为列d
您可能需要columnheaders ..
在C2单元格放:=IF(E2=0;0;SUM(E$2:$E2))这个标识与行数
在E2单元格地说:=IF(ISNUMBER(D2);1;0)第一=IF(ISNUMBER(D2);ABS(D2-VLOOKUP(MAX($C$1:C1);$C$1:D1;2;0));"")
自动填充柱C,E和F
列F,你得到的结果,但,这是“#VALUE:这台订单的每一行与一些在VLOOKUP
未来使用细胞F2放“

+0

它确实会工作,只是一个宏是真正的意思。任何方式,你仍然有我的+1 – Daren

+0

+1很好,以避免VBA和尽可能使用Excel功能! –

+1

+ 1对于非VBA解决方案:) –

-1

嗨,你可以做一个if公式和命名公式。 if(isnumber,named formula,0)

命名公式(=查找公式)

+1

这是一个答案? –

相关问题