2016-06-21 103 views
0

enter image description hereExcel VBA中添加公式基於

所以我有上面的表,我使用Excel VBA來添加新價格,然後加上公式決定柱。

正如你所看到的,細胞B2公式應該是=IF($A2>50000,"Ignore","Buy")和B3單元格公式應該是=IF($A3>50000,"Ignore","Buy")所以B2公式是指A2的價值,這是對B3A3等相同。我使用下面的VBA將相同的公式添加到空白單元格。是的,會有空白的決策單元,他們需要公式。我不能從上到下使用自動填充。我嘗試使用以下(LASTROW是us​​edrange.row):即使在細胞B5

Sheet1.Range("B2:B" & LastRow).SpecialCells(xlCellTypeBlanks). _ 
Formula = "=IF($A2>50000,""Ignore"",""Buy"")" 

與VBA的問題是式是=IF($A2>50000,""Ignore"",""Buy"")當它應該是=IF($A5>50000,""Ignore"",""Buy"")(應該是$A5代替$A2)。我究竟做錯了什麼?

+0

從公式中刪除$。 –

+0

@RyanWildry遺憾也沒有工作 – jay

回答

1

我相信Siddharth的這個答案就是你要找的。 https://stackoverflow.com/a/25788894/6494460

這實際上是一個單線。無需使用.Autofill

範圍( 「M3:M」 & LASTROW).Formula = 「= G3 & 」「,」」 & L3"

+0

不,我恐怕我是爲了避免非空白的,我只需要輸入公式爲空 – jay

0

你可以粘貼在所有單元格公式,考慮到你在細胞「B2」的公式:

Range("B2").Copy 
Range("B2:B" & LastRow).PasteSpecial xlPasteFormulas 
+0

我需要離開非空白單元格,原因是用戶是如果我使用自動填充或如果我粘貼在整個列上,用戶自定義的那些將被刪除 – jay

1

隨着SpecialCells(xlCellTypeBlanks),你可能會得到一個非連續範圍。有了這個,自動填充過程將不適用於A1公式。但與R1C1公式它會。

用途:

.Range("B2:B" & lastrow).SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=IF(RC1>50000,""Ignore"",""Buy"")" 

RC1意味着R嗷嗷你目前卻總是固定C olumn 1

對於R1C1參考文獻見https://support.office.com/en-us/article/Overview-of-formulas-7abfda78-eff3-4cc6-b4a7-6350d512d2dc?CorrelationId=2bedf5ef-a3b7-4a82-9b12-6ee86b494ae9&ui=en-US&rs=en-US&ad=US#bmusing_references_in_formulas。向下滾動至The R1C1 reference style

+0

如果要放置的公式是'=',那麼如何做FormulaR1C1? IFERROR(VLOOKUP(RC3,Database!$ A:$ F,3,FALSE),「」Missing「」)「' – jay

+0

@jay You可以使用'INDIRECT'函數,看我的回答 – arcadeprecinct

+1

@jay:'.FormulaR1C1 =「= IFERROR(VLOOKUP(RC3,Database!C1:C6,3,FALSE),」「Missing」「)」'。 'C1'修復'C'olumn'1' ='$ A','C6'修復'C'olumn'6' ='$ F'。 –

0

編輯更多詳細信息:您可以使用R1C1參考樣式,更重要的是,R[1]C[1]表示法。不過,對於不同的語言有一個警告,請參閱帖子的最後部分。示例:

R2C4  'row 2, column 4 so it's the cell D2 in A1-notation 
R[2]C[4] 'the cell 2 to the right and 4 down from the current cell (where this reference is located) 
R[2]C4  'the cell 2 to the right from the current cell in column 4 (D) 
R[-2]C[-4] 'you can also give negative arguments, this is the cell 2 to the left and 4 up 
R[2]C  'the same as R[2]C[0] 
RC[4]  'the same as R[0]C[4] 
R2C  'the same as R2C[0] 
RC4  'the same as R[0]C4 
R2   'row 2 
C4   'column 4 (the same as D:D) 

從最後三個示例中可以看出,符號不能混合使用。

現在對於你的情況:
如果你想在細胞Bx以下(任意數量的替換x)

"=IF($Ax>50000,""Ignore"",""Buy"")" 

這將是R1C1公式

"=IF(RC1>50000,""Ignore"",""Buy"")" 

,或者更重要的是它是左邊的列:

"=IF(RC[-1]>50000,""Ignore"",""Buy"")" 

後者會像從原始公式中刪除$一樣。

你的第二個公式是

"=IFERROR(VLOOKUP(RC3,Database!$A:$F,3,FALSE),""Missing"")" 

和阿克塞爾的回答

"=IFERROR(VLOOKUP(RC3,Database!C1:C6,3,FALSE),""Missing"")" 

現在應該清楚。

如果您不想或不能使用formulaR1C1屬性,但仍然使用單個單元格的R1C1樣式引用,則可以使用INDIRECT工作表函數。 INDIRECT("R1C1",FALSE)是對R1C1的參考。 FALSE指示它使用R1C1而不是A1表示法。如果引用的單元格中除了數字以外的內容,它可能會與簡單的引用略有不同。

我個人更喜歡R1C1表示法比A1表示法更好,主要是因爲它相對於當前位置更容易引用單元格,但也因爲它更容易讀取高列數並且它更接近於Cells(rowIndex,columnIndex)語法。

最後一件事:在其他語言版本的Excel中,R1C1的命名可能不同。這不會影響公式,當你通過VBA輸入時(我認爲),但如果你想從工作表中輸入它,你需要牢記這一點。例如在德語中是Z1S1。這在使用不同語言版本打開文件時也會導致問題。如果您在公式中使用INDIRECT("R1C1",FALSE)INDIRECTFALSE將被翻譯,但該字符串不會這樣就不會工作:((最後一部分是從內存中)

+0

什麼是RC [-1],如果我選擇A1而不是R1C1,這個工作將會起作用嗎?我嘗試在Excel中使用INDIRECT,但我一直在收到「移動單元格導致無效單元格引用」 – jay

+0

@jay我redid整個帖子,但我不確定你的新錯誤。我可能更好地使用'FormulaR1C1'而不是'INDIRECT' – arcadeprecinct