2011-12-01 70 views
1

我試圖創建一個簡單的宏,它複製列中每個單元格中的兩個第一個數字,並將它們打印在不同的列中。這是一個超過1個工作表的Excel文檔。我已經嘗試了一段時間來編寫代碼,但沒有以前的經驗,我很難搞清楚該怎麼做。我知道「left()」函數能夠做到這一點,但我不知道如何定義從哪個列中繪製數據以及將要打印哪一列。任何幫助將不勝感激。使用左函數[VBA]

回答

9

由於沒有以前的經驗寫VBA代碼,我會建議你堅持公式的做法。老實說,即使你熟悉VBA,你仍然可以選擇使用公式。

將一個公式放入您想要複製的值的實際單元格中。

=LEFT(sourceCell, #of characters you want) 

這是它會怎樣看:

=LEFT(Sheet1!A1, 2) 

認爲它是說:「該小區將在小區OO等於前n個字符,從左側開始」。一旦你完成了你的公式,如果你不需要將它綁定到源代碼(如果sourceCell改變了,那麼帶有LEFT公式的單元格也會改變),你可以突出顯示單元格,Ctrl + Alt + C複製,然後右鍵單擊並選擇粘貼特殊。然後選擇VALUE,然後點擊確定,現在這些單元格將被硬編碼爲顯示的值,就好像您自己輸入了一樣。

一旦你掌握了使用公式,下一步就是VBA。如果你不習慣使用= LEFT,那麼跳入VBA並編寫範圍代碼等不要混淆你自己。一步一個腳印,在你知道它之前你會成爲一名職業球員。 :)

+0

+1表示VBA可能並不總是最好的解決方案。 – JimmyPena

+4

+1與JP評論相同。儘管如此,對於所有Excel強大的用戶來說,其同樣的生命週期轉向了VBA程序員。發現Excel的強大功能>使用Excel公式>發現VBA>隨處使用VBA並省略公式>實現美麗將公式和VBA結合在一起。 –

+0

好吧,justnS。我們都確實經歷了同樣的啓示:) – aevanko

2

這裏是一個快速樣本子,讓你開始:

Public Sub LeftSub() 

    Dim SourceRange As Range, DestinationRange As Range, i As Integer 

    'Define our source range as A1:A10 of Sheet1 
    Set SourceRange = Sheet1.Range("A1:A10") 

    'Define our target range where we will print. 
    'Note that this is expected to be of same shape as source 
    Set DestinationRange = Sheet1.Range("B1:B10") 

    'Iterate through each source cell and print left 2 bits in target cell 
    For i = 1 To SourceRange.Count 

     DestinationRange(i, 1).Value = Left(SourceRange(i, 1).Value, 2) 

    Next i 

End Sub 
2

如何

Sub foo() 
    Dim cell  As Range 
    Dim sourceRange As Range 

    '//define the source column - looks for contiguous downward data from A1; 
    Set sourceRange = Range(Sheets("Sheet1").Range("A1"), Selection.End(xlDown)) 

    '//iterate each cell 
    For Each cell In sourceRange 
     If IsEmpty(cell.Value) Then Exit For 

     '//example to place the value in corresponding row of column B in sheet 2 
     Sheets("Sheet2").Range("B" & cell.Row).Value = Left$(cell.Value,2) 
    Next 
End Sub 

或等價公式(在目標單元格)

=LEFT(Sheet1!A1,2)