2015-12-10 364 views
0

這應該很簡單。下面是代碼即時通訊與合作:Excel Vba:單元格中的公式值

Private Sub CommandButton23_Click() 

Dim linerngs As Range 
Dim lineitem As Range 
Dim lastlinerow As Long 
Dim TabLastRow 
Dim claimstab As String 
Dim officesrange As Range 
Dim office As Range 

officeslastrow = Sheet2.Range("A" & Rows.Count).End(xlUp).Row 
lastlinerow = Sheet2.Range("D" & Rows.Count).End(xlUp).Row 

Set officerng = Sheet2.Range("A6:A" & officeslastrow).SpecialCells(xlCellTypeConstants, 23) 
Set linerngs = Sheet2.Range("D7:D" & lastlinerow).SpecialCells(xlCellTypeConstants, 23) 

'Starts evaluating the first line item at the first home office 
For Each lineitem In linerngs 

     'evaluates line item to identify which formula is needed to count it 
     If InStr(1, lineitem.Value, "IN") > 0 And InStr(1, lineitem.Value, "AOS") = 0 Then 
     lineitem.Offset(0, 16).Formula = "=SUMPRODUCT(COUNTIFS(INDIRECT(""'""&R2C5&"" Claims'!B:B""),R[0]C[-19],INDIRECT(""'""&R2C5&"" Claims'!C:C""),R[0]C[-17],INDIRECT(""'""&R2C5&"" Claims'!E:E""),CHOOSE({1;2},R[0]C[-15],R[0]C[-14]),INDIRECT(""'""&R2C5&"" Claims'!G:G""),R[0]C[-9]:R[0]C[-1]))" 
     lineitem.Offset(0, 17).Formula = "=SUMPRODUCT(COUNTIFS(INDIRECT(""'""&R3C5&"" Claims'!B:B""),R[0]C[-20],INDIRECT(""'""&R3C5&"" Claims'!C:C""),R[0]C[-18],INDIRECT(""'""&R3C5&"" Claims'!E:E""),CHOOSE({1;2},R[0]C[-16],R[0]C[-15]),INDIRECT(""'""&R3C5&"" Claims'!G:G""),R[0]C[-10]:R[0]C[-2]))" 
     End If 
     If InStr(1, lineitem.Value, "IN") > 0 And InStr(1, lineitem.Value, "AOS") > 0 Then 
     lineitem.Offset(0, 16).Formula = "=SUMPRODUCT(COUNTIFS(INDIRECT(""'""&R2C5&"" Claims'!B:B""),R[0]C[-19],INDIRECT(""'""&R2C5&"" Claims'!C:C""),R[0]C[-17],INDIRECT(""'""&R2C5&"" Claims'!E:E""),CHOOSE({1;2},R[0]C[-15],R[0]C[-14])))-SUMPRODUCT(COUNTIFS(INDIRECT(""'""&R2C5&"" Claims'!B:B""),R[0]C[-19],INDIRECT(""'""&R2C5&"" Claims'!C:C""),R[0]C[-17],INDIRECT(""'""&R2C5&"" Claims'!E:E""),CHOOSE({1;2},R[0]C[-15],R[0]C[-14]),INDIRECT(""'""&R2C5&"" Claims'!G:G""),R2C11:R2C20))" 
     lineitem.Offset(0, 17).Formula = "=SUMPRODUCT(COUNTIFS(INDIRECT(""'""&R3C5&"" Claims'!B:B""),R[0]C[-20],INDIRECT(""'""&R3C5&"" Claims'!C:C""),R[0]C[-18],INDIRECT(""'""&R3C5&"" Claims'!E:E""),CHOOSE({1;2},R[0]C[-16],R[0]C[-15])))-SUMPRODUCT(COUNTIFS(INDIRECT(""'""&R3C5&"" Claims'!B:B""),R[0]C[-20],INDIRECT(""'""&R3C5&"" Claims'!C:C""),R[0]C[-18],INDIRECT(""'""&R3C5&"" Claims'!E:E""),CHOOSE({1;2},R[0]C[-16],R[0]C[-15]),INDIRECT(""'""&R3C5&"" Claims'!G:G""),R2C11:R2C20))" 
     End If 
     If InStr(1, lineitem.Value, "Excess MO") > 0 And InStr(1, lineitem.Value, "AOS") = 0 Then 
     lineitem.Offset(0, 16).Formula = "=SUMPRODUCT(COUNTIFS(INDIRECT(""'""&R2C5&"" Claims'!B:B""),R[0]C[-19],INDIRECT(""'""&R2C5&"" Claims'!C:C""),R[0]C[-17],INDIRECT(""'""&R2C5&"" Claims'!E:E""),CHOOSE({1;2},R[0]C[-15],R[0]C[-14]),INDIRECT(""'""&R2C5&"" Claims'!P:P""),"">""&R2C22,INDIRECT(""'""&R2C5&"" Claims'!G:G""),R[0]C[-9]:R[0]C[-1]))" 
     lineitem.Offset(0, 17).Formula = "=SUMPRODUCT(COUNTIFS(INDIRECT(""'""&R3C5&"" Claims'!B:B""),R[0]C[-20],INDIRECT(""'""&R3C5&"" Claims'!C:C""),R[0]C[-18],INDIRECT(""'""&R3C5&"" Claims'!E:E""),CHOOSE({1;2},R[0]C[-16],R[0]C[-15]),INDIRECT(""'""&R3C5&"" Claims'!P:P""),"">""&R2C22,INDIRECT(""'""&R3C5&"" Claims'!G:G""),R[0]C[-10]:R[0]C[-2]))" 
     End If 
     If InStr(1, lineitem.Value, "Excess MO") > 0 And InStr(1, lineitem.Value, "AOS") > 0 Then 
     lineitem.Offset(0, 16).Formula = "=SUMPRODUCT(COUNTIFS(INDIRECT(""'""&R2C5&"" Claims'!B:B""),R[0]C[-19],INDIRECT(""'""&R2C5&"" Claims'!C:C""),R[0]C[-17],INDIRECT(""'""&R2C5&"" Claims'!E:E""),CHOOSE({1;2},R[0]C[-15],R[0]C[-14]),INDIRECT(""'""&R2C5&"" Claims'!P:P""),"">""&R2C22))-SUMPRODUCT(COUNTIFS(INDIRECT(""'""&R2C5&"" Claims'!B:B""),R[0]C[-19],INDIRECT(""'""&R2C5&"" Claims'!C:C""),R[0]C[-17],INDIRECT(""'""&R2C5&"" Claims'!E:E""),CHOOSE({1;2},R[0]C[-15],R[0]C[-14]),INDIRECT(""'""&R2C5&"" Claims'!P:P""),"">""&R2C22,INDIRECT(""'""&R2C5&"" Claims'!G:G""),R2C11:R2C20))" 
     lineitem.Offset(0, 17).Formula = "=SUMPRODUCT(COUNTIFS(INDIRECT(""'""&R3C5&"" Claims'!B:B""),R[0]C[-20],INDIRECT(""'""&R3C5&"" Claims'!C:C""),R[0]C[-18],INDIRECT(""'""&R3C5&"" Claims'!E:E""),CHOOSE({1;2},R[0]C[-16],R[0]C[-15]),INDIRECT(""'""&R3C5&"" Claims'!P:P""),"">""&R2C22))-SUMPRODUCT(COUNTIFS(INDIRECT(""'""&R3C5&"" Claims'!B:B""),R[0]C[-20],INDIRECT(""'""&R3C5&"" Claims'!C:C""),R[0]C[-18],INDIRECT(""'""&R3C5&"" Claims'!E:E""),CHOOSE({1;2},R[0]C[-16],R[0]C[-15]),INDIRECT(""'""&R3C5&"" Claims'!P:P""),"">""&R2C22,INDIRECT(""'""&R3C5&"" Claims'!G:G""),R2C11:R2C20))" 
     End If 
     If InStr(1, lineitem.Value, "Medical Only") > 0 Then 
     lineitem.Offset(0, 16).Formula = "=SUMPRODUCT(COUNTIFS(INDIRECT(""'""&R2C5&"" Claims'!B:B""),R[0]C[-19],INDIRECT(""'""&R2C5&"" Claims'!C:C""),R[0]C[-17],INDIRECT(""'""&R2C5&"" Claims'!E:E""),CHOOSE({1;2},R[0]C[-15],R[0]C[-14]),INDIRECT(""'""&R2C5&"" Claims'!P:P""),""<""&R2C22))" 
     lineitem.Offset(0, 17).Formula = "=SUMPRODUCT(COUNTIFS(INDIRECT(""'""&R3C5&"" Claims'!B:B""),R[0]C[-20],INDIRECT(""'""&R3C5&"" Claims'!C:C""),R[0]C[-18],INDIRECT(""'""&R3C5&"" Claims'!E:E""),CHOOSE({1;2},R[0]C[-16],R[0]C[-15]),INDIRECT(""'""&R3C5&"" Claims'!P:P""),""<""&R2C22))" 
     End If 
     If InStr(1, lineitem.Value, "Incident Only") > 0 Then 
     lineitem.Offset(0, 16).Formula = "=SUMPRODUCT(COUNTIFS(INDIRECT(""'""&R2C5&"" Claims'!B:B""),R[0]C[-19],INDIRECT(""'""&R2C5&"" Claims'!C:C""),R[0]C[-17],INDIRECT(""'""&R2C5&"" Claims'!E:E""),CHOOSE({1;2},R[0]C[-15],R[0]C[-14])))" 
     lineitem.Offset(0, 17).Formula = "=SUMPRODUCT(COUNTIFS(INDIRECT(""'""&R3C5&"" Claims'!B:B""),R[0]C[-20],INDIRECT(""'""&R3C5&"" Claims'!C:C""),R[0]C[-18],INDIRECT(""'""&R3C5&"" Claims'!E:E""),CHOOSE({1;2},R[0]C[-16],R[0]C[-15])))" 
     End If 

Next lineitem 
'repeats the process for the next line item until it reaches the end 

'Calculates Net Claims 
For Each lineitem In linerngs 
lineitem.Offset(0, 19).Formula = "=R[0]C[-3] - SUM(R[0]C[-2]:R[0]C[-1])" 
Next lineitem 

End Sub 

一切正常,我只是喜歡它,如果只是公式結果顯示在單元格,而不是整個公式。我知道這是可能的,我只是不記得過去我是如何做到的。任何幫助將不勝感激。

+1

嘗試 「Ctrl +'」?啊。這是〜鍵。 – findwindow

回答

1

有很多種方法可以做到這一點。

就我個人而言,在設置公式後,我會添加將單元格值設置爲等於它自己的值。請參見下面的例子片斷:

If InStr(1, lineitem.Value, "Incident Only") > 0 Then 
    lineitem.Offset(0, 16).Formula = "=SUMPRODUCT(COUNTIFS(INDIRECT(""'""&R2C5&"" Claims'!B:B""),R[0]C[-19],INDIRECT(""'""&R2C5&"" Claims'!C:C""),R[0]C[-17],INDIRECT(""'""&R2C5&"" Claims'!E:E""),CHOOSE({1;2},R[0]C[-15],R[0]C[-14])))" 
    lineitem.Offset(0, 16).Value = lineitem.Offset(0, 16).Value 
    lineitem.Offset(0, 17).Formula = "=SUMPRODUCT(COUNTIFS(INDIRECT(""'""&R3C5&"" Claims'!B:B""),R[0]C[-20],INDIRECT(""'""&R3C5&"" Claims'!C:C""),R[0]C[-18],INDIRECT(""'""&R3C5&"" Claims'!E:E""),CHOOSE({1;2},R[0]C[-16],R[0]C[-15])))" 
    lineitem.Offset(0, 17).Value = lineitem.Offset(0, 17).Value 
End If 
+0

這工作完美。謝謝! –

+0

太棒了!總是樂於幫助! –

0

不是一樣的東西:

Range("C1").Formula = "=SUM(A1,B1)" 

使用:

Range("C1").Value = Evaluate("=SUM(A1,B1)") 
+0

我試過了,得到「#VALUE!」現在在單元格中出現錯誤 –

相關問題