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

Dar*_*ren 6 excel vba excel-2007 excel-vba

我本来希望写一个宏,它为我做了一个非常重复的任务,但进入VBA比预期更难.我会学习如何在有时间的时候为excel编写宏,因为它看起来非常有用,但本周我不能花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)
Run Code Online (Sandbox Code Playgroud)

文本和数字随机交替几千个单元格.当列C是数字时,我需要列D保持与先前数字的差异,否则它必须保持空白:

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
Run Code Online (Sandbox Code Playgroud)

所以算法是:

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
Run Code Online (Sandbox Code Playgroud)

我不在乎是否第一个或最后一个单元格不起作用.

非常感谢您的帮助,或者如果您能指出我能找到答案的地方.

编辑:这是问题的简化版本,有两件事我不知道如何与excel宏做得好:选择一个单元格,并判断单元格是否为数字...对于记录,数字单元格已被转换从文本到数字格式.

Dav*_*ens 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
Run Code Online (Sandbox Code Playgroud)


Ali*_*n I 8

你需要VBA吗?

在列C
列C 之前插入一个新列,您的值变为列D
您可能需要列标题.
在单元格C2中:=IF(E2=0;0;SUM(E$2:$E2))这标识带有数字的行在
单元格中放置:=IF(ISNUMBER(D2);1;0)这为每个行设置顺序,并在vlookup中使用下一个数字
在单元格F2中:=IF(ISNUMBER(D2);ABS(D2-VLOOKUP(MAX($C$1:C1);$C$1:D1;2;0));"")
自动填充列C,E和F.
在F列中,您获得结果,除了第一个,即"#VALUE"