2014-12-17 2 views
1

У меня есть книга объемом около 14 листов. Первый лист «Сводка» имеет следующую структуру:Вставить значение в столбце X, если столбец A соответствует значению

Electric Heat Comm. | Month1 | Month2 | Month 3 |  etc. 
NameA    | CopiedValue | CopiedValue | CopiedValue | CopiedValue 
NameB    | CopiedValue | CopiedValue | CopiedValue | CopiedValue 
NameC    | CopiedValue | CopiedValue | CopiedValue | CopiedValue 
        |  SUM  |  SUM  |  SUM  |  SUM 
BLANK ROW ----- BLANK ROW ----- BLANK ROW ----- BLANK ROW ----- BLANK ROW ------ 
Gas Heat Comm.  | Month1 | Month2 | Month 3 |  etc. 
NameA    | CopiedValue | CopiedValue | CopiedValue | CopiedValue 
NameB    | CopiedValue | CopiedValue | CopiedValue | CopiedValue 
NameC    | CopiedValue | CopiedValue | CopiedValue | CopiedValue 
        |  SUM  |  SUM  |  SUM  |  SUM 
BLANK ROW ----- BLANK ROW ----- BLANK ROW ----- BLANK ROW ----- BLANK ROW ------ 
Combo Heat Comm. | Month1 | Month2 | Month 3 |  etc. 
NameA    | CopiedValue | CopiedValue | CopiedValue | CopiedValue 
NameB    | CopiedValue | CopiedValue | CopiedValue | CopiedValue 
NameC    | CopiedValue | CopiedValue | CopiedValue | CopiedValue 
        |  SUM  |  SUM  |  SUM  |  SUM 
BLANK ROW ----- BLANK ROW ----- BLANK ROW ----- BLANK ROW ----- BLANK ROW ------ 
Total Est. Over  | Total SUM | Total SUM | Total SUM | Total SUM 

В каждой общине имеется специальная рабочая таблица в книге. Это лист содержит гранулированную деталь для каждого свойства в обществе, но только для текущего месяца (старые данные стирают в конце каждого месяца

Сообщества конкретных рабочих листы структурированы следующим образом:.

Address | columns with other data & calculations | Estimated Overage ($) | Other data 
123 Main| other data from other columns   | $XXX.XX    | Other data 
122 Main| other data from other columns   | $XXX.XX    | Other data 
Blank | Blank         | SUM of above values | blank 

CopiedValue на рабочем листе «Сводка» - это столбец «0» в столбце «I» на листе сообщества (оценочное значение «$»). Это значение уже вычисляется по формуле в нижней части столбца каждый месяц на листе рабочего листа Сообщества (может пересчитываться снова, если макрос легче записать).

Я пытаюсь написать код, который проверяет каждую ячейку в столбце A листа «Сводка» для имени сообщества (сохраняется как текстовое значение каждый раз, когда цикл выполняется в , называемом «db_community»), и, когда совпадение найденный, вставьте SUM столбца I в первый пустой столбец справа на листе «Сводка». По существу, соответствие значение соответствующего сообщества в колонке А.

Вот код, который я написал, чтобы начать, чтобы попытаться достичь этого результата:

Dim cell As Range 
Dim db_community As String 

For Each cell In Worksheets("Summary").Range("A4:A24") 
    If cell.Value = db_community Then 
     'Paste value from cell in other sheet to first empty 
     'cell at end of current row 
    End If 
Next cell 

Каждый месяц, ячейка, содержащая SUM в отдельные листы меняются (в зависимости от количества записей в этом месяце). Это код, который записывает SUM столбца и сохраняет его в качестве переменной в пустую ячейку ниже данных:

Dim sumRow as Long 
Dim overRow as Long 
Dim overValue As Long 

sumRow = Range("I4").End(xlDown).Row 
Cells(sumRow + 1, "I").Formula = "=SUM(I4:I" & sumRow & ")" 
overRow = Range("I4").End(xlDown).Row 
overValue = Cells(overRow, "I").Value 

Так, по существу, в «Резюме» листа, мне нужно найти в колонке А, когда значение этой ячейки равно db_community (имя сообщества) и вставляет overValue в соответствующую ячейку в столбце нового месяца. Затем это повторяется до тех пор, пока не будет заполнен весь рабочий лист.

Самое главное, что каждый месяц необходимо разместить дополнительные столбцы на основе новых данных и нового календарного месяца.

Если это еще не ясно, обратитесь к нам. Любая помощь приветствуется.

+0

Был много взять здесь, и это своего рода трудно понять таблицу фактически не видя его, поскольку он настолько велик. Но после прочтения вашего вопроса это звучит как «INDEX», а «MATCH» можно использовать вместо VBA, но это может стать довольно сложным. VBA, очевидно, все еще может работать, вы просто получите 'Row' из переменной' cell' в своем цикле и просто найдите следующую пустую ячейку в соответствующем листе. Просто google 'find empty cell in row' тонны результатов. – chancea

+0

Поиск пустой строки работает, за исключением того, что мне нужно найти новую строку на основе строки совпадающего значения в столбце A. Это та часть, с которой у меня возникают проблемы ... Index Match будет работать, но я бы придется повторять это каждый месяц, когда запускается новый отчет. Скорее всего, это краткосрочная проблема, пока я не выясню код. Благодаря! – johnwonderbread

ответ

0

Прочитав обновленное оригинальное сообщение, я считаю, что этот код подходит для ваших нужд.

  • Это будет исследовать значение столбца «A» на «Резюме»

  • Он будет смотреть друг на друга листа НЕ именем Резюме, и проверьте, чтобы увидеть, если ws.Name соответствует значению от «А» на исследуемом ряду.

  • Когда он находит совпадение, он находит последнюю строку этого листа сообщества и создает формулу после окончания столбца «I».

  • Значение только что созданной суммы отправляется обратно в столбец ПОСЛЕ последнего столбца той же строки из Сводки.

  • Прокрутите каждую строку в сводке и повторите этот процесс.

КОД:

Sub MonthlyCommunityUpdte() 

Dim source As String 
Dim db_Community As String 
Dim ws As Worksheet 
Dim lastRow As Long 
Dim tRow As Long  'set target row 
Dim overValue As Double 'Not sure if you already declared this. 
Dim lastCol As Long 

    source = "Summary" 
    lastRow = Sheets(source).Range("A" & Rows.count).End(xlUp).row 
    lastCol = Sheets(source).Cells(1, Columns.count).End(xlToLeft).Column 

    For lRow = 2 To lastRow 

      db_Community = Sheets(source).Cells(lRow, "A") 

      For Each ws In Worksheets 
       If ws.Name <> source Then   'Make sure not processing source again 
        If ws.Name = db_Community Then 
         tRow = Sheets(db_Community).Range("A" & Rows.count).End(xlUp).row + 1 
         Sheets(db_Community).Cells(tRow, "I").Formula = "=SUM(I4:I" & (tRow - 1) & ")" 
         overValue = Sheets(db_Community).Cells(tRow, "I")  'you can skip and 
            'replace overValue in the next line with what it is = to. 
         Sheets(source).Cells(lRow, lastCol + 1) = overValue 
        End If 
       End If 

      Next ws 
     Next lRow 
End Sub 
+0

@johnwonderbread, я прочитал ваш обновленный вопрос. Намного легче понять, вы каждый месяц очищаете данные на листе Сообщества. Это объясняет, почему поставить сумму в нижней части «I» не представляет проблемы. Вы пробовали решение, которое я разместил? Я уверен, что он делает именно то, что вы хотите, за исключением того, что я использую tempCommunity вместо db_community. Обновлено с db_community – peege

+0

Я получаю несколько ошибок, особенно в строке «lCol = Таблицы (источник) ...». Ошибка '1004': Определенная определением объекта или объектная ошибка Я пробовал несколько вещей, не повезло. Мысли? – johnwonderbread

+0

@johnwonderbread, где lCol? Вы имеете в виду lastCol? если да, то называете ли вы свой источник = «Сводка»? – peege

Смежные вопросы

 Смежные вопросы