2017-01-13 113 views
0

我下載了調查結果並將它們放入Excel中。通過每一列循環IF聲明

我可以將此宏應用於「A」列。

Private Sub CommandButton1_Click() 

counter = 2 'moves output 

For Each n In [A7:A50] 'loops through cell in specified range 

    If n < 400 Then 
     Sheets("Output").Cells(counter, "B") = 0 'Output to other sheet, = points awarded 
    ElseIf n > 400 Then 
     Sheets("Output").Cells(counter, "B") = 3 'Output to other seet, = points awarded 
    End If 

    counter = counter + 1 'moves counter up 1 

Next 

End Sub 

「B-R」全部具有與「A」列相同的條件。相反,只有開關「A」和輸出列輸入驗證碼

Sheets("Output").Cells(counter, "B") = 3 'Output to other seet, = points awarded 

一遍又一遍的,是可以循環我的櫃檯和我的if語句。

我的腳本查看「結果工作表」中的列/行A7:A50,在「輸出工作表」的B列中生成點。

我一直無法讓它看到列B(結果工作表),然後輸出到列C(輸出工作表),然後查看列C(結果工作表),然後輸出到列D(輸出工作表)。

+0

查看嵌套循環(For ... For ... Next ... Next) - 一個用於列和一個用於行,並根據您的循環計數器設置Cells()的兩個值 – SMM

回答

1

也許這將幫助你:

Private Sub CommandButton1_Click() 

Dim rng As Range 
Dim i As Integer 

Set rng = Range("A:R") ' define your range 

For i = 1 To rng.Columns.Count ' loop through the columns 

    counter = 2 'moves output 

    For Each n In Range(Cells(7, i), Cells(50, i)) 'loops through cell in specified column i 

    If n < 400 Then 
     Sheets("Output").Cells(counter, i + 1) = 0 'Output to other sheet, = points awarded 
    ElseIf n > 400 Then 
     Sheets("Output").Cells(counter, i + 1) = 3 'Output to other seet, = points awarded 


    End If 

    counter = counter + 1 'moves counter up 1 

    Next 
Next i 

End Sub 

我添加了一個循環,通過一個範圍內的每一列雲:R和應用宏對每個列的。我在if語句取代了「B」,所以結果將被應用到期望的柱:

評估列「A」 - >更新「B」列,

評價「B」列 - >更新列「C」...

這有幫助嗎?

+0

你好,這似乎是最好的,非常感謝你。我只用VBA工作了幾天,並且只能在原來的帖子中使用。 – jcaud3

+0

沒問題,我也是初學者,所以我知道鬥爭。很高興我能幫助:) – Wujaszkun

+0

你使用了什麼資源?我下一步我試圖將這個宏擴展到一個不同的變量,所以基本上在R,S-AB之後,成爲一個新類型的問題,我必須改變iF語句。 – jcaud3

1

編輯答案,希望能夠解決您的問題。我看到了幾件事情。

首先,我認爲您需要在結果進入之前激活每個工作表。其次,在確定希望輸出的單元格後,使用.value。第三個Cells()函數使用整數,所以「B」應該是2.

嘗試使用下面的代碼,看看它是否適合你。



Private Sub CommandButton1_Click() 
    Dim r as Long 
    Dim c as Long 
    Dim lastrow as Integer 
    Dim lastcol as Integer 
    Dim cpath as String 

    cpath = Worksheets("SHEETNAME") 'less typing later on 
    cpath2 = Worksheets("Output") 
    lastrow = WorksheetFunction.CountA(Range("A:A")) 
    lstcolm = WorksheetFunction.CountA(cpath.Rows(1).EntireRow) 
    cpath.Cells(2,1).Activate 'assuming you have a header row 


    For c = 1 to lastcol 
    For r = 2 to lastrow 

If cpath.cells(r,c).value < 400 Then 

cpath2.Activate 
    cpath2.Cells(r, 2).value = 0 
ElseIf n > 400 Then 

cpath2.Activate 
    cpath2.Cells(r, 2).value = 3 
End If 

cpath.activate 

next r 
next c 

End Sub 
+0

習慣格式化爲本網站&lt;&gt;勝利。 – mkinson