我想编写一个宏,根据单一标准更新 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。