Добавление чисел в столбец через Excel VBA - PullRequest
0 голосов
/ 19 октября 2019

Я новичок в VBA, и я написал этот код, который не работает, как ожидалось. На самом деле это добавление чисел в столбце, но не добавление последней ячейки, поэтому, например, если есть три числа 1,2 и 3, это суммирует 1 и 2 и игнорирует значение в третьей ячейке, но когда я добавляю четвертое число 1,2,3 и 4 он добавляет 1,2 и 3 и оставляет значение в последней ячейке, и я не понимаю, почему.

Sub add()
  Dim Rng As Range, a As Integer
  Set Rng = Range("b2", Range("b2").End(xlDown))
  Counter = Rng.Count
  a = 0
  For i = 2 To Counter  a = a + Cells(i, "B").Value
    Next i
    ActiveCell.Value = a
End Sub

Может кто-нибудь помочь, пожалуйста?

Ответы [ 3 ]

1 голос
/ 19 октября 2019

Допустим, Counter = Rng.Count дает 4, и вы начинаете свой i = 2 (возможно, чтобы сохранить заголовок вашего столбца). Ваш код не будет печатать 4 цифры, потому что вы начинаете цикл с 2.

Счетчик должен выглядеть следующим образом: Counter = Rng.Count + 1

, и он будет работать

0 голосов
/ 19 октября 2019

Это потому, что .End (xlDown) - работает как CTRL + downarrow и заканчивается на последней не пустой или первой не пустой ячейке в столбце. Поэтому, когда вы удаляете значение в определенной строке, оно «нарушает» диапазон. Если вы хотите просканировать все строки, независимо от того, пуст он или нет, используйте цикл из первой строки, и вы получите сумму всего диапазона столбцов (конечно, начиная со строки 2):

Sub SumWholeColumn()
'give the sum of all numbers in column B, starting from B2
Dim i, a As Long
Dim column, addr As String

  a = 0
  column = "b"

  For i = 2 To Rows.Count
     addr = column & i
     a = a + Cells(i, "B").Value
   Next i

   ActiveCell.Value = a
End Sub

Если ваш диапазон фиксированный, вы можете ускорить процесс расчета, установив диапазон вручную. В противном случае он будет сканировать ВСЕ строки. Например, если вы знаете, что ваши случайные числа не будут превышать строку 1000, вы можете использовать что-то вроде этого:

Sub SumWholeColumn()
'give the sum of all numbers in column B, starting from B2
Dim i, a As Long
Dim maxRows As Integer
Dim column, addr As String

  a = 0
  column = "b"
maxRows = 1000

  For i = 2 To maxRows
     addr = column & i
     a = a + Cells(i, "B").Value
   Next i

   ActiveCell.Value = a
End Sub
0 голосов
/ 19 октября 2019

Ну, я думаю, что в первый раз, когда я не понял вашу точку зрения, я подумал, что вы хотели бы вставить числа в столбце B от 0 до последней строки, начиная с адреса B2. Если это так - это будет работать:

Sub add()
Dim i, a As Long
Dim column As String
Dim addr As String

a = 0
column = "b"

    For i = 2 To Rows.Count
    addr = column & i
    ActiveSheet.Range(addr).Value = a
    a = a + 1
    Next i

End Sub

, но сегодня я понял, что ваш заголовок «Добавление чисел в столбце через Excel VBA» неверен и, вероятно, вы пытаетесь достичь чего-то другого (потому что вы пытаетесьуказать какое-либо значение в ActiveCell?) и если да, пожалуйста, исправьте меня: у вас есть некоторые цифры в столбце B, и вы хотели бы указать в ActiveCell сумму всех этих чисел? Ответ для этого будет:

Sub SumAll()
'give the sum of all numbers in column B, starting from B2
Dim Rng As Range
Dim a, i As Long

Set Rng = Range("b2", Range("b2").End(xlDown))
Counter = Rng.Count + 1

  a = 0
  For i = 2 To Counter
    a = a + Cells(i, "B").Value
  Next i

  ActiveCell.Value = a
End Sub

Вам нужно использовать «a» как Long, потому что Integer до 2147483647 и если вы заполните все строки в столбце, начиная с 0 и итерируячисло на 1 до последней строки, и сумма значений, которые он вам даст, 2147319811 - вне целочисленной области.

Значение i может быть целым (не длинным, как в моем примере), потому что "i" maxзначение не будет выходить за рамки (количество строк в рабочей книге ограничено 1048576). Вы можете сменить i на Integer и сэкономить несколько КБ памяти:)

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