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:>
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.