es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Obtener de manera confiable la última columna en Excel con o sin celdas combinadas

Recientemente tuve un problema donde mi función get_lcol devolvía A1 como las celdas en A1:D1 estaban fusionadas. Adapté mi función para tener en cuenta esto, pero luego tenía otros datos con celdas fusionadas en A1:D1 pero otra columna en G y mi función devolvía D1, así que la ajusté de nuevo. El problema es que no confío en que siga funcionando con todos los tipos de datos, ya que solo está verificando celdas fusionadas en la fila 1.

Mira los datos a continuación, ¿cómo puedo hacer que la función devuelva D o 4 de manera confiable, independientemente de dónde mueva la fila fusionada y / o cualquier otro problema que no haya previsto?

Función actual:

Public Sub Test_LCol()
Debug.Print Get_lCol (ActiveSheet)
End Sub

Public Function Get_lCol (WS como hoja de trabajo) como entero
Dim sEmpty como boolean
En Error Continuar Próximo
sEmpty = IshojaTrabajoVacia (HojasTrabajo (WS.Nombre))
Si sEmpty = Falso Luego
Get_lCol = WS.Cells.Find (What: = & quot; * & quot ;, después: = [A1], SearchOrder: = xlByColumns, SearchDirection: = xlPrevious). Columna
Si Cells (1, Get_lCol) están fusionados = True Luego
Si Get_lCol <cells (1, get_lcol). mergearea.columns.count luego
get_lcol = cells (1, get_lcol). mergearea.columns.count
fin si
fin si
sino
get_lcol = 1
fin si
end función

actualización:

prueba estos datos con la función: (1,=”” get_lcol).=”” mergearea.columns.count=”” luego=”” get_lcol=”Cells” (1,=”” get_lcol).=”” mergearea.columns.count=”” fin=”” si=”” fin=”” si=”” sino=”” get_lcol=”1″ fin=”” si=”” end=”” función=”” actualización:=”” prueba=”” estos=”” datos=”” con=”” la=””></cells (1, get_lcol). mergearea.columns.count luego
get_lcol = cells (1, get_lcol). mergearea.columns.count
fin si
fin si
sino
get_lcol = 1
fin si
end función

actualización:

prueba estos datos con la función:>

Tags:  ,

Answer

  1. Avatar for davy.ai

    Puedes intentar usar la propiedad Range.End para obtener de manera confiable la última columna sin importar donde se encuentren las celdas fusionadas. La propiedad Range.End devuelve un objeto Range que representa la celda al final de la región que contiene el rango de origen.

    Actualiza tu función a lo siguiente:

    Public Function Get_lCol(WS As Worksheet) As Integer
    Dim sEmpty As Boolean
    On Error Resume Next
    sEmpty = IsWorksheetEmpty(Worksheets(WS.Name))
    If sEmpty = False Then
    Get_lCol = WS.Cells.Find(What:=”*”, after:=[A1], SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column
    If IsMerged(Cells(1, Get_lCol)) = True Then
    Get_lCol = Cells(1, Get_lCol).MergeArea.Range.End.Column
    End If
    Else
    Get_lCol = 1
    End If
    End Function

    Esto debería devolver D o 4 sin importar donde se encuentren las celdas fusionadas.

Comments are closed.