【问题标题】:Increment rows and columns to find variance and paste values in Excel VBA在 Excel VBA 中增加行和列以查找差异和粘贴值
【发布时间】:2019-08-11 12:54:52
【问题描述】:

我有两个工作表。 Sheet1 包含 B3:W296 中的数据,Sheet2 包含交替列 B3:B23、D3:D23、..、T3:T23 中的数据。现在我应该填写 Sheet2(C3:C23, E3:E23,..,U3:U23) 中的空备用列

Sheet2 的值应该像这样填充,

Sheet2.C3.value = VARP("Sheet1".Range(C3:C16)) ...

Sheet2.U3.value = VARP("Sheet1".Range(U3:U16))

对于 Sheet2 中的 row4,公式应更改为,

Sheet2.C4.value = VARP("Sheet1".Range(C17:C30)) ...

Sheet2.U4.value = VARP("Sheet1".Range(U17:U30))

我必须在不同的文件中执行此操作,因此两张表中的行数和列数可能会有所不同。所以我不能明确给出行号和列号。

我已经开始写下面的代码,但是我卡住了,

Dim lRow, lRow2 As Long
Dim lCol, lCol2 As Long
Dim i, j As Integer

lRow = ThisWorkbook.Worksheets("Sheet2").Cells.Find(What:="*", After:=Range("A1"), LookAt:=xlPart, _
LookIn:=xlFormulas, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, MatchCase:=False).Row
lCol = ThisWorkbook.Worksheets("Sheet2").Cells.Find(What:="*", After:=Range("A1"), LookAt:=xlPart, _
LookIn:=xlFormulas, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious, MatchCase:=False).Column
lRow2 = ThisWorkbook.Worksheets("Sheet1").Cells.Find(What:="*", After:=Range("A1"), LookAt:=xlPart, _
LookIn:=xlFormulas, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, MatchCase:=False).Row
lCol2 = ThisWorkbook.Worksheets("Sheet1").Cells.Find(What:="*", After:=Range("A1"), LookAt:=xlPart, _
LookIn:=xlFormulas, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious, MatchCase:=False).Column

For i = 3 To lRow
    For j = 3 To lCol - 2 Step 2
            ThisWorkbook.Worksheets("Sheet2").Range(j & i).Value = VarP(ThisWorkbook.Worksheets("Sheet1").Range())
    Next j
Next i

对于这种情况,我不确定如何继续执行 for 循环。

任何帮助将不胜感激。提前致谢。

【问题讨论】:

  • 您计算的范围是否总是 14 个单元格?
  • @SJR 是的..我将始终计算 14 个单元格的方差

标签: excel vba


【解决方案1】:

我相信您想找出一个与当前 i 不同的行数...您需要找到要迭代的 varp 集的数量,类似于(未经测试):

dim lr as long, lc as long, i as long, j as long, k as long, ns as long
with sheets(1)
    lc = .cells(1,.columns.count).end(xltoleft).column
    lr = .cells(.rows.count,1).end(xlup).row
    ns = application.rounddown(lr/14.01) 'uses 14.01 to divide so you start the 15th row on a separate set
    for j = 3 to lc -2 step -2
        for i = 3 to ns+3 'just added the plus 3 as edit1
            k = i*14+3  'starts on row 3
            sheets(2).cells(i,j).value = varp(.range(.cells(k,j),.cells(k+13,j))
        next i
    next j
end with

【讨论】:

  • 在代码中,lc、lr 和 ns 属于 sheet1,而 sheet2 的行数与 sheet1 不同。因此 for 循环非常适合计算方差,但不适用于粘贴。所以我必须用另一个变量替换 sheet(2).cells(i,j).value 中的 'i'。我该怎么做?
  • @Aprnaa 对于工作表 2,您是否只有与方差集一样多的行?这就是我处理工作表 2 的方式,这就是为什么从第 3 行开始将 ns(组数)设为最大值(刚刚意识到我需要“ns+3”作为 i 的最大值。使用 lr(最后一行on sheet 1) 将用于查找 ns,这将指示使用 sheet 1 上的行直到最后一行。
  • 抱歉回复晚了。没有尝试过编辑的代码,但它是有道理的。很快就会告诉你结果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多