Консолидация таблиц из нескольких рабочих листов

#arrays #vba #concatenation

#массивы #vba #объединение

Вопрос:

 Option Explicit

Sub Macro70()

Dim wb As Workbook
Dim ws As Worksheet
Dim ws2 As Worksheet
Dim sheets_Count As Integer
Dim sheets_Name() As String
Dim i As Integer
sheets_Count = Sheets.Count

ReDim sheets_Name(0 To sheets_Count - 1)

For i = 1 To sheets_Count
   sheets_Name(i - 1) = "'" amp; ActiveWorkbook.Sheets(i).Name amp; "'!R1C1:R17C2"
Next i

Set wb = ThisWorkbook
Set ws2 = wb.Sheets.Add()

With ws2
    .Range("A1").Consolidate sheets_Name, xlSum, True, True, False
End With

End Sub


Sub Macro71()

Dim wb As Workbook
Dim ws As Worksheet
Dim ws2 As Worksheet
Dim sheets_Count As Integer
Dim sheets_Name() As String
Dim i As Integer
sheets_Count = Sheets.Count

ReDim sheets_Name(0 To sheets_Count - 1)

For i = 1 To sheets_Count
   sheets_Name(i - 1) = "'" amp; ActiveWorkbook.Sheets(i).Name amp; "'!R24C1:R35C2"
Next i

Set wb = ThisWorkbook
Set ws2 = wb.Sheets.Add()

With ws2
    .Range("A24").Consolidate sheets_Name, xlSum, True, True, False
End With

End Sub


Sub Macro72()

Dim wb As Workbook
Dim ws As Worksheet
Dim ws2 As Worksheet
Dim sheets_Count As Integer
Dim sheets_Name() As String
Dim i As Integer
sheets_Count = Sheets.Count

ReDim sheets_Name(0 To sheets_Count - 1)

For i = 1 To sheets_Count
   sheets_Name(i - 1) = "'" amp; ActiveWorkbook.Sheets(i).Name amp; "'!R39C1:R50C2"
Next i

Set wb = ThisWorkbook
Set ws2 = wb.Sheets.Add()

With ws2
    .Range("A39").Consolidate sheets_Name, xlSum, True, True, False
End With

End Sub
  

у меня это работает идеально, но последняя проблема, о которой я должен сказать, заключается в том, что она генерирует новый лист. могу ли я использовать один и тот же лист для сбора данных для всех этих таблиц.
я попытался поместить ws2.Name = «консолидированный» для всех трех, но он показывает ошибку. я хочу, чтобы подразделы 71 и 72 были помещены на тот же лист, что и подраздел 70. и огромное спасибо за то, что так помогли мне.

Комментарии:

1. ошибка, которую он выдает мне, заключается в том, что не удается открыть исходный файл консолидации «sheets_name (i)»

2. Я вижу, вы используете sheet_Name (i) и sheets_Name(i) … одна из них неверна? Указано ли в ошибке, в какой строке оно находится? (пожалуйста, отредактируйте свой вопрос вместо добавления комментария.)

3. ЭТО «sheets_Name(i)»

4. @DavidHempy когда я запускаю код, он выдает следующую ошибку: не удается открыть исходный файл консолидации «sheets_name (i)», хотя в моей активной рабочей книге есть несколько листов с именами sheet4, sheet4 (2), sheet8, sheet9 и т. Д

Ответ №1:

Я думаю, вам нужно что-то более похожее на это (непроверенное)

 sheets_Count = Sheets.Count

ReDim sheets_Name(0 to sheets_Count-1)

For i = 1 To sheets_Count
   sheets_Name(i-1) = "'" amp; ActiveWorkbook.Sheets(i).Name amp; "'!R10C1:R26C2"
Next i

Set wb = ThisWorkbook 
Set ws2 = wb.Sheets.Add()

With ws2
    .Range("A1").Consolidate sheets_Name, xlSum, True, True, False
End With
  

Смотрите:

https://learn.microsoft.com/en-us/office/vba/api/excel.range.consolidate

Вот пример по этой ссылке:

 Worksheets("Sheet1").Range("A1").Consolidate _ 
            Sources:=Array("Sheet2!R1C1:R37C6", "Sheet3!R1C1:R37C6"), _ 
            Function:=xlSum
  

РЕДАКТИРОВАТЬ — если вы хотите добавить несколько диапазонов с каждого листа, вы можете попробовать это:

 Dim n
sheets_Count = Sheets.Count

ReDim sheets_Name(0 To (sheets_Count * 2) - 1)
n = 0
For i = 1 To sheets_Count
   sheets_Name(n) = "'" amp; ActiveWorkbook.Sheets(i).Name amp; "'!R10C1:R26C2" 
   sheets_Name(n 1) = "'" amp; ActiveWorkbook.Sheets(i).Name amp; "'!R40C1:R50C2"
   n = n   2
Next i
  

Комментарии:

1. я пробовал это, это выдает мне ошибку, в которой говорится, что нижний индекс вне диапазона указывает на это «sheets_Name (i) = «‘» amp; ActiveWorkbook. Листы (i). Имя amp; «‘!R10C1:R26C2»

2. и если бы я должен был добавить другие диапазоны, добавил бы я его рядом с «‘!R10C1: R26C2» с запятыми?

3. Я не знаю, работает ли это с диапазонами нескольких регионов — вам придется это протестировать.

4. Если вы хотите, чтобы кто-нибудь мог это прочитать, вам следует отредактировать свой вопрос, чтобы добавить его (вместе с тем, какую ошибку он вам выдает и в какой строке)

5. если я могу получить помощь по этому