Петли рабочего листа VBA - PullRequest
0 голосов
/ 26 апреля 2019

В настоящее время я работаю с книгой, содержащей 34 различных вкладки.Я пытаюсь извлечь ежемесячные данные из каждой вкладки и перенести их в ежедневные цифры для каждого конкретного города.Я поместил все даты в 2019 году в столбцы, чтобы представить их в виде ежедневных цифр.(См. Пример в img ниже)

How My template looks like

Каждая вкладка содержит данные для каждого конкретного города.Я всегда хочу извлечь данные, присутствующие в строке 20 из столбца 4-15 в каждой вкладке для каждого конкретного города.(см. второе изображение, выделенное желтым цветом ниже)

Data that Im trying to extract

Public Sub CreateArray()



Dim myArrayOfMonths(11) As Double

Dim currentWorkbook As Workbook
Dim currentSheet As Worksheet
Dim otherSheet As Worksheet

Dim i As Integer

Dim r As Integer
Dim c As Integer
Dim j As Integer


Set currentWorkbook = ActiveWorkbook
Set otherSheet = currentWorkbook.Worksheets("Output")

i = 1

For Each currentSheet In currentWorkbook.Worksheets

r = 20
j = 0

For c = 4 To 15

    myArrayOfMonths(j) = ActiveSheet.Cells(r, c)
    
    j = j + 1

Next c

Debug.Print myArrayOfMonths(0)

   
  i = i + 1

Next currentSheet


Set currentSheet = Nothing
Set currentWorkbook = Nothing







End Sub

В моем коде я пытаюсь просмотреть все вкладки с помощью цикла и с помощью 2-го цикла проверить дату (строка 16, столбцы с 4 по 15) ираспакуйте его в моем шаблоне (похоже на vlookup) К сожалению, он никогда не проходит через первую вкладку, так как по какой-то причине я всегда = 0.

Не могли бы вы посоветовать?

Ответы [ 3 ]

0 голосов
/ 26 апреля 2019

Сможете ли вы сделать что-то подобное?

Option Explicit

Public Sub PopulateOutput()

    Dim outputSheet As Worksheet
    Dim i As Integer

    Set outputSheet = ActiveWorkbook.Worksheets("Output")

    ' starting at index 2 since output sheet looks like index 1
    For i = 2 To ActiveWorkbook.Worksheets.Count
        With ActiveWorkbook.Worksheets(i)
            outputSheet.Range("B" & i & ":M" & i).Value = .Range("D20:O20").Value
        End With
    Next

End Sub
0 голосов
/ 26 апреля 2019

Это соответствует вашим потребностям?

Public Sub CreateArray()

    Dim myArrayOfMonths(11) As Double

    Dim currentWorkbook As Workbook
    Dim currentSheet As Worksheet
    Dim otherSheet As Worksheet

    Dim r As Integer
    Dim c As Integer

    Set currentWorkbook = ActiveWorkbook
    Set otherSheet = currentWorkbook.Worksheets("Output")

    For Each currentSheet In currentWorkbook.Worksheets

        r = 20

        For c = 4 To 15
            myArrayOfMonths(c - 4) = myArrayOfMonths(c - 4) + currentSheet.Cells(r, c)
        Next c

    Next currentSheet

    otherSheet.Range("B1:M1").Value = myArrayOfMonths

    Set currentSheet = Nothing
    Set currentWorkbook = Nothing

End Sub
0 голосов
/ 26 апреля 2019

Используйте currentSheet.Cells(r,c) вместо ActiveSheet

или используйте currentSheet.Activate, а затем myArrayOfMonths(j) = ActiveSheet.Cells(r, c), но старайтесь избегать ActiveSheet.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...