【问题标题】:Array Difference IF/OR VBA Script数组差异 IF/OR VBA 脚本
【发布时间】:2021-09-14 16:39:11
【问题描述】:

有一个存储数组的脚本,如果它发生变化,它会发现差异。现在我需要它来获取该差异并检查相邻单元格是否是“约翰或玛丽”并将数组值差异乘以:(如果“约翰”=数组值差异。* PO#1)或(如果“玛丽” = 数组值差异 * PO#2)。这是我需要写入工作表 1 的最终值,现在只是数组值差异。价值。

模块 1 中的代码

Public myArr()
Public Sub PopulateMyArr()
    myArr = Sheet4.Range("I6:I500").Value
End Sub

本工作簿中的代码

Private Sub Workbook_Open()
    PopulateMyArr
End Sub

Sheet4 中的代码

Private Sub ToggleButton1_Click()

End Sub

Private Sub Worksheet_Calculate()

Dim keyCells As Range
On Error GoTo safeexit
Application.EnableEvents = False

Set keyCells = Me.Range("I6:I500")

If Worksheets("BA_Size").ToggleButton1.Value = True Then
Dim i As Integer
For i = 1 To UBound(myArr)
If keyCells(i, 1).Value <> myArr(i, 1) Then
   
nextrow = Sheet1.Cells(Sheet1.Rows.Count, "A").End(xlUp).Row + 1
Sheet1.Cells(nextrow, "A").Value = (keyCells(i, 1).Value - myArr(i, 1))
End If
Next i
End If
safeexit:
PopulateMyArr
Application.EnableEvents = True
End Sub

【问题讨论】:

  • 如何填充列 J:J(数组差异)?我在您的代码中看不到任何内容。而您的代码在Sheet1 中写入了差异,但目的是什么?您不能使用此记录,因为仅存在差异记录,并且您无法在使用的数组之一与此记录之间进行任何匹配...我是否遗漏了您的问题中的任何内容?
  • 数组差值用(keyCells(i, 1).Value - myArr(i, 1))计算,值写入Sheet 1。我需要它做的是写Sheet 1 if John - Array Value Diff。 * PO#1 或如果 Mary - 数组值差异。 * PO#2 .....我是否需要捕获更大的数组以添加到“IF”逻辑中?
  • 您向我们展示了一张图片,其中包含一些列中的数据。它们是真实数据还是只是您的想象?如果是真实数据,我们是否应该理解始终是初始数组与计算后得到的数组之间的差异?我可以向您展示如何创建另一个数组来保留您所描述的内容,但是如何将其与现有情况相关联?我问你关于 J:J 的价值观,但你什么都没回答……
  • 真实数据。是的,例如在第一行列中,它在图片中显示 86,但在列 J 中相差 10。因此,列 I 中的原始值可能是一秒钟前的 76 ......等等沿着 I&J 列的行。代码的差异很大。我需要的是,不断计算差异以获取这些差异,并由 PO#s 根据是约翰还是玛丽来 * 它们。
  • 我问你J:J列的差异是如何记录在这个列中的。

标签: arrays excel vba if-statement rtd


【解决方案1】:

未经测试:

Private Sub Worksheet_Calculate()

    Dim keyCells As Range, i As Long, diff, cKey As Range
    
    'exit if togglebutton not on
    If Not Worksheets("BA_Size").ToggleButton1.Value Then Exit Sub
    
    On Error GoTo safeexit
    Application.EnableEvents = False
    
    Set keyCells = Me.Range("I6:I500")
    nextrow = Sheet1.Cells(Sheet1.Rows.Count, "A").End(xlUp).Row + 1
    
    For i = 1 To UBound(myArr)
        Set cKey = keyCells(i, 1)
        If cKey.Value <> myArr(i, 1) Then
            diff = (cKey.Value - myArr(i, 1))
            'check value in Col K
            Select Case cKey.EntireRow.Columns("K").Value
                Case "John": diff = diff * cKey.EntireRow.Columns("N").Value
                Case "Mary": diff = diff * cKey.EntireRow.Columns("O").Value
                Case Else: diff = 0
            End Select
            Sheet1.Cells(nextrow, "A").Value = diff
            nextrow = nextrow + 1
        End If
    Next i
      
safeexit:
    PopulateMyArr
    Application.EnableEvents = True
End Sub

猜你喜欢
  • 2017-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-27
  • 2014-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多