如何指定粘贴数据的位置,而不仅仅是在最后一个空列中

问题描述 投票:0回答:1

我在下面编写的代码将其他工作簿中的数据复制粘贴到第一列中,之后没有任何内容。因此,我的宏只会将数据粘贴到后面只有空列的第一列中,但是,我尝试将此数据粘贴到后面可能有数据的列中。如何为要进入的数据分配起始列,然后下一个工作簿中的以下数据进入下一列?例如,我要从中导入数据的 20 个文件,我希望它们从工作表的 E 列开始粘贴,并继续粘贴到下一个连续列。另外,我正在复制的某些项目可能有空白单元格,我希望它们粘贴为“0”。

Sub Avg_Rate_Changes_Import()

    Dim FileNameXls, f
    
    Dim wb As Workbook, I As Integer

    FileNameXls = Application.GetOpenFilename(filefilter:="Excel Files, *.xl*", MultiSelect:=True)

    If Not IsArray(FileNameXls) Then Exit Sub

    Application.ScreenUpdating = False

For Each f In FileNameXls
    
    Set wb = Workbooks.Open(f)

    For I = 1 To 1
      
    wb.Worksheets("Avg Rate Changes").Range("G9:G21").Copy
        
    lastColumn = ThisWorkbook.Sheets("Avg Rate Changes ").Cells(4, Columns.Count).End(xlToLeft).Column
        
    Set pasteRange = ThisWorkbook.Sheets("Avg Rate Changes").Cells(4, lastColumn + 1)
    pasteRange.PasteSpecial Paste:=xlPasteValues, Operation:=xlAdd, SkipBlanks:=False, Transpose:=False
        
    With ThisWorkbook.Sheets("Avg Rate Changes")
        
    Set pasteRange = .Range(.Cells(4, lastColumn + 1), .Cells(16, lastColumn + 1 + 6))
                    
    pasteRange.Replace What:="", Replacement:="0", LookAt:=xlWhole
    
    End With

    Next I
    
    wb.Close SaveChanges:=False
    
    Next f
Application.CutCopyMode = False
    
Application.ScreenUpdating = True
    
End Sub
excel vba macros
1个回答
0
投票

在有

set pasteRange
的地方,您可以使用循环内的移动列来定义范围,例如:

'outside of loop
dim colNum as long:  colNum = 5
'inside of loop
dim pasteRange as range:  set pasteRange = ThisWorkbook.Sheets("Avg Rate Changes").Cells(1,colNum)
pasteRange.PasteSpecial
colNum = colNum + 1

这会将复制到列中第一个单元格中的所有内容粘贴到其总使用行中。

replace
移出循环,这样所有需要更改的事情都会在之后立即发生。

© www.soinside.com 2019 - 2024. All rights reserved.