У меня есть файл Excel, который содержит около 100 листов. Каждый лист для студента, и каждое имя листа является firstname_lastname например 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)

2 ответа2

2

Для имени

=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 означает, что необходимо помнить о необходимости повторного запуска сценария при изменении имени листа.

1

Вы можете сделать это легко с 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.Клетки (1, 1)) и B1 (нед.Ячейки (1, 2)) по имени и фамилии в соответствии с названием рабочего листа.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .