当列A匹配值时,将值粘贴到列X.

时间:2014-12-17 18:51:46

标签: excel vba excel-vba

我有一张大约14张的工作簿。第一张表“摘要”具有以下结构:

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

每个社区在工作簿中都有一个专用工作表。该工作表包含社区中每个属性的详细信息,但仅适用于CURRENT月份(旧数据在每个月末被擦除。

社区特定工作表的结构如下:

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是社区工作表中的“我”列的SUM(估算过剩$)。此值已由社区特定工作表中每月的列底部的公式计算(如果使宏更易于编写,则可以再次重新计算)。

我正在尝试编写一个代码,用于检查社区名称的“摘要”表的A列中的每个单元格(每次循环在名为“db_community”的STRING中运行时存储为文本值)并且,当找到匹配项时,在“摘要”工作表的右侧第一个空白列中插入第I列的SUM。基本上,将值与A列中的相应社区相匹配。

这是我写的代码,开始尝试完成这个结果:

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

因此,基本上,在“摘要”表中我需要在列A中找到该单元格的值等于db_community(社区名称)并将overValue粘贴到新月份列中的相应单元格中。然后重复循环,直到填充整个工作表。

最重要的是,它需要根据新数据和新日历月每月添加额外的列。

如果仍然不清楚,请询问。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

阅读更新的原始帖子后,我相信此代码符合您的需求。

  • 这将检查列的值" A"在"摘要"

  • 然后它将查找彼此未命名为摘要的工作表,并检查ws.Name是否与" A"中的值相匹配。在被检查的行上。

  • 当找到匹配项时,它会找到该社区工作表的最后一行,并在列结束后创建一个公式" I"。

  • 然后,刚刚创建的总和的值将被发送回摘要中同一行的最后一列之后的列。

  • 遍历摘要中的每一行并重复该过程。

<强> CODE:

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