首页 > 解决方案 > 需要在一个表上查找名称并将分配的值添加到另一个表中与该名称匹配的所有单元格

问题描述

我是 VBA 的新手,一直在从事这项任务,我在 Sheet1 上有一个表格,其中列出了分配给它们的名称和编号:

Name    Number
A       5
R       4
T       6
Y       2

Sheet2 中的另一个表,其名称为标题,每列有很多值:

A   B   R   W   Y
10  40  70  10  40
20  50  80  20  50
30  60  90  30  60

我需要找到第一个表中的所有名称,并将该数字添加到第二个表中该名称的所有值中,结果将是:

A   B   R   W   Y
15  40  74  10  42
25  50  84  20  52
35  60  94  30  62

表格有数百个名称,因此使用公式并不容易。关于从哪里开始使用宏/VBA 的任何想法?

标签: excelvba

解决方案


希望你能从中学习,而不是照搬。

我假设您的 Excel 表格应该是这样的(值从单元格 A2 和 B2 开始):

一个
姓名 数字
一个 5
R 4
6
2

这是带有注释的代码:

Option Explicit

Sub test()

Dim wb As Workbook
Set wb = ThisWorkbook
Dim ws As Worksheet
Dim ws2 As Worksheet
Set ws = wb.Worksheets("Sheet1")
Set ws2 = wb.Worksheets("Sheet2")


Dim i As Integer
Dim j As Integer
Dim col As String
Dim CellName As String
Dim addnumber As Double

'First, you need to count the number of rows of column A with non-empty value
'       and hence you can assign the value to variable one by one using For Loop

For i = 0 To ws.Range("A2", ws.Range("A2").Cells.End(xlDown)).Rows.Count - 1

    'col = A,R,T,Y during this loop
    col = ws.Range("A2").Offset(i, 0).Value
    
    'addnumber = 5,4,6,2 during this loop
    addnumber = ws.Range("A2").Offset(i, 1).Value
    
    'CellName = A1,R1,T1,Y1 during this loop
    CellName = col + "1"
    
    'Skip to do addition (Example: Column "T" does not contain value)
    If ws2.Range(CellName).Value <> "" Then
    
       'Same logic as mention above
       For j = 0 To ws2.Range(CellName, ws2.Range(CellName).Cells.End(xlDown)).Rows.Count - 1
       
        'do addition
        ws2.Range(CellName).Offset(j, 0).Value = ws2.Range(CellName).Offset(j, 0).Value + addnumber
        
       Next
       
    End If
Next

End Sub


推荐阅读