【问题标题】:Excel VBA multi cell editing using rangeExcel VBA多单元格编辑使用范围
【发布时间】:2018-05-17 21:25:47
【问题描述】:

下面的代码所做的是获取一列数据并通过在电子表格中移动它来将其除以 100。这里的问题是有多个(不连续的)数据列需要除以 100(例如)。

LastRow = Range("K" & Rows.Count).End(xlUp).Row
Columns("K:K").Select
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
ActiveWindow.SmallScroll Down:=18

Range("K15").Select
ActiveCell.FormulaR1C1 = "=RC[1]/100"
Range("K15").AutoFill Destination:=Range("K15:K" & LastRow)

Range("K15:K" & LastRow).Select
Selection.Copy
Range("L15").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
Columns("K:K").Select

有时有连续的列(例如列K到N)需要除以100。(我认为)代码设置的方式,我不能一次划分多列数据...

我该怎么做呢?如果有一种完全不同的方式来编码这个方法以便它适用于多个单元格,我就是耳朵(或者在这种情况下是眼睛)

-杰克

【问题讨论】:

  • 工作表上是否有任何地方可以存储 100 ? PasteSpecial 操作划分可能会更好。更高级的是使用数组。
  • 是在最后一个Columns("K:K")之后的下一步。选择删除K列?

标签: vba excel


【解决方案1】:

使用值数组,处理归约,然后将新的归约值批量加载到工作表中。

dim i as long, j as long, arr as variant

with worksheets("sheet1")
    arr = .range(.cells(1, "K"), .cells(.rows.count, "N").end(xlup)).value2
    for i=lbound(arr, 1) to ubound(arr, 1)
        for j=lbound(arr, 2) to ubound(arr, 2)
            arr(i, j) = cdbl(arr(i, j) / 100)
        next j
    next i
    .cells(1, "K").resize(ubound(arr, 1), ubound(arr, 2)) = arr
end with

此方法假定您只是插入一列来帮助处理;它会覆盖所有内容。

【讨论】:

    【解决方案2】:

    你可以使用PasteSpecial():

    Range("A1").Copy ' say cell "A1" content is 100
    Range("K1", Cells(Rows.Count, "N").End(xlUp)).PasteSpecial Paste:=xlPasteValues, Operation:=xlDivide
    

    Range("A1") 更改为您存储要除以的值的任何单元格

    【讨论】:

      猜你喜欢
      • 2015-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多