在excel中查找和替换文本

时间:2014-10-17 04:23:28

标签: excel vba excel-vba

我正在为我们部门的任务列表工作。 该工作簿由以下表格构成:

Master task list
Person A
Person B
Person C

将新任务(C列)分配给将自动复制到该人员任务列表底部的人员。 当该人执行他/她的任务时,他们将在列注释(列M)中输入注释,并在列%(列K)中输入进度。

我想创建一个VBA脚本,只需单击一个按钮,就可以在主任务列表表中更新输入的所有注释和进度。

我尝试了各种代码(.find; =地址;匹配)。并且无法使任何代码正常工作。 我的头现在正在旋转:-(

任何人都可以帮助我。

任务数量与主任务列表工作表中的位置不同(在工作表顶部输入新任务)。

谢谢

2 个答案:

答案 0 :(得分:1)

如果你已经构建了这个部分:

  

当一个新任务(C列)被分配给一个将自动复制到该人员任务列表底部的人时

您需要做的就是将一个任务ID添加到主列表中,并使用vlookup从每个工作表中引用它,也可以是间接的。

如果你的主列表中有人,任务被分配给这个公式将在主列表的D2中进入:

=VLOOKUP(A2,INDIRECT("'"&B2&"'!B1:Z10000"),10,FALSE)

其中:

  • A2是主列表中的任务ID
  • B2是工作表名称/人员(例如人员A)
  • 范围B1:Z10000是人员表
  • 上的查找范围
  • 数字10是个人工作表上的ID字段和评论与包含任务ID的列B之间的相对距离。

表:主列表
A B C D。 ...................Ë
任务ID ....人.......新任务......百分比...评论
1 ..............人A ......任务1 ...... 70 .................人A Comm 1
2 ..............人B ......任务2 ...... 12 ................. B人TestComment 1
3 ..............人员C ....任务3 ...... 34 .................人员C TestComm 1
4 ..............人A ......任务4 ...... 23 .................人A Comm 2
5 ..............人B ......任务5 ...... 41 ................. B人测试评论2
6 ..............人员C ......任务6 ...... 26 .................人员C TestComm 2

表:人A
乙............Ç............ķ...................中号
任务ID ..任务......进度%..评论
1 ............任务1 ... 70 .................人A Comm 1
4 ............任务4 ... 23 .................人A Comm 2

表:人B
乙............Ç............ķ......................中号
任务ID ......任务......进度%.....评论
2 ............任务2 ... 12 .................... B人TestComment 1
5 ............任务5 ... 41 ....................人B测试评论2

表:人C
乙............Ç............ķ...................中号
任务ID ..任务......进度%..评论
3 ............任务3 ... 34 .................人员C TestComm 1
6 ............任务6 ... 26 .................人员C TestComm 2

间接是一种引用另一个单元格而不通过创建该引用的字符串明确说明它的方法。

所以,如果B2 =人A

公式将解析为:

= VLOOKUP(A2,'人A'!B1:Z10000,10,假)

答案 1 :(得分:0)

我已经创建了一个命令按钮,其背后有以下VBA文本。

Private Sub Update_Click()

Dim nextrow As Long, i As Integer
Dim comments As String, task As String, progress As Double
Dim w10 As Worksheet, w20 As Worksheet
Dim sourcebook As Workbook
Dim findrow As Long, findcolumn As Long

Set sourcebook = ActiveWorkbook
Set w10 = sourcebook.Sheets("Master task list")
Set w20 = sourcebook.Sheets("Harsh C")

nextrow = w20.Range("C" & w20.Rows.Count).End(xlUp).Row

Range("M14", "M" & nextrow).Select
With Selection.Interior
    .Pattern = xlSolid
    .PatternColorIndex = xlAutomatic
    .color = 5296274
    .TintAndShade = 0
    .PatternTintAndShade = 0
End With

For i = 14 To nextrow
    comments = w20.Cells(i, 13).Value
    progress = w20.Cells(i, 11).Value
    task = w20.Cells(i, 3).Value
    findrow = w10.Cells.Find(what:=task, MatchCase:=True).Row
    w10.Cells(findrow, 13).Value = comments
    w10.Cells(findrow, 11).Value = progress
On Error Resume Next
    Cells(i, 13).Select
    With Selection.Interior
        .Pattern = xlNone
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
Next i

End Sub

Iv创建了两个字符串,用于捕获需要复制到主任务列表的更改。 我在主任务列表(.find)上查找唯一任务描述并返回找到任务的行号。 然后我将现有的进度和评论替换为新的进度和评论。

单元格的着色我只是为了向用户显示Excel正在执行更新任务。