En varios proyectos en los que he trabajado he tenido que migrar contenido desde Excel hasta una base de datos. El objetivo de esta entrada es mostrar dos rutinas que normalmente utilizo para conocer las dimensiones de las tablas, de forma que, en una segunda entrada pueda facilitarme seleccionar el rango de datos para realizar una nueva operación con todos ellos.
Public Function FilasProcesar(ByVal iFil As Integer, Optional iColumna As Integer = 1, Optional Seguidos As Integer = 1) As Integer
Dim s1 As String, bIN As Boolean, intJ As Integer, filIni As Integer
filIni = iFil
bIN = False
If iColumna = 0 Then iColumna = 1: GoTo Ending ' columnas 2 y 3 son las que sirven para contar hasta que fila trabajo
If Seguidos = 0 Then Seguidos = 1
s1 = ""
For intJ = iFil To iFil + Seguidos
s1 = s1 & Trim$(ActiveSheet.Cells(intJ, iColumna))
Next
‘ Empieza el procesado de columnas .....
Do While Len(s1) > 0
bIN = True
iFil = iFil + 1
s1 = ""
For intJ = iFil To iFil + Seguidos
s1 = s1 & Trim$(ActiveSheet.Cells(intJ, iColumna))
Next
Loop
Ending:
If bIN = False Then iFil = 1 ' si no entra en la rutina, entonces no hay que procesar
FilasProcesar = iFil - filIni
End Function
Public Function ColumnaProcesar(ByVal iCol As Integer, Optional iFila As Integer = 1, Optional Seguidos As Integer = 1) As Integer
Dim s1 As String, bIN As Boolean, intJ As Integer, colIni As Integer
colIni = iCol
bIN = False
If iFila = 0 Then iFila = 1: GoTo Ending ' columnas 2 y 3 son las que sirven para contar hasta que fila trabajo
If Seguidos = 0 Then Seguidos = 1
s1 = ""
For intJ = iCol To iCol + Seguidos
s1 = s1 & Trim$(ActiveSheet.Cells(iFila, intJ))
Next
‘ Empieza el procesado de columnas .....
Do While Len(s1) > 0
bIN = True
iCol = iCol + 1
s1 = ""
For intJ = iCol To iCol + Seguidos
s1 = s1 & Trim$(ActiveSheet.Cells(iFila, intJ))
Next
Loop
Ending:
If bIN = False Then iCol = 1 ' si no entra en la rutina, entonces no hay que procesar
ColumnaProcesar = iCol - colIni
End Function
Una función es para trabajar con filas, y otra para columnas, y el número de parámetros es el mismo en ambas. Las funciones son suficientemente flexibles para que la selección de tablas no empiece obligatoriamente en A1, sino que puede empezar en cualquier casilla.
Por otro lado, será el usuario el que determine cuantas casillas en blanco tienen que ocurrir para indicar “fin de tabla“, puesto que a veces es posible que una casilla esté vacia, y no sea fin de tabla.
En la siguiente entrada veremos un ejemplo muy interesante en el que hacemos uso de estas dos funciones, que te pueden ahorrar mucho tiempo!
Espero os sea de utilidad