#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. если я могу получить помощь по этому