列求和Excel VBA

时间:2017-07-27 15:22:31

标签: excel vba excel-vba

这个问题有点复杂(我觉得),所以我会尽力解释这个问题。

基本上我想要做的是向下移动范围中的每一列,向上添加每个单元格值(获取列的总和),然后将其添加到数组中。但是,在测试数组中保存的值时,它总是为0.是否有更好的方法来执行此操作?

这是我目前的代码:

Dim sumHoldings(1 To 36) As Double
k = 1

For Each rep In repNames

    If rep <> vbNullString Then
    Worksheets(rep).Activate
    Dim i As Integer
    Dim sumHolder As Double

    For i = 3 To 6

        Columns(i).Select

        For Each rangeCell In Selection

            If rangeCell <> vbNullString Then

                sumHolder = rangeCell.Value + sumHolder

                Else:
                    sumHoldings(k) = sumHolder  'this current method will keep overwriting itself
                    k = k + 1
                    Exit For

            End If

        Next rangeCell
    Next i
    End If
Next rep

这是我想要做的事情的直观表示: enter image description here

enter image description here

非常感谢任何帮助,谢谢!

2 个答案:

答案 0 :(得分:2)

这是你需要做的。

    $(document).on("click", ".view_me", function (e) {

        //e.preventDefault();

        var _self = $(this);
        userId = _self.data('id');

        var newLink = '/users/view/' + userId
        $(".view_me").prop("href", "https://www.google.com");

        console.log(newLink);

   });

数组arrResults将得到每列的总和。请务必将Option Explicit Public Sub TestMe() Dim myRng As Range Dim myCell As Range Dim myCol As Range Dim arrResults As Variant Dim dblSum As Double Dim lngCounter As Long Set myRng = Range("R17:T25") ReDim arrResults(myRng.Columns.Count -1) For Each myCol In myRng.Columns dblSum = 0 For Each myCell In myCol.Cells dblSum = dblSum + myCell Next myCell arrResults(lngCounter) = dblSum lngCounter = lngCounter + 1 Next myCol End Sub 修改为对您有意义的内容。

代码完全按照您的描述工作 - 它使用Set myRng = Range("R17:T25")来获取范围中的每一列,并迭代它。然后它将每个单元格放在myRng.Columns中,然后再次迭代。因此,复杂性为O2

答案 1 :(得分:0)

你得到零的原因是因为你的if语句允许它们在你的数组中没有任何内容时将空单元存储到你的数组中。只需将所有单元格汇总后移动存储部分:

For Each rangeCell In Selection

If rangeCell <> vbNullString Then

 sumHolder = rangeCell.Value + sumHolder

 End If

Next rangeCell
   sumHoldings(k) = sumHolder  
    k = k + 1
Next i
End If