根据另一个单元格值将公式写入单元格

我希望写一个macros,对我来说是一个非常重复的任务,但进入VBA比预期更难。 我会学习如何编程macros,因为它看起来非常有用,但我不能在本周花5到12个小时。

也许这里有人可以帮忙!

我有一些遵循这种模式的excel文件:

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 

所以algorithm是:

 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 

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

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

编辑:这是一个简化版本的问题,有两件事我不知道如何做好与Excelmacros:select一个单元格,并告诉如果单元格是一个数字…logging,数字单元格已被转换从文本到数字格式。

给这个镜头:

 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 

你需要VBA吗?

在列C之前插入一个新的列
列C与您的值成为D列
您可能需要列标题
在单元格C2中加上: =IF(E2=0;0;SUM(E$2:$E2))这个标识行的数字
在单元格E2中放入: =IF(ISNUMBER(D2);1;0)这将为每行的顺序设置一个数字,然后在vlookup中使用
在单元格F2中put: =IF(ISNUMBER(D2);ABS(D2-VLOOKUP(MAX($C$1:C1);$C$1:D1;2;0));"")
自动填充列C,E和F.
在F栏你会得到你的结果,除了第一个是“#VALUE”

嗨,你可以做一个if公式和命名公式。 如果(数字,命名公式,0)

命名公式(=查找公式)