Несоответствие типов Vba Excel

#excel #excel-2007 #vba

#excel #excel-2007 #vba

Вопрос:

Я хотел бы посчитать определенные числа из массива, определенного внутри функции, из диапазона ячеек. Вот мой код:

 Function countNumbers(cell As Range)

  Dim rCell As Range
  Dim myArray(25) As Integer
  myArray(0) = 1
  myArray(1) = 2
  myArray(2) = 3
  myArray(3) = 4
  myArray(4) = 5
  myArray(5) = 11
  myArray(6) = 12
  myArray(7) = 13
  myArray(8) = 14
  myArray(9) = 15
  myArray(10) = 21
  myArray(11) = 22
  myArray(12) = 23
  myArray(13) = 24
  myArray(14) = 25
  myArray(15) = 31
  myArray(16) = 32
  myArray(17) = 33
  myArray(18) = 34
  myArray(19) = 35
  myArray(20) = 41
  myArray(21) = 42
  myArray(22) = 43
  myArray(23) = 44
  myArray(24) = 45

  For Each rCell In cell.Cells
      For i = LBound(myArray) To UBound(myArray)
          If rCell.Value = myArray Then
              countNumbers = countNumbers   1
          End If
      Next i
  Next rCell

End Function
  

Ошибка, которую я получаю, — это «Несоответствие типов» в первой строке кода. Я использую Ms-Excel 2007. Спасибо

Комментарии:

1. внутри вашего цикла измените свою строку If rCell.Value = myArray Then If rCell.Value = myArray(i) Then так, как вы пытаетесь проверить критерии каждой ячейки внутри массива

2. Кроме того, измените Dim myArray(25) As Integer значение to Dim myArray(24) As Integer , иначе последний элемент будет пустым, а все пустые ячейки войдут в ваши If критерии.

3. @ShaiRado можете ли вы добавить свои исправления в качестве ответа, чтобы принять его, пожалуйста!

Ответ №1:

 Function countNumbers(cell As Range)

  Dim rCell As Range
  Dim myArray(24) As Integer

  myArray(0) = 1
  myArray(1) = 2
  myArray(2) = 3
  myArray(3) = 4
  myArray(4) = 5
  myArray(5) = 11
  myArray(6) = 12
  myArray(7) = 13
  myArray(8) = 14
  myArray(9) = 15
  myArray(10) = 21
  myArray(11) = 22
  myArray(12) = 23
  myArray(13) = 24
  myArray(14) = 25
  myArray(15) = 31
  myArray(16) = 32
  myArray(17) = 33
  myArray(18) = 34
  myArray(19) = 35
  myArray(20) = 41
  myArray(21) = 42
  myArray(22) = 43
  myArray(23) = 44
  myArray(24) = 45

  For Each rCell In cell.Cells
      For i = LBound(myArray) To UBound(myArray)
          If rCell.Value = myArray(i) Then
              countNumbers = countNumbers   1
          End If
      Next i
  Next rCell

End Function