【问题标题】:How to multiply whole row in a range by number如何将范围内的整行乘以数字
【发布时间】:2019-11-27 02:10:59
【问题描述】:

我正在编写一个函数,它将数组中所选行中的所有值与数字 (x) 相加或相乘。但在部分

If method = 1 Then
 rng.Rows(row_number) = rng.Rows(row_number) * x
  ElseIf method = 2 Then
  rng.Rows(row_number) = rng.Rows(row_number) + x
  End If

我收到错误消息“运行时错误 424;需要对象”。

除了这段代码,我尝试使用 .Select 或 .entirerow.select,但它们都不起作用。

Function shiftMatrix(rg As Range, row_number As Long, x As Double, method As Integer) As Variant
    Dim rng As Variant
rng = rg.value
If method = 1 Then
 rng.Rows(row_number) = rng.Rows(row_number) * x
  ElseIf method = 2 Then
  rng.Rows(row_number) = rng.Rows(row_number) + x
  End If
  shiftMatrix = rng
  End Function
  Sub try() '     
Dim rng As Variant
 With Worksheets("Macro1")
        rng = shiftMatrix(Worksheets("Macro1").Range("A12:AX14"), 3, 0.5, 1)
    End With
End Sub

理想情况下,此函数将在 Locals 中显示一个数组“rng”,这样 rng(1) 和 rng(2) 将保持不变,而 rng(3) 将与“x”相加或相​​乘。

【问题讨论】:

  • 您是想将该行的值与x 相乘,还是行号本身相乘?
  • @TimStack 将它们乘以 x
  • 请定义“他们”
  • @TimStack 将该行中的所有值乘以 x

标签: arrays vba function


【解决方案1】:

看看有没有帮助

Option Explicit

Function shiftMatrix(rg As Range, row_number As Long, x As Double, method As Long) As Variant
Dim rng As Variant
Dim i As Long

rng = rg.value

If method = 1 Then
    For i = 1 To UBound(rng, 2)
        If IsNumeric(rng(row_number, i)) Then rng(row_number, i) = rng(row_number, i) * x
    Next i
ElseIf method = 2 Then
    For i = 1 To UBound(rng, 2)
        If IsNumeric(rng(row_number, i)) Then rng(row_number, i) = rng(row_number, i) + x
    Next i
End If

shiftMatrix = rng
End Function

rng 是一个 two-dimensional array,它包含来自您的 rg 范围变量的信息。 我创建了一个循环,该循环遍历该数组中的指定记录(行)并更新(相乘或相加)这些值。循环完成后,您将数组返回到 shiftMatrix 数组,然后您可以再次使用该数组填充一个范围。

从范围构造的二维数组是以 1 为基数,而常规数组的标准是以 0 为基数。

在您的代码中,您将数组视为仍然是一个范围对象。在数组中整体编辑一个范围,然后将该信息解析回该范围,比直接编辑 Excel 范围更快。

【讨论】:

  • 工作到第一个Next i。当我在那里按 F8 时,它会跳回到 rng(row_number, i) = rng(row_number, i) * x 并且我无法运行下一行。
  • 无。黄色高亮部分只是跳转到代码的前一行,而不是执行后面的行
  • 这几乎就像a ghost breakpoint
  • 您知道我该如何解决吗?如果它对您有用,那么问题可能出在潜艇上吗?
  • 修复在链接中。如果它对不起作用,那么问题出在你提供给它的信息上。一方面,尝试向函数单元格输入文本可能会导致问题,因为它们很难进行数学计算
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-04-02
  • 1970-01-01
  • 1970-01-01
  • 2016-01-08
  • 2021-12-02
  • 1970-01-01
相关资源
最近更新 更多