如何在变量中存储一系列单元格

时间:2014-03-27 14:07:11

标签: vba excel-vba excel

我目前正在使用VBA作为excel中的项目使用Sudoku程序,我需要在变量中存储一系列单元格。

有些事情如下:

'''
dim grid as string 

grid = range("b3:j11")
'''

但是我不确定将网格调暗为什么。 我尝试过整数,字符串和范围,但网格似乎没有值。 我还假设我没有正确地将范围分配给变量

/////////////////////////////////

在回复后我将代码粘贴在这里。 duplicatecheck函数查看一系列单元格以检查它们是否超过某个数字,然后相应地突出显示单元格

由于我想查看不同范围的单元格以进行不同的检查,我需要将范围变为变量,以便可以重复使用该函数

然而,当在duplicatecheck函数中调用变量网格时,它没有值,并且它们不会检查单元格

Dim row As Integer

Dim col As Integer

Dim grid As Variant

Dim checkmark As Integer


Sub Rowcheck()

    checkmark = 1
    row = 0
    col = 0

    grid = range("b3:j3").Value

    For row = 0 To 8

        duplicatecheck

    Next row

End Sub

Function duplicatecheck()

Dim safe As Boolean

Dim check As Integer

Dim x As Integer

        ' check each number in a range for duplicates starting with 1
For check = 1 To 9
    If Application.Worksheet.Function.CountIf(Selection.Offset(row, col), range(grid)).check = 1      Then 
' if number is only found once
safe = True
    ElseIf Application.Worksheet.Function.CountIf(Selection.Offset(row, col), range(grid)).check < 1 Then
' if the number is found less than once in the range
safe = False
    ElseIf Application.Worksheet.Function.CountIf(Selection.Offset(row, col), range(grid)).check > 1 Then
' if the number is found more than once
Selection.Offset(row, x).range(grid).Interior.colour = vbBlue ' highlight the range red

        If checkmark = 1 Then
              For x = 0 To 8
                    Selection.Offset(row, x).range(geid).Value = check
                    Selection.Offset(row, x).range.ont.colour = vbRed
               Next x
        ElseIf checkmark = 2 Then
              For x = 0 To 8
                    Selection.Offset(x, col).range(grid).Value = check
                    Selection.Offset(x, col).range.ont.colour = vbRed

              Next x
              safe = False
                 error = True

    If safe = False Then
       complete = False
    End If

结束如果    万一  接下来检查 结束功能

1 个答案:

答案 0 :(得分:3)

将其存储在变体中

Dim vGrid as Variant
vGrid = range("B3:J11")

vGrid将是一个基于2D的数组,Dim 1 = rows,Dim2 = columns

例如,B3的内容将在vGrid(1,1)

编辑:您现在似乎正在使用Grid作为Range对象的字符串参数,并且您的CountIF出现问题。

设置选项显式,并选择要求变量声明,如我在评论中所述。

就您的CountIF语句而言,如果您检查的范围是在Grid中声明的范围,并且您的条件在Selection.Offset(row,col)中,则该行应如下所示:

If Application.WorksheetFunction.CountIf(Range(grid),Selection.Offset(Row, col)) = 1 Then ...

请注意,我已将使用Function更正为Worksheet对象的属性;将范围和标准参数按正确顺序排列;并删除了你在该函数末尾添加的.check。