阵列比较

时间:2017-06-07 10:40:23

标签: arrays vba dynamic-arrays

我有一个包含8列和42行B2到I43的数组。我必须将此数组与同一工作表中的其他数组进行比较,以便每个数组都具有相同的值。我定义了array1 Rang('B2; I43“)并且需要比较相同大小的每个其他数组。如何在VBA中进行比较。 我的代码是

Sub driver()
Dim array1, array2, m, n
Set array1 = Range("B2,I43")
total_rows = 42
total_cols = 8
Set array2 = Range("B44:I85")

For i = 1 To total_rows
For j = 1 To total_cols
    If array1(i, j) = array2(i, j) Then
    array2.Cells(i, j).Interior.ColorIndex = 0
    ElseIf array1(i, j) <> array2(i, j) Then
    array2.Cells(i, j).Interior.ColorIndex = 3   
    End If
    Next j
    Next i          
End Sub

我希望array2指向其他值集。每个数组在42行之后开始。

2 个答案:

答案 0 :(得分:0)

您是否尝试过使用条件格式?通过将array2中的每个单元格与array1中的相同单元格进行比较,可以使用条件格式轻松解决建议的VBA代码,并使用颜色标记单元格是否相等

修改 我修改了你的代码。我没有使用两个范围,而是使用了&#34;行偏移&#34;对于工作表上的每个数组。然后,它将源数组中的单元格(代码中的array1)与找到 next_array_offset 行的单元格进行比较。进行比较后,偏移量将增加42.当没有更多值可以找到时,循环结束。

这是你在找什么?

Sub driver()
    Dim r As Integer
    Dim c As Integer
    Dim source_row As Integer
    Dim source_col As Integer
    Dim total_rows As Integer
    Dim total_cols As Integer
    Dim next_array_offset As Integer

    source_row = 2   ' row B
    source_col = 2   ' col 2
    total_rows = 42
    total_cols = 8
    next_array_offset = 42  ' distance in rows to next array

    Do Until IsEmpty(Cells(source_row + next_array_offset, source_col).Value)
        For r = 0 To total_rows - 1
            For c = 0 To total_cols - 1
                If Cells(source_row + r, source_col + c) = Cells(source_row + next_array_offset + r, source_col + c) Then
                    Cells(source_row + next_array_offset + r, source_col + c).Interior.ColorIndex = 0
                Else
                    Cells(source_row + next_array_offset + r, source_col + c).Interior.ColorIndex = 3
                End If
            Next
        Next
        next_array_offset = next_array_offset + 42
    Loop
End Sub

答案 1 :(得分:0)

您的主要任务是准确定义范围。在下面的代码中,我假设它每42行直到数据结束。您只需迭代42行测试数组并与参考数组进行比较。要做到这一点,你基本上需要两个行变量:一个用于测试数组,另一个用于参考数组。

最快的方法是将测试数据只读入一个大数组并创建两个范围(一个匹配匹配,一个匹配不匹配),然后在例程结束时为它们着色。

我不知道您的调色板(因此也不知道颜色索引),所以我使用了const timeout = require('callback-timeout'); const fs = require('fs'); fs.stat('/mnt/never-returns', timeout((err, stats)=>{ if(err) throw err; //happy with stats }, 2000, 'fs.stat did not return in 2 secs')); 属性。你可以调整它以适应。

.Color