将单元格值从不断变化的源复制到另一个工作表

时间:2019-02-11 22:04:59

标签: excel vba

这与我之前问过的问题有点类似,但是我还没有找到解决这个问题的窍门。我目前有两个工作表,第一个工作表有两列,每列下面有几百行。我进行了设置,以便用户可以根据需要添加更多的这些列集,并根据需要传输公式/格式。这些列集可以有任意数量,尽管它们总是从列“ D”开始,而最后一组列总是在工作表的最后一列之前10列。

现在我正在考虑将这些新列(始终在第2行中)的标题移到另一个工作表中。另外,我要介绍在这些列的每组中的4行中找到的值(所有这些列都被合并),因此每两列中的每组还有四个值。下面的代码背后的想法是,我将标题值放在顶部,在另一工作表的一列中查找包含它的行,如果找不到,则添加它。然后,它应该使用在其中找到/添加的行号,并将单元格设置为与前面提到的其他四个值相等的右侧(4列)。

我构造了一个while循环来执行此操作,我的想法是要对一个列集(从D2开始)执行此操作,然后转到F2,依此类推。

With ws1
    lastColumn = .Cells(1, .Columns.Count).End(xlToLeft).Column
End With 

StopColumn = lastColumn - 10

' I'm trying to find the last set of columns here, no matter how many the user adds the final one will be 10 before the sheet's final column


i = 4
While i <= StopColumn
    ColumnName = ws1.Cells(2, i).Value
' I'm trying to grab the header here, it's a merged cell for both of the columns
    With ws2
        With .Range("C7", .Cells(.Rows.Count, 3).End(xlUp))
            Set foundRng = .Find(what:=ColumnName, LookIn:=xlValues, lookat:=xlPart, MatchCase:=False)
            If foundRng Is Nothing And WorksheetFunction.CountBlank(.Cells) > 0 Then Set foundRng = .SpecialCells(XlCellType.xlCellTypeBlanks)
            If foundRng Is Nothing Then Set foundRng = .Cells(.Count + 1)
        End With
    End With
    ' Trying to see if they already have that header name in the new worksheet, and if not I'm adding it to column C of the first blank row
    With foundRng
        .Value = ColumnName
        .Cells(7, 3).Resize(, 7).Value = Array(ws1.Cells(3, i).Value, _
        ws1.Cells(22, i).Value, _
        ws1.Cells(108, i).Value, _
        ws1.Cells(122, i).Value)
    End With
    ' Bringing over the cell values to the columns of the new row on the other worksheet
    ColumnName = ""
    i = i + 2
    ' I'm counting +2 to move to the next set of merged cells
Wend

我相信我可能会考虑这个问题的解决方案,对于将其恢复到正常工作的任何帮助,我将不胜感激。我想我可以使用offset函数使代码中的stopcolumn部分更有效,但是我不确定。

1 个答案:

答案 0 :(得分:0)

弄清楚我在做什么-

.Cells(7, 3).Resize(, 7).Value 

应该阅读

.Cells(7, 2).Resize(, 4).Value 

我忘记了,由于我构造'foundRng'的方式,调整大小将以此作为起点,这意味着原始代码使内容减少了7向下/超出了所需的1列。