2016-12-30 231 views
4

我正在尋找一種方法來遍歷工作表中的單元格以粘貼值。VBA遍歷單元格

下面發佈的代碼將無法識別單元格的位置。有沒有辦法循環單元格的位置,逐步將信息粘貼到所需的空間中?我希望代碼首先將值粘貼到A1:C1中,然後移動4個空格並貼到E1:G1等。

不確定如何迭代字母以移動單元格。

Sub test() 

Dim x As Integer 
Dim y As Integer 
Dim InputSheet As Worksheet 
Dim myBook As Workbook 

Set myBook = Excel.ActiveWorkbook 
Set InputSheet = myBook.Sheets("InputSheet") 

For y = 0 To 5 
    x = 4 
    InputSheet.Range("A1 + 4*y : C1 + 4*y").Value = x 
Next y 

End Sub 
+0

['.Offset()'和'.Resize()'](https://www.businessprogrammer.com/power-excel-vba-secret-avoid-using-select/)是你的朋友。 – ja72

回答

2

您正在告訴工作簿從字面上查找範圍「A1 + 4 * y:C1 + 4 * y」,這顯然不是有效的地址。您需要評估字符串外部的數字表達式,將其轉換回字符串(顯式使用Cstr或者您可以將表達式放在圓括號中並讓編譯器爲您執行此操作,因爲VBA是動態類型的,這是您可能想要的一個重要概念基本上它能夠從上下文中找出它正在處理一個字符串類型變量),並最終將其重新加載到您的地址中,以便使其工作。

由於您似乎是vba /編碼的新手,我會建議您弄清楚如何使用斷點和手錶來查看機器如何實際評估變量。

InputSheet.Range("A" & (1+4*y) & ":C" & (1+4*y)).Value = x 
+1

感謝您的信息,斷點和手錶絕對是更好的方式來識別代碼中的問題。之前我會在整個代碼中添加msgbox來檢查變量的值,以查看出錯的地方。 – SgtYui

+0

嘿,我們都是從那裏開始的:-)弄清楚如何以最有效的方式進行調試是一個重要的里程碑(我仍然有時會遇到麻煩)祝您好運! –

+1

FWIW'Cstr'包裝在這裏不需要@SgtYui –

2

我想嘗試使用「單元格」來做到這一點。

Sub test() 

Dim x As Integer 
Dim y As Integer 
Dim InputSheet As Worksheet 
Dim myBook As Workbook 

Set myBook = Excel.ActiveWorkbook 
Set InputSheet = myBook.Sheets("InputSheet") 

For y = 0 To 5 
    x = 4 
    InputSheet.Range(InputSheet.Cells(1, 4 * y + 1), InputSheet.Cells(1, 4 * y + 3)).Value = x 
Next y 

End Sub 
+0

這是很好的知道我可以直接將單元格位置翻譯爲整數而不是處理字母。特別是當他們交給AA時。 – SgtYui

2

您可以使用偏移功能。

For i = 0 to 5 
    x = 4 
    InputSheet.Range("A1:C1").Offset(0, i * 4) = x 
Next i 
0

我做了下面的代碼,因爲我也有一些運行時錯誤。希望能幫助到你。

Dim wb As Workbook 

Dim ws As Object 

Set wb = Workbooks("Libro2") 

Set ws = wb.Sheets("Hoja1") 

For i = 1 To 10000 

     Dim strrangoa As String 
     Dim strrangob As String 
      'Creating a string variable replaces selecting the cell 
      strrangoa = "A" & i 
      strrangob = "B" & i 
      'If the active cell does not have data, it exits the loop 
      If ws.Range(strrangoa).Value = "" Then 
       GoTo Salir 
      Else 
      'The data from cells in Column A are passed to Column B 
       ws.Range(strrangob).Value = ws.Range(strrangoa).Value 
      End If 

Next 

Salir: 

End Sub 
0

好吧,這裏的每一個對方的回答未能使用.Resize()功能選擇的單元格區域這是推薦的方式。

Option Explicit 

Sub Test() 

    Dim x As Integer 
    Dim y As Integer 
    Dim InputSheet As Worksheet 
    Dim myBook As Workbook 

    Set myBook = Excel.ActiveWorkbook 
    Set InputSheet = myBook.Sheets("InputSheet") 

    For y = 0 To 5 
     x = 4 
     ' Start for "A1", move down 4*y rows, and select 
     ' one row and 3 columns to set the value 
     InputSheet.Range("A1").Offset(4*y, 0).Resize(1, 3).Value = x 

     ' Similar to using the `.Cells()` method 
     ' InputSheet.Range("A1").Cells(4*y+1, 1).Resize(1, 3).Value = x 
    Next y  

End Sub 

PS。你也可以做這樣的事情

InputSheet.Range("A2").Resize(1,3).Value = Array(1,2,3) 

要設置單元格A2,B2,C2 1,2,3

InputSheet.Range("A2").Resize(3,1).Value = _ 
      WorksheetFunction.Transpose(Array(1,2,3)) 

要設置單元格A2,A3,A4爲1, 2,3


here從微軟如何使用.Resize().Offset().Cells()