2016-12-15 136 views
2

如何將以下代碼編寫爲循環。我想從一個表中片4行從範圍(B:17:L17" )的值複製。有沒有更有效的方式與循環做在Excel中爲Visual Basic編寫循環

ActiveSheet.Range("B17").Value = Sheets(4).Range("G8") 

ActiveSheet.Range("C17").Value = Sheets(4).Range("G9") 

ActiveSheet.Range("D17").Value = Sheets(4).Range("G10") 

ActiveSheet.Range("E17").Value = Sheets(4).Range("G11") 
ActiveSheet.Range("F17").Value = Sheets(4).Range("G12") 
ActiveSheet.Range("G17").Value = Sheets(4).Range("G13") 
ActiveSheet.Range("H17").Value = Sheets(4).Range("G14") 

ActiveSheet.Range("I17").Value = Sheets(4).Range("G15") 

ActiveSheet.Range("J17").Value = Sheets(4).Range("G16") 


ActiveSheet.Range("K17").Value = Sheets(4).Range("G17") 

ActiveSheet.Range("L17").Value = Sheets(4).Range("G18") 
+1

參見[流量控制結構(http://stackoverflow.com/documentation/ vba/1873/flow-control-structures#t = 201612151953105925624)關於Documentation.SO。 –

+0

這個問題是如何得到upvotes的? – vacip

回答

8

是的,有:?

ActiveSheet.Range("B17:L17").Value = Application.Transpose(Sheets(4).Range("G8:G18").Value) 
+3

..............非常好! –

+2

@ Gary的學生謝謝,但我只是意識到,OP想要一個「更有效的方式與循環」,猜測這可能是超出預期的大聲笑。 –

+2

由於Excel包含此功能,因此這是更高效的,絕對是最好的解決方案:整潔而簡單。 – Sgdva

1

你可以使用這樣的事情(VB.Net,但可以很容易地複製到VBA):

Dim cell as Integer, c as Integer 
cell = 8 
For c = 66 To 76 
    ActiveSheet.Range(Chr(c) & "17").Value = Sheets(4).Range("G" & cell) 
    cell = cell + 1 
Next 

的CHR()函數得到(66-76與字符代碼相關聯的字符),然後將此值與字符串「17」連接組成一個完整的單元格名稱(「B17」,「C17」,...)

我也在同一時間遞增G的單元格編號。如果你真的想用一個循環


使用此 - 但也可能有更好的方法,如answer given by @A.S.H

+0

@ YowE3K謝謝 - 對突出顯得過於激進。 – vbnet3d

+2

請注意,這項工作到Z列。除此之外...... –

+1

@ Mat'sMug絕對正確......這可以擴展到包括更多可能的值,但在那一點上,我會建議使用更好的方法,就像ASH的回答一樣。 – vbnet3d

1

解決方案的解釋:
建立你的規則!有源薄片的範圍有什麼變化?該列將隨着for/to循環而增長!所以,我們應該對此進行總結。什麼是另一件事會增加?在'='的另一側的範圍,所以通過設置一個算法,我們可以說該行在Activesheet範圍內是const,而列是另一側的on變量。
解決方案:

Sub Test() 
Const TotalInteractions As Long = 11 
Dim CounterInteractions As Long 
    For CounterInteractions = 1 To TotalInteractions 
    'where 1 is column A so when it starts the cycle would be B,C and so on 
    'where 7 is the row to start so when it begins it would became 8,9 and so on for column G 
    ActiveSheet.Cells(17, 1 + CounterInteractions).Value = Sheets(4).Cells(7 + CounterInteractions, 7) 
    Next CounterInteractions 
End Sub 
+0

@ YowE3K你是對的,我的壞我更新它 – Sgdva

0

這可能是你的最有效的解決方案與聲明:

Sub LoopExample() 
    Sheets("Sheet4").Range("G8:G18").Copy 
    Sheets("Sheet2").Range("B17").PasteSpecial xlPasteValues, Transpose:=True 
End Sub 
+1

這將複製不僅僅'.Value's。它也複製到錯誤的頁面(應該是'Sheets(4)'),它也複製到單元格G8:Q8而不是G8:G18。來源和目的地是錯誤的。 – YowE3K

+0

@ YowE3K你令人印象深刻! :D –

+0

哎呀!編輯見上文。謝謝! – user1