我有一个包含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行之后开始。
答案 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