繁体   English   中英

使用vba在excel的不同列中应用各种公式

[英]applying variety of formula in different columns in excel using vba

我有多个公式要填充到工作表的不同列中。 我正在尝试使用此代码...

Dim strFormula(1 To 2) As Variant
Dim LastRow As Integer   'This is the LAST Non Empty Row

LastRow = ActiveWorkbook.Worksheets("FinalDetails").UsedRange.Row - 1 _
    + ActiveSheet.UsedRange.Rows.Count

With ThisWorkbook.Sheets("FinalDetails")
    strFormula(1) = "=IF(V2='Green','Preferred',IF(V2='LightGreen','Satisfactory',IF(V2='Yellow','Mediocre',IF(V2='Orange','Low',IF(V2='Red','Very Low',IF(V2='Black','HighRisk', 'No Analysis'))))))"
    strFormula(2) = "=IF(AB2<>"", CONCATENATE(AA2,' ','Band',' ',AB2),"")"
'   strFormula(3) = "=A2/B2"

    .Range("BH2:BI2").Formula = strFormula --'im having error on this Application defined or onject defined error
    .Range("BH2:BI" & LastRow).FillDown
End With

End Sub

不幸的是,我在这里看到了这段代码,无论是否有效,都没有人响应。

使用VBA在单元格中放置公式时要记住的重要一点是在双引号上加倍:

Sub qwerty()
    Range("A1").Formula = "=IF(Z1=""Happy"",1,2)"
End Sub

结果在单元格A1中具有此公式

=IF(Z1="Happy",1,2)

ActiveWorkbook.Worksheets(“ FinalDetails”)。UsedRange.Row始终为1,因此此处多余。

我认为ActiveSheet是“ FinalDetails”

有个更好的方法。

我会做这样的事情:

Dim vFormula(1 To 2) As Variant
Dim ra As String ' range address
Dim ur As Range  ' used range
Dim pr As Range  ' paste range

Dim rc As Integer ' row count
Dim cc As Integer ' column count
Dim hr As Integer ' header rows

Set ur = Worksheets("FinalDetails").UsedRange

hr = 1 ' number of header rows

ra = ur.Cells(1 + hr, 1).Address(False, False)

rc = ur.Rows.Count
cc = ur.Columns.Count

Set pr = ur.Offset(hr, cc).Resize(rc - hr, UBound(vFormula))

vFormula(1) = "=GetSatisfied(" & ra & ")"
vFormula(2) = "=IF(A$1<>""" & """, A1 & "" Band "" & B1, """ & """)"

pr.FormulaArray = vFormula

在这里,我使用了“最终详细信息”的使用范围,并在右侧创建了一个新的cc列,并对其进行了调整大小,以使其具有与原始行相同的行数,并且列的宽度与vFormulas列的尺寸相同。

我还为她处理了使用范围内的标题行。

在我的示例中,usedrange的第一列具有您在V列中获得的颜色满意度

对于strFormula(1),我编写了一个简单的函数GetSatisfied;

Function GetSatisfied(sColor As String) As String
  Select Case sColor
      Case "Green"
          GetSatisfied = "Preferred"
      Case "LightGreen"
          GetSatisfied = "Satisfactory"
      Case "Yellow"
          GetSatisfied = "Mediocre"
      Case "Orange"
          GetSatisfied = "Low"
      Case "Red"
          GetSatisfied = "Very Low"
      Case "Black"
          GetSatisfied = "High Risk"
      Case Else
          GetSatisfied = "Not Analysed"
  End Select
End Function

对于strFormula(2),您不需要连接-“&”或“ +”是连接-但您必须弄清楚如何编写字符串。

将立即窗口用于:

?“ = IF(A $ 12 <>”“”“&”“”,A1&“”乐队“”&B1,“”“&”“”)“

输出应与您希望单元格公式读取的内容匹配

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM