【问题标题】:Setting Excel cell value based on another cell value using VBA使用 VBA 根据另一个单元格值设置 Excel 单元格值
【发布时间】:2019-05-12 15:24:33
【问题描述】:

我有以下电子表格。当单元格 B 中有 x 时,我需要使用我拥有的方程填充同一行中的 d 和 e 单元格。 如果 b 单元格中没有 x,我需要手动将值输入到单元格 d 和 e 中。

如何使我的代码不特定于行?

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim val As String
    val = Range("B3").Value
    If val = "x" Then
        Range("E3").Value = Range("d2").Value * Range("G2").Value
        Range("D3").Value = Range("D2").Value
    End If
End Sub

【问题讨论】:

  • 为什么不在公式的开头添加=if(ISBLANK(?这样的事情不需要 VBA。
  • 我猜你需要Worksheet_Change 而不是Worksheet_SelectionChange

标签: excel vba


【解决方案1】:

我不确定我是否理解正确,但如果你有一个参数:row = 3 你可以使用 Range("E" & row) 而不是 Range("E3")。

围绕您要修改的行更改“行”的位置放置一个循环。

希望有帮助!

【讨论】:

    【解决方案2】:

    您已经围绕 Worksheet_SelectionChange 事件创建了一个子过程。事实上,你需要 Worksheet_Change 并且你需要,

    • 禁用事件处理,这样您就可以将新值/公式写入工作表,而无需在自身之上运行 Worksheet_Change。
    • 循环遍历 Target 中的每个匹配单元格,以补偿 Target 可能不止一个单元格的情况,
    • 添加错误控制。

    重写:

    Option Explicit
    
    Private Sub Worksheet_Change(ByVal Target As Range)
    
        If Not Intersect(Target, Range("B:B")) Is Nothing Then
            On Error GoTo safe_exit
            Application.EnableEvents = False
            Dim t As Range
            For Each t In Intersect(Target, Range("B:B"))
                If LCase(t.Value) = "x" Then
                    'I've made these formulas relative to each target
                    'you may want to make some absolute references
                    t.Offset(0, 3) = t.Offset(-1, 2) * t.Offset(-1, 5)
                    t.Offset(0, 2) = t.Offset(-1, 2)
                Else
                    t.Offset(0, 2).resize(1, 2) = vbnullstring
                End If
            Next t
        End If
    
    safe_exit:
        Application.EnableEvents = True
    
    End Sub
    

    【讨论】:

      【解决方案3】:

      请尝试以下代码。 它遍历 B 列中的所有非空行并检查是否有值:x 如果是这样,它会填充您的公式。

      Sub new_sub()
       ' get last_row of data
      last_row = ActiveSheet.UsedRange.Rows.Count
      
      ' loop through all rows with data and check if in column B any cell contains value: x
      For i = 1 To last_row
          ' if there is any cell with value: x
          ' then add below formulas
          If Cells(i, 2).Value = "x" Then
              ' for column E: take value from row above for col D and G and multiple
              Range("E" & i).Value = Range("d" & i - 1).Value * Range("G" & i - 1).Value
              ' for column D: take value from row above
              Range("D" & i).Value = Range("D" & i - 1).Value
          End If
      Next i
      
      End Sub
      

      【讨论】:

        猜你喜欢
        • 2020-11-28
        • 2013-05-20
        • 1970-01-01
        • 2012-03-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-14
        相关资源
        最近更新 更多