簡體   English   中英

VBA迭代細胞

[英]VBA Iterate through cells

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

下面發布的代碼無法識別單元格位置。 有沒有辦法循環單元格位置以逐步將信息粘貼到所需的空間? 我希望代碼將值粘貼到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

我嘗試使用“Cells”來做到這一點。

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

您可以使用偏移功能。

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

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

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

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

我做了以下代碼,因為我也遇到了一些運行時錯誤。 希望能幫助到你。

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

好的,這里的每個其他答案都沒有使用.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


閱讀在這里從微軟如何使用.Resize() .Offset().Cells()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM