Llene la celda con el nombre de la hoja de Microsoft Excel

0

Tengo un archivo de Excel que tiene alrededor de 100 hojas en él. Cada hoja es para un estudiante, y cada nombre de hoja es el firstname_lastname p.ej Mark_Hope así que lo que quiero hacer es que en cada hoja hay dos celdas para el firstname y lastname Deseo recuperar y rellenar automáticamente estas dos celdas con los nombres y apellidos del nombre de la hoja. ¿Algún consejo por favor?

Esto es lo que intenté, pero por alguna razón no funciona correctamente, además de que actualiza todas las hojas, no solo la actual.

Para el lastname:

=RIGHT(MID(CELL("filename"),FIND("]",CELL("filename"))+1,30),FIND("_",MID(CELL("filename"),FIND("]",CELL("filename"))+1,30))-1)

Para el firstname:

=LEFT(MID(CELL("filename"),FIND("]",CELL("filename"))+1,30),FIND("_",MID(CELL("filename"),FIND("]",CELL("filename"))+1,30))-1)
Tak
fuente

Respuestas:

2

Para primer nombre

=LEFT(MID(CELL("filename",A1),FIND("]",CELL("filename",A1))+1,256), FIND("_", MID(CELL("filename",A1),FIND("]",CELL("filename",A1))+1,256))-1)

para apellido

=MID(CELL("filename",A1),FIND("_",CELL("filename",A1))+1,256)

No está seguro de lo que quiere decir con "actualiza todas las hojas", son fórmulas que debe pegar en las celdas cada hoja.

También como una sugerencia, el uso de la fórmula Evaluar en la cinta de fórmulas pasa por cada parte de la fórmula y le muestra dónde va mal.

También puede simplificar estas fórmulas obteniendo el nombre de la hoja en una celda y luego utilizando esa celda en las otras dos fórmulas.

Utilizar una solución VBA significa recordar volver a ejecutar el script cuando cambie el nombre de la hoja.

Peter Brand
fuente
1

Puedes hacerlo fácilmente con 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

Recorrerá todas sus hojas de trabajo, tomará el nombre, lo dividirá y colocará en las celdas A1 (wks.Cells (1, 1)) y B1 (wks.Cells (1, 2)) nombres y apellidos según el nombre de la hoja de trabajo.

jcbermu
fuente