Excel 宏:根据单一条件更新工作表或创建新工作表

Excel 宏:根据单一条件更新工作表或创建新工作表

我想编写一个宏,根据单一标准更新 Excel 工作簿中多个工作表中的一张。

我的工作簿的第一张表的标题是“输入”;我将客户的投资组合复制并粘贴到此空白表中。单元A2“输入”包含客户的姓名。

第二张表的标题是“工作”I“工作”包含按我需要的方式重新组织的客户数据。

其余的纸张均以特定客户的名字命名(“琼斯,马修” “史密斯,彼得”ETC。)。

我想创建一个宏来更新标题与以下名称匹配的工作表:“输入” A2。具体来说,我想I复制“工作”并将其粘贴到A标题匹配的工作表列中(例如“Jones, Matthew”)“输入” A2

我还想让宏创建一个新的工作表,如果“输入” A2与任何现有工作表的标题不匹配(即,如果它是新客户)。“输入” A2应该是新工作表的标题(例如“琼斯,莎拉”)。

我将非常感激任何关于如何进行的建议。不幸的是,我对宏的理解非常有限。我曾尝试使用简单的公式来完成这项任务,但迄今为止没有成功。

答案1

这是您需要的宏。

 Public Sub clients()
    Dim wkb As Workbook
    Dim wks, wks1, wks2 As Worksheet
    Set wkb = ThisWorkbook
    nwks = wkb.Sheets.Count 'Number of sheets on the Workbook
    Set wks = wkb.Sheets("Input")
    clientname = wks.Cells(2, 1) 'Name of the client on cell A2 of Input
    If clientname <> "" Then 'if clientname is not empty
        found = False
        For i = 1 To nwks
            sheetname = wkb.Sheets(i).Name
            If sheetname = clientname Then found = True 'sheet exists
        Next i
        If found = False Then 'If sheet doesn't exist then create it
            With wkb
                Set wks1 = .Sheets.Add(After:=.Sheets(.Sheets.Count))
                wks1.Name = clientname
            End With
        End If
        'Copy column I from work to client name column A
        Set wks1 = wkb.Sheets("Work")
        Set wks2 = wkb.Sheets(clientname)
        wks1.Columns(9).Copy wks2.Columns(1)
    End If
End Sub

使用ALT+打开 VBA/宏F11,在本工作簿插入一个新的模块并将代码粘贴在右侧。

单击绿色三角形来执行。

我对代码进行了注释,以便您了解它是如何工作的。

您也可以通过单击第一行逐步运行它,然后按 执行每个步骤F8

相关内容