首页 > 解决方案 > 如何根据来自另一个单元格范围的输入对二维单元格范围进行编号?

问题描述

我有一个由 1s 和 0s 组成的输入矩阵,我需要创建一个相同大小的新矩阵,其中与 0s 对应的所有单元格首先编号为 1 到 n,然后与其中有 1s 的单元格对应的单元格为在其中包含 0 的单元格之后编号。

任何人都可以提供任何帮助将不胜感激。

输入矩阵      输出矩阵

标签: vba

解决方案


您可以使用Worksheet.Function.CountIf一次完成整个范围。

Cells.Clear
For i = 1 To 10
  For j = 1 To 10
    Cells(i, j) = Int(Rnd * 2)
  Next j
Next i
no0 = WorksheetFunction.CountIf([a1:j10], 0)
c0 = 1
c1 = 1
For i = 1 To 10
  For j = 1 To 10
    If Cells(i, j) = 0 Then
      Cells(i + 11, j) = c0
      c0 = c0 + 1
    Else
      Cells(i + 11, j) = no0 + c1
      c1 = c1 + 1
    End If
  Next j
Next i

也有空格:

Dim no0 As Integer, c0 As Integer, c1 As Integer, i As Integer, j As Integer
Dim arrin(), rng As Range, c As Range
Cells.Clear
Set rng = [E8:H13]
Randomize
For Each c In rng
c.Value = Int(Rnd * 3)
If c.Value = 2 Then c.Value = ""
Next c
arrin = rng
no0 = WorksheetFunction.CountIf(rng, 0)
c0 = 1
c1 = 1
For i = 1 To rng.Rows.Count
For j = 1 To rng.Columns.Count
If arrin(i, j) = "" Then GoTo exitJ
If arrin(i, j) = 0 Then
Cells(i + 7, j + 9) = c0
c0 = c0 + 1
Else
Cells(i + 7, j + 9) = no0 + c1
c1 = c1 + 1
End If
exitJ: Next j
Next i

推荐阅读