2017-05-10 2 views
1

엑셀 VB에서 코드에 약간 문제가 있습니다. 내 목표는 다음 if 문을 VBA 매크로로 변환하는 것입니다.Excel VBA If ElseIF else

는 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의 양이 제로 대단한 경우 true의 경우, 나는 그것을 검사 할 것입니다 L 열의 금액을 반환합니다. false 인 경우 열 L의 금액의 절대 값이 V 열의 금액 절대 값보다 작은 지 확인합니다. true 인 경우 열 L의 금액을 반환하고 그렇지 않으면 N 열의 금액을 합계합니다 합계가 0보다 작 으면 열 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

당신은 셀에 수식을 삽입하려고하거나 셀에 실제 값을 배치하려고 다음은 코드의 "엄격한"버전입니까? – YowE3K

+0

그리고 당신이 보여준 비트 (또는 적어도')')가 맞은 후에 바꿀 Excel식이', 거짓 (FALSE)'이라고 가정합니다 - 그것이 맞습니까? 또는 열 R에 "W"가 포함되지 않은 경우 열 T의 현재 값을 변경하지 않도록 매크로를 작성하려고합니까? – YowE3K

+0

결과를 넣으려고하는 열은 무엇입니까? (현재 코드는 질문의 수식과 일치하지 않습니다. 예를 들어, 열 T에 코드에 "W"가 포함되어 있는지보고 싶지만 "W"가 포함 된 열 R에 대한 질문이 있습니다. 그리고 코드가 열 V 또는 열 Z,하지만 귀하의 질문에 열 V는 수식에 입력 중 하나라고 등. – YowE3K

답변

0

, 그것은 당신의 ...Range("V" & rw_cnt) 세포를 가지고이 세포의 절대 값 이하, 0보다 큰의 한 COL 왼쪽 있는지 확인합니다. 아래로 2 행 또는 두 개의 오프셋 셀이 0보다 작은 경우 ...

어떻게 작동합니까?

'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 

기본적으로 수식이있는 경우 VBA는이를 String으로 해석합니다. R1C1 참조를 오프셋으로 바꾸면 작업이 잘됩니다. 위의 조치가 아무런 변화가 없거나 정확하지 않은 경우 알려주십시오 ...하지만 내가 뭘하고 있는지 이해할 수 있는지 확인하십시오. 이것이 주요 문제의 핵심이라고 생각합니다.

편집 : ActiveCell 대신 myCell을 사용하십시오.

Edit2가 : 편집 :

Private Sub looping() 
Dim rw_cnt As Long, lastRow As Long 

Application.ScreenUpdating = False 
Application.Calculation = xlCalculationManual 

With Sheets("Personal") 
    lastRow = .Cells(.Rows.Count, 22).End(xlUp).Row 
    For rw_cnt = 8 To lastRow 
     If .Range("R" & rw_cnt).Value = "W" And .Range("R" & rw_cnt).Value <> "" Then 
      'I am having difficulties on this section. 
      Dim myCel As Range 
      Set myCel = Sheets("Personal").Range("V" & rw_cnt) 
      With myCel 
       .Select 
       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 
      .Range("Z" & rw_cnt).FormulaR1C1 = "=0" 
     End If 
    Next rw_cnt 
End With      'Sheets("Personal") 

MsgBox ("Done!!!") 

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

'ActiveCell'?!?! 너 자신을 부끄러워해야 해! ;) ('myCel' 아마도?) – YowE3K

+0

@ YowE3K - 알아, 알아! 아, 나는 'mycel' 참조를 만드는데 너무 집중했습니다. 나는 그것을 조합하지 않았습니다.'Selection' *은'ActiveCell'이었습니다. : O – BruceWayne

+1

좋은'With myCel' 블록도 잘못되지 않을 것입니다.) (지금 닫을 게요 : D) – YowE3K

관련 문제