Перебрать столбцы и заменить пропущенные значения - PullRequest
0 голосов
/ 06 июля 2018

Я пытаюсь перебрать различные столбцы и заменить пустую ячейку значением, но появляются две ошибки:

1.) Я знаю, что число должно = 8, но оно возвращается 9

2.) Последняя строка кода, ".value =", возвращает ошибку, определенную приложением или объектом

мои тестовые данные выглядят так, начиная с "D4":

1   1   1       
    2   2       
3       3       
4   4           
5   5   5       
6   6   6       
7   7   7       
8   8   8       
9   9   9       



Sub test()
Dim c As Integer, nextfree As Integer, rangesum As Integer


For c = 4 To 6
  If Range(Cells(4, c), Cells(12, c)).Count = 8 Then

    nextfree = Range(Cells(4, c), Cells(12, c)).Cells.SpecialCells(xlCellTypeBlanks).Row
    rangesum = Excel.WorksheetFunction.Sum(Worksheets("Sheet1").Range(Cells(4, c), Cells(12, c)))
    Worksheets("Sheet1").Range(Cells(nextfree, c)).Value = rangesum * 2

    End If
Next c
End Sub

1 Ответ

0 голосов
/ 06 июля 2018

Попробуйте:

Sub test()
Dim c As Integer, nextfree As Integer, rangesum As Integer

For c = 4 To 6
  If WorksheetFunction.CountA(Range(Cells(4, c), Cells(12, c))) = 8 Then
   nextfree = Range(Cells(4, c), Cells(12, c)).Cells.SpecialCells(xlCellTypeBlanks).Row
   rangesum = Excel.WorksheetFunction.Sum(Worksheets("Sheet1").Range(Cells(4, c), Cells(12, c)))
   Worksheets("Sheet1").Cells(nextfree, c).Value = rangesum * 2
End If
Next c
End Sub

1) Прежде всего используйте WorksheetFunction.CountA(Range(Cells(4, c), Cells(12, c))) для возврата 8. Он считает только непустые ячейки.Range(Cells(4, c), Cells(12, c)).Count считает каждую ячейку в диапазоне - даже если она пуста, и поэтому возвращает 9

2) Вам не нужно использовать диапазон там.Указание адреса ячейки непосредственно из метода Cells поможет.Cells(nextfree, c).Value вместо Range(Cells(nextfree, c).Value

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...