2016-07-26 75 views
1

在一定的範圍內我對編碼非常陌生,並且編寫了一些不起作用的代碼,我理解爲什麼,但無法找出解決方法。 我想要做的是我的代碼檢查列B中的每個單元格顯示的數字,然後填寫E列中的相應字符串。我的問題是我的循環不起作用,因爲我可能應該使用「for每個「循環或不循環?而且我無法弄清楚如何在不使用範圍而是單元格的情況下執行if語句。 謝謝你的時間和幫助!循環使用If條款

Dim x As Long 

For x = 2 To 1000 
    Range ("E" & x) 
     If Range("B2") = 6002 Then 
      Range("E2") = "Gehälter " & Month(Range("G2")) & "/2016" 
     ElseIf Range("B2") = 6003 Then 
      Range("E2") = "Üst-Pauschale " & Month(Range("G2")) & "/2016" 
     ElseIf Range("B2") = 6027 Then 
      Range("E2") = "Sonderzahlung " & Month(Range("G2")) & "/2016" 
     ElseIf Range("B2") = 6110 Then 
      Range("E2") = "SV-DG Anteil " & Month(Range("G2")) & "/2016" 
     ElseIf Range("B2") = 6211 Then 
      Range("E2") = "MVK " & Month(Range("G2")) & "/2016" 
     ElseIf Range("B2") = 6410 Then 
      Range("E2") = "Dienstgeberbeitrag " & Month(Range("G2")) & "/2016" 
     ElseIf Range("B2") = 6420 Then 
      Range("E2") = "Dienstgeberzuschlag " & Month(Range("G2")) & "/2016" 
     ElseIf Range("B2") = 6430 Then 
      Range("E2") = "Kommunalsteuer " & Month(Range("G2")) & "/2016" 
     ElseIf Range("B2") = 6691 Then 
      Range("E2") = "Km-Geld " & Month(Range("G2")) & "/2016" 
     ElseIf Range("B2") = 7731 Then 
      Range("E2") = "Reisekosten " & Month(Range("G2")) & "/2016" 
     ElseIf Range("B2") = 6035 Then 
      Range("E2") = "Sonstige Zulagen " & Month(Range("G2")) & "/2016" 
Else: Range("E2") = "" 
End If 
Next x 

這就是它應該看起來像! enter image description here

+0

您的問題是不是與使用的'對於...'而不是'對於每個...'但是你保持參照第2行中你的代碼而不是第x行。請參閱下面的@anastasiya答案。爲了改進你的代碼,你還應該使用'Select Case'而不是'If'。 –

+0

Got it!謝謝您的幫助! –

回答

1

這是你在找什麼?

Dim x As Long 

For x = 2 To 1000 
     If Range("B" & x) = 6002 Then 
      Range("E" & x) = "Gehälter " & Month(Range("G" & x)) & "/2016" 
     ElseIf Range("B" & x) = 6003 Then 
      Range("E" & x) = "Üst-Pauschale " & Month(Range("G" & x)) & "/2016" 
     ElseIf Range("B" & x) = 6027 Then 
      Range("E" & x) = "Sonderzahlung " & Month(Range("G" & x)) & "/2016" 
     ElseIf Range("B" & x) = 6110 Then 
      Range("E" & x) = "SV-DG Anteil " & Month(Range("G" & x)) & "/2016" 
     ElseIf Range("B" & x) = 6211 Then 
      Range("E" & x) = "MVK " & Month(Range("G" & x)) & "/2016" 
     ElseIf Range("B" & x) = 6410 Then 
      Range("E" & x) = "Dienstgeberbeitrag " & Month(Range("G" & x)) & "/2016" 
     ElseIf Range("B" & x) = 6420 Then 
      Range("E" & x) = "Dienstgeberzuschlag " & Month(Range("G" & x)) & "/2016" 
     ElseIf Range("B" & x) = 6430 Then 
      Range("E" & x) = "Kommunalsteuer " & Month(Range("G" & x)) & "/2016" 
     ElseIf Range("B" & x) = 6691 Then 
      Range("E" & x) = "Km-Geld " & Month(Range("G" & x)) & "/2016" 
     ElseIf Range("B" & x) = 7731 Then 
      Range("E" & x) = "Reisekosten " & Month(Range("G" & x)) & "/2016" 
     ElseIf Range("B" & x) = 6035 Then 
      Range("E" & x) = "Sonstige Zulagen " & Month(Range("G" & x)) & "/2016" 
Else: Range("E" & x) = vbNullString 
End If 

Next x 
+1

謝謝你的作品! –

2
Dim x As Long, s As String 

For x = 2 To 1000 

    Select Case Cells(x, "B").Value 
     Case 6002: s = "Gehälter" 
     Case 6027: s = "Üst-Pauschale" 
     'other cases.... 
     Case Else: s = "" 
    End Select 

    Cells(x, "E").Value = IIf(s <> "", s & " " & _ 
          Month(Cells(x, "G").Value) & "/2016", "") 

Next x 
1

使用選擇案例簡化代碼,您可能會在未來增加更多的情況。

Dim lrow As Long 

For lrow = 2 To 1000 

    Select Case Range("B" & lrow).Value 
     Case 6002 
      Range("E" & lrow) = "Geh?lter " & Month(Range("G" & lrow)) & "/2016" 

     Case 6003 
      Range("E" & lrow) = "?st-Pauschale " & Month(Range("G" & lrow)) & "/2016" 

     Case 6027 
      Range("E" & lrow) = "Sonderzahlung " & Month(Range("G" & lrow)) & "/2016" 

     Case 6110 
      Range("E" & lrow) = "SV-DG Anteil " & Month(Range("G" & lrow)) & "/2016" 

     Case 6211 
      Range("E" & lrow) = "MVK " & Month(Range("G" & lrow)) & "/2016" 

     Case 6410 
      Range("E" & lrow) = "Dienstgeberbeitrag " & Month(Range("G" & lrow)) & "/2016" 

     Case 6420 
      Range("E" & lrow) = "Dienstgeberzuschlag " & Month(Range("G" & lrow)) & "/2016" 

     Case 6430 
      Range("E" & lrow) = "Kommunalsteuer " & Month(Range("G" & lrow)) & "/2016" 

     Case 6691 
      Range("E" & lrow) = "Km-Geld " & Month(Range("G" & lrow)) & "/2016" 

     Case 7731 
      Range("E" & lrow) = "Reisekosten " & Month(Range("G" & lrow)) & "/2016" 

     Case 6035 
      Range("E" & lrow) = "Sonstige Zulagen " & Month(Range("G" & lrow)) & "/2016" 

     Case Else 
      Range("E" & lrow) = "" 

    End Select 

Next lrow 
2

在循環遍歷單元時,您從不更改要評估的行。

這會糾正你的代碼:

Dim x As Long 

For x = 2 To 1000 

    If Range("B" & x) = 6002 Then 
     Range("E" & x) = "Gehälter " & Month(Range("G" & x)) & "/2016" 
    ElseIf Range("B" & x) = 6003 Then 
     Range("E" & x) = "Üst-Pauschale " & Month(Range("G" & x)) & "/2016" 
    ElseIf Range("B" & x) = 6027 Then 
     Range("E" & x) = "Sonderzahlung " & Month(Range("G" & x)) & "/2016" 
    ElseIf Range("B" & x) = 6110 Then 
     Range("E" & x) = "SV-DG Anteil " & Month(Range("G" & x)) & "/2016" 
    ElseIf Range("B" & x) = 6211 Then 
     Range("E" & x) = "MVK " & Month(Range("G" & x)) & "/2016" 
    ElseIf Range("B" & x) = 6410 Then 
     Range("E" & x) = "Dienstgeberbeitrag " & Month(Range("G" & x)) & "/2016" 
    ElseIf Range("B" & x) = 6420 Then 
     Range("E" & x) = "Dienstgeberzuschlag " & Month(Range("G" & x)) & "/2016" 
    ElseIf Range("B" & x) = 6430 Then 
     Range("E" & x) = "Kommunalsteuer " & Month(Range("G" & x)) & "/2016" 
    ElseIf Range("B" & x) = 6691 Then 
     Range("E" & x) = "Km-Geld " & Month(Range("G" & x)) & "/2016" 
    ElseIf Range("B" & x) = 7731 Then 
     Range("E" & x) = "Reisekosten " & Month(Range("G" & x)) & "/2016" 
    ElseIf Range("B" & x) = 6035 Then 
     Range("E" & x) = "Sonstige Zulagen " & Month(Range("G" & x)) & "/2016" 
    Else: Range("E" & x) = "" 
    End If 
Next x 

但我會用Select Case語句,並做到這一點:

Dim x As Long 
Dim MyValue As String 
For x = 2 To 1000 
    Select Case Range("B" & x) 
     Case 6002 
     MyValue = "Gehälter" 
     Case 6003 
     MyValue = "Üst-Pauschale" 
     Case 6027 
     MyValue = "Sonderzahlung" 
     Case 6110 
     MyValue = "SV-DG Anteil" 
     Case 6211 
     MyValue = "MVK" 
     Case 6410 
     MyValue = "Dienstgeberbeitrag" 
     Case 6420 
     MyValue = "Dienstgeberzuschlag" 
     Case 6430 
     MyValue = "Kommunalsteuer" 
     Case 6691 
     MyValue = "Km-Geld" 
     Case 7731 
     MyValue = "Km-Geld" 
     Case 6035 
     MyValue = "Km-Geld" 
     Case Else 
     MyValue = "" 
    End Select 

    Range("E" & x) = IIf(MyValue = "", "", MyValue & " " & Month(Range("G" & x)) & "/2016") 

Next x 

的選擇案例將使如果更容易修改。

1

有一個Range("E" & x)沒有方法或屬性待定,使出來的東西它

而且你可能想:

  • 使用Option Explicit語句具有聲明的一點額外的費用所有變量都會爲您提供更多對代碼的控制權,並減少調試和維護工作量。

  • 使用Select Case塊不詳細且讀取更多能夠

導致:

Option Explicit 

Sub main() 
    Dim strng As String 
    Dim cell As Range 

    With Worksheets("MyWorksheet") '<--| always use fully qualified range reference (change "MyWorksheet" with your actual sheet name) 
     For Each cell In .Range("B2", .Cells(.Rows.Count, 2).End(xlUp)) '<--| loop through column "B" cells from row 2 down to last non empty one 
      Select Case cell.Value 
       Case 6002 
        strng = "Gehälter " 
       Case 6003 
        strng = "Üst-Pauschale " 
       Case 6027 
        strng = "Sonderzahlung " 
       Case 6110 
        strng = "SV-DG Anteil " 
       Case 6211 
        strng = "MVK " 
       Case 6410 
        strng = "Dienstgeberbeitrag " 
       Case 6420 
        strng = "Dienstgeberzuschlag " 
       Case 6430 
        strng = "Kommunalsteuer " 
       Case 6691 
        strng = "Km-Geld " 
       Case 7731 
        strng = "Reisekosten " 
       Case 6035 
        strng = "Sonstige Zulagen " 
       Case Else 
        strng = "" 
      End Select 
      cell.Offset(, 3).Value = strng & Month(Range("G2")) & "/2016" '<-- use 'Offset(,rowOffset, colOffset)' method to offset from a range 
     Next cell 
    End With 
End Sub