Excel VBA如果是ElseIF其他

时间:2017-05-10 22:46:50

标签: excel vba excel-vba excel-formula

我在excel vba中的代码有点麻烦。我的目标是将以下if语句转换为VBA宏。

if语句:

'=IF(R8="W",
'IF(L8>0,L8,
'IF(ABS(L8)<ABS(V7),L8,
'IF(N8+L8<0,L8+Z7,-V7))),

'IF(R8="A",
'IF(L8>0,(V7/(V7+Z7)*L8),
'IF(ABS(V7/(V7+Z7)*L8)>V7,-V7,(V7/(V7+Z7)*L8))),

'Added H not tested it yet
'IF(AND(R9="H",-L9>Z8),Z8+L9,0)

'IF(R8="C",
'IF(L8>0,L8/2,
'IF(AND((-L8/2)<V7,(-L8/2<Z7)),L8/2,
'IF(AND(V7<=0,Z7<=0),L8/2,
'IF(Z7+L8>0,-V7,-V7+(L8+Z7+V7)/2)))),0)))

我想要做的是,如果列R中有W,我希望它检查列L中的数量是否大于零,如果为真,则返回列L中的数量。如果错误检查是否列L中的金额的绝对值小于列V中金额的绝对值。如果为真,则返回列L中的金额,否则将列N和列L中的金额相加。如果总和小于零则返回列L和Z中的金额总和。如果为假,则返回列v中的金额(使其为负数)。

我试图解决它。

   Private Sub looping()
   Dim rw_cnt As Integer
   Application.ScreenUpdating = False
   Application.Calculation = xlCalculationManual
   rw_cnt = 8
   Do While Sheets("Personal").Range("R" & rw_cnt).Value <> ""

   If Sheets("Personal").Range("R" & rw_cnt).Value = "W" Then

        'I am having difficulties on this section. 
        Sheets("Personal").Range("V" & rw_cnt).Select
        If "=RC[-8]" > 0 Then
        ActiveCell.FormulaR1C1 = "=RC[-8]"
        ElseIf Abs("=RC[-8]") < Abs("=R[-1]C[2") Then
        ActiveCell.FormulaR1C1 = "=RC[-8]"
        ElseIf ("=RC[-6]" + "=RC[-8]") < 0 Then
        ActiveCell.FormulaR1C1 = "=RC[-8]" + "=R[-1]C[6"
        Else
        ActiveCell.FormulaR1C1 = "=-R[-1]C[7"
        End If

        Sheets("Personal").Range("Z" & rw_cnt).Select
        ActiveCell.FormulaR1C1 = "=0"
  End If

  rw_cnt = rw_cnt + 1
  Loop
  MsgBox ("Done!!!")

  Application.ScreenUpdating = True
  Application.Calculation = xlCalculationAutomatic
  End Sub

提前致谢!!

https://i.stack.imgur.com/4KiVg.png

1 个答案:

答案 0 :(得分:0)

如果我理解你正在尝试做什么,那就是你的Use dbi353348 GO Create TRIGGER trChangeAbusiveWord ON Post AFTER INSERT AS DECLARE @Posttekst varchar(300); DECLARE @AccountID int; DECLARE @PostID int; SELECT @Posttekst=i.Post FROM inserted i; SELECT @AccountID=i.Account_ID FROM inserted i; SELECT @PostID=i.Post_ID FROM inserted i; BEGIN UPDATE AbusiveWords SET @Posttekst=REPLACE(@Posttekst,Word,REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(Word,'A','#'),'E','%'),'I','$'),'O','*'),'U','@')) UPDATE Post SET Post = @Posttekst WHERE Post_ID = @PostID END 单元格,看看它是否大于0,小于一个单元格的绝对值。向下2行,或者如果两个偏移单元小于0 ......

这是如何运作的?

...Range("V" & rw_cnt)

基本上,在你有公式的地方,VBA只是把它解释为一个字符串。用偏移量替换R1C1引用,然后它应该适合您。如果上面没有做任何事情,或者是不正确的,请告诉我......但看看你是否能理解我正在尝试的事情,因为我认为这是你主要问题的关键。

编辑:而不是'I am having difficulties on this section. Dim myCel As Range Set myCel = Sheets("Personal").Range("V" & rw_cnt) With myCel If .Offset(0, -8).Value > 0 Then .FormulaR1C1 = "=RC[-8]" ElseIf Abs(.Offset(0, -8).Value) < Abs(.Offset(-1, 2).Value) Then .FormulaR1C1 = "=RC[-8]" ElseIf (.Offset(0, -6).Value + .Offset(0, -8).Value) < 0 Then .FormulaR1C1 = "=RC[-8]+R[-1]C[6]" Else .FormulaR1C1 = "=-R[-1]C[7]" End If End with ,请使用ActiveCell

EDIT2: 编辑:这是代码的“更严格”版本:

myCell