使用VBA

时间:2016-03-29 13:24:30

标签: excel vba excel-vba excel-2010

TL; DR所以我唯一的问题是我需要积累细胞值,可能整个解释都没有必要,但如果你仔细阅读,你会更好地掌握我的情况。

我已经四处寻找并且没有找到任何关于这种特殊情况的信息。 我有这个excel表http://i.imgur.com/kDNvwL3.png,其中写出了第一列/行索引。 (我删除了不必要的东西以避免混淆)

代码可能令人困惑,但我会以书面形式解释代码的工作方式,就像我在运行它时可以查看代码一样。最后会提到这个问题。

首先是代码:

   ws1.Activate
   Dim BLIrows As Integer, A As Range
   Dim newRow As Integer


   For BLIrows = 41 To 52
     For newRow = 14 To 30
       With ws1
         If .Cells(BLIrows, 1).Value > 1 Then                     'Make sure to only do this for non empty cells
          Dim x As Long                                                   '(they will be longer than 1 char)
          Dim y As String
          Dim element As Variant
          For Each element In .Cells(BLIrows, 1)
            y = .Cells(BLIrows, 1).Value                             'Save it's value for the search in the EFG14 list
            If y = .Cells(newRow, 5).Value Then                 'The search in the EFG14 list
              x = .Cells(newRow, 4).Value                          'Save the number when found an identical value 
                                                                                  '<-- MISSING CODE / PROBLEM
                 If y = .Cells(BLIrows, 1).Value Then             'Make sure to put the number in the correct row
                    .Cells(BLIrows, 5).Value = x                     'Putting the number
                 End If
            End If
          Next element
         End If
         If Not .Cells(BLIrows, 5).Value > 0 Then  'If anything (like Auto-pilot site) isn't in the EFG14 column
         .Cells(BLIrows, 5).Value = 0                   'then give it a 0
         End If
       End With
     Next
   Next

以下是用文字写的:

代码执行,它从Cell A41开始。它首先找到“P4250”,因为它是本专栏中的第一个,但是我将专注于“P33-0236”,因为它只出现在EFG14列表中一次(你会明白为什么以后)。因此代码在Cell A44找到“P33-0236”。在具有该值之后,它现在将在EFG14列中搜索它。正如您所怀疑的那样,它会在单元格EFG21中找到它的相同值。然后代码保存写在同一行但不同列的数字,在本例中为单元格D21。使用D21中的数字,代码现在搜索A40列(它开始的位置)以获取检索整数值的值(显然是“P33-0236”)并在A44中找到它,这是因为数字需要放在同一列中在这种情况下,相对于A44的行但不同的列。因此它在A44中找到“P33-0236”并移动到同一行中的不同列(E44)。这里它将粘贴在D列中找到的整数值。

基本上这解释了我的vba代码的试运行。

现在问题

问题是当整数值被复制到Cost列(E40)时,它不会累积值。例如,如果代码用P4250执行,它将在EFG14列中找到“P4250”三次。那么它的等价成本列中的值实际应该是,28440 + 47400 + 47400 = 123240但是它只有47400(因为它是最后一个“P4250”)。

正如标题所示,我希望在将它们放入成本列时添加相同“P”数字的值。

不要专注于如何编写代码 - 它可以工作 - 除非它是主要的东西。唯一重要的是累积代码。

1 个答案:

答案 0 :(得分:2)

如果您希望该值是当前值加上新找到的值的总和,则在将新值分配给单元格之前,您的代码需要将它们一起添加。

就像现在一样,看起来你只是将新值分配给单元格。

也许是这样的(假设这是你想要的值加法的地方):

.Cells(BLIrows, 5).Value = .Cells(BLIrows, 5).Value + x