首页 > 解决方案 > 批量数据列(表)中的循环复制值

问题描述

下午好,

我有一个关于在面对大量数据时在列内复制的问题。

基本上我有一个可重复的表格。

Eaxch 表从 B 列开始,继续向下 53 列到 BB 列,然后有 3 个空列,下一个表从 BF 列开始到 EF 列,最后一个从 EJ 到 HJ 列。

然后我想复制例如 B 列,将其粘贴到 FN 列中,知道这是我表的最左侧部分。要复制另一列,我必须知道,表格的最左列和最右列之间的距离是 53(它们是相同的),而第一个表的最左列和第二个表的最左列之间的距离是 56。最初我计算了像 COLUMNS(FN11:HN11) =53 这样的列,这是一个简单的 Excel 公式。接下来我使用了这段代码:

Sub cols_UK()
Sheets("14").Activate
Range("A11:A4739").Copy
Range("FN11, HR11, JU11").PasteSpecial xlPasteValues
Range("B11:B4739").Copy
Range("FO11, HO11, HS11, JS11, JW11, LW11").PasteSpecial xlPasteValues

这显然有效,但这项工作非常乏味。

和这里一样:

Range("FM11, HQ11, JU11, LX11").Value = "1to10"
Range("FM479, HQ479, JU479, LX479").Value = "11to20"
Range("FM947, HQ947, JU947, LX947").Value = "21to31"
Range("FM1415, HQ1415, JU1415, LX1415").Value = "MONTH"

我想将一些值放在彼此之间有特定距离的列中。

在列的情况下是否有一些循环解决方案?

感谢和问候,在此处输入图像描述

标签: excelvba

解决方案


这应该可以解决问题。如果您有任何问题,请告诉我。

Sub CopyTableInWorksheet()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Sheet1")
    Dim lStartColumn As Long
    Dim lStartRow As Long
    Dim lEndRow As Long
    Dim lSpacer As Long
    Dim lWidth As Long
    Dim lPasteColumn As Long

    'Set table size and spacing values
    lStartColumn = 2
    lStartRow = 2
    lEndRow = 100000
    lSpacer = 3

    'Determine width of table, set the column number to start the new table, then copy and paste
    lWidth = ws.Range(ws.Cells(lStartRow, lStartColumn), ws.Cells(lStartRow, lStartColumn).End(xlToRight)).Columns.Count
    lPasteColumn = ws.Cells(lStartRow, lStartColumn).Column + lWidth + lSpacer
    ws.Range(ws.Cells(lStartRow, 2), ws.Cells(lEndRow, ws.Range("B1").Column + lWidth)).Copy ws.Range(ws.Cells(lStartRow, lPasteColumn), ws.Cells(lEndRow, lPasteColumn + lWidth))
End Sub

推荐阅读