我有一个 Excel 文件,里面有大约 100 个工作表。每个工作表对应一个学生,每个工作表名称为firstname_lastname
eg Mark_Hope
,因此我想要做的是,每个工作表中有两个单元格firstname
,lastname
我想自动从工作表名称中获取并填充这两个单元格中的名字和姓氏。有什么建议吗?
这是我尝试过的,但由于某种原因,它不能正常工作,而且它会更新所有的工作表,而不仅仅是当前的工作表。
为了lastname
:
=RIGHT(MID(CELL("filename"),FIND("]",CELL("filename"))+1,30),FIND("_",MID(CELL("filename"),FIND("]",CELL("filename"))+1,30))-1)
为了firstname
:
=LEFT(MID(CELL("filename"),FIND("]",CELL("filename"))+1,30),FIND("_",MID(CELL("filename"),FIND("]",CELL("filename"))+1,30))-1)
答案1
对于名字
=LEFT(MID(CELL("filename",A1),FIND("]",CELL("filename",A1))+1,256), FIND("_", MID(CELL("filename",A1),FIND("]",CELL("filename",A1))+1,256))-1)
对于姓氏
=MID(CELL("filename",A1),FIND("_",CELL("filename",A1))+1,256)
不确定你说的“它会更新所有工作表”是什么意思——这些是你应该粘贴在单元格中的公式每个床单。
另外作为提示,使用公式功能区上的“评估公式”可以逐步执行公式的每个部分并显示出错的地方。
您还可以通过将工作表名称放入一个单元格然后在其他两个公式中使用该单元格来简化这些公式。
使用 VBA 解决方案意味着记住在更改工作表名称时重新运行脚本。
答案2
您可以使用 VBA 轻松完成:
Sub namestocells()
Dim wkb As Workbook
Dim wks As Worksheet
Set wkb = ThisWorkbook
totalwks = wkb.Worksheets.Count
For i = 1 To totalwks
Set wks = wkb.Sheets(i)
sheetname = wks.Name
splitname = Split(sheetname, "_")
mn = UBound(splitname)
If mn = 1 Then
wks.Cells(1, 1) = splitname(0)
wks.Cells(1, 2) = splitname(1)
End If
Next i
a = MsgBox("The process has ended succesfully", vbInformation)
End Sub
它会遍历你的所有工作表,获取名称,拆分并放到单元格上A1(wks.Cells(1, 1))和B1(wks.Cells(1, 2)) 根据工作表的名称输入名字和姓氏。