如何从不同的工作表中添加值,并保留指向工作表+单元格的公式?

时间:2019-01-11 14:06:51

标签: excel vba formula add worksheet

我试图将来自不同工作表(工作表2至5)的值添加到主工作表(工作表1)中。在工作表1中,我希望单元格包含指向不同工作表的正确公式(如果可能)。

通常是这样的:

='Sheet2'!D5+'Sheet3'!D165

我的所有工作表都有不同的产品,但是有些工作表包含相同的产品。因此,我想对它们全部进行搜索,然后将它们添加到我的主表中(表1)。

Sub UpdateMainSheet()
' Kode for å Oppdatere Plukkeliste Alle Artikler Summert
Dim AktivtArk As String
Dim AktivtArkNavn As String
Dim K As Integer
Dim Count As Integer

'Line of code to delete old data in Main Sheet:
Worksheets("Sheet1").Range("A2:H10000").Clear

AktivtArkOverskrift = "List of Articles from Sheet 2 to 5"
'Creates Headline in Main Sheet:
eRow = Sheet1.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row
Worksheets("Sheet1").Cells(eRow, 1) = AktivtArkOverskrift
Worksheets("Sheet1").Cells(eRow, 1).Font.Bold = True

'Script to check and gather data from the other sheets (Sheet 2, 3, 4 and 5):
For K = 2 To 5
    'For loop to check each line in sheet "K"
    For I = 2 To 1000
        'If function to check if the cell I in column F is empty, if so it_jumps to next row and do the same check:
        If Worksheets(K).Cells(I, 6) > 0 Then
        Count = 0
            'For loop to check if I already have a row in the Main Sheet with the article I'm checking:
            For L = 2 To 1000
                'If function to check if the articles have the same article number:
                If Worksheets(K).Cells(I, 1) = Worksheets("Sheet1").Cells(L, 1) Then
                    'Line of code that are supposed to ADD the values that is currently in the Main Sheet, togheter with the value in Sheet K:
                    Worksheets("Sheet1").Cells(I, 4).Formula = Worksheets("Sheet1").Cells(I, 4) + Worksheets(K).Cells(L, 4)
                End If
            Next L
        End If
    Next I
Next K

End Sub

所以我需要在代码中修复的部分是此部分(位于For循环内最远的位置):

Worksheets("Sheet1").Cells(I, 4).Formula = Worksheets("Sheet1").Cells(I, 4) + Worksheets(K).Cells(L, 4)

并使其在所需的单元格中创建一个公式,如下所示:

='Sheet2'!D5+'Sheet3'!D165

它还必须能够添加另一个单元格,因为循环正在遍历可能包含相同产品的多个图纸(第2至5页)。 即我只希望在主表中为每种产品添加一行。

2 个答案:

答案 0 :(得分:1)

我最终找到了解决方案。 似乎我已经在循环中切换了L和I,这导致值无法添加到gheter中。

以下代码(我没有翻译成英语,但是如果有人想要/需要它,可以执行此操作)解决了我的问题,并给了我表2到5中的值,这些值是按表1中的产品排序的:

Sub OppdaterePlukkelisteSummert()
'Kode for å Oppdatere Plukkeliste Alle Artikler Summert
Dim AktivtArk As String
Dim AktivtArkNavn As String
Dim K As Integer
Dim Teller As Integer
Dim value1 As Integer
Dim value2 As Integer


'Sletter Plukklisten for å oppdatere og sortere på nytt:
Worksheets(1).Range("A2:H10000").Clear


'HENTING AV DATA FRA ARKET "K":
AktivtArk = "Artikler Summert fra Alle Ark"
AktivtArkOverskrift = "Artikler Summert fra Alle Ark"
'Setter inn Overskrift som Forteller kva ark utstyret kommer fra:
eRow = Sheets(1).Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row
Worksheets(1).Cells(eRow, 1) = AktivtArkOverskrift
Worksheets(1).Cells(eRow, 1).Font.Bold = True
'Sjekker hvilke/hvilket rader/utstyr som skal plukkes, og legger det inn i "Ark1":
For K = 2 To 5
    For I = 2 To 1000
        If Worksheets(K).Cells(I, 6) > 0 Then
        Teller = 0
            For L = 2 To 1000
                If Worksheets(K).Cells(I, 1) = Worksheets(1).Cells(L, 1) Then
                    value1 = Worksheets(1).Cells(L, 4)
                    value2 = Worksheets(K).Cells(I, 4)
                    Worksheets(1).Cells(L, 4) = value1 + value2
                    Worksheets(1).Cells(L, 6) = value1 + value2
                Else
                    Teller = Teller + 1
                End If
            Next L
            If Teller > 998 Then
                eRow = Sheets(1).Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row
                For J = 1 To 11
                    Worksheets(1).Cells(eRow, J) = Worksheets(K).Cells(I, J)
                Next J
                Worksheets(1).Cells(eRow, 6).Font.Color = RGB(0, 150, 0)
                Worksheets(1).Cells(eRow, 7).Font.Color = RGB(0, 150, 0)
            End If
        End If
    Next I
Next K

Worksheets(1).Range("A2").Select
End Sub

我希望这对其他人有用:-) 感谢所有评论中的帮助和建议!

答案 1 :(得分:1)

我将用这个简单的例子来说明:

I = 1 'for example

For K = 2 To 5
    Worksheets("Sheet1").Cells(I, 4).Value = Worksheets("Sheet1").Cells(I, 4).Value + _
        WorksheetFunction.SumIf(Worksheets(K).Range("A:A"), "Bananas", Worksheets(K).Range("D:D"))
Next K