2013-04-03 206 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

這是一個答案? –

相關問題