Separar datos de una celda y calcular celdas.

Hola !
En mi trabajo me pasan a menudo ficheros excel con la siguiente información en una sola celda ( son componentes electrónicos ):
R150, R153, R155, R160, R162, R222, R290-R293, R297-R298
Yo quisiera crear una fila para cada uno de ellos:
R150
R153
R155
R160
R162
R222
R290
R291
R292
R293
R297
R298
La dificultad de esto es que se separar datos en columnas y traspoener y eso, pero no se como hacer para que R290-R293 me cree las columnas del R290 R291 R292 R293.
Si todo esto pudiese hacerse de una sola vez seria genial.
Un saludo,
1
Respuesta
1
Usando UDFs (funciones definidas por el usuario) parece posible conseguirlo. Por ejemplo, para obtener una cadena con las series completas la función podría ser algo como:
Option Base 1
Public Function CompletarSerie(ByVal sTexto As String) As String
    Dim mtr() As String, mtr2() As String
    Dim iElem As Integer
    Dim n As Integer, i As Integer
    mtr = Split(sTexto, ",")
    For n = LBound(mtr) To UBound(mtr)
        If InStr(mtr(n), "-") = 0 Then
            iElem = iElem + 1
            ReDim Preserve mtr2(iElem)
            mtr2(iElem) = mtr(n)
        Else
            For i = CInt(Mid(mtr(n), 2, 3)) To CInt(Right(mtr(n), 3))
                iElem = iElem + 1
                ReDim Preserve mtr2(iElem)
                mtr2(iElem) = Left(mtr(n), 1) & CStr(i)
            Next i
        End If
    Next n
    For n = 1 To UBound(mtr2)
        CompletarSerie = CompletarSerie & mtr2(n) & "-"
    Next n
    CompletarSerie = Left(CompletarSerie, Len(CompletarSerie) - 1)
End Function
La sintaxis sería (suponiendo que la cadena de texto origen estuviera en A1):
=CompletarSerie(A1)
Otra posibilidad sería ir extrayendo directamente cada elemento una vez completada la serie, algo como:
Option Base 1
Public Function ExtraerElemento(ByVal sTexto As String, ByVal lFila As Integer) As String
    Dim mtr() As String, mtr2() As String
    Dim iElem As Integer
    Dim n As Integer, i As Integer
    mtr = Split(sTexto, ",")
    For n = LBound(mtr) To UBound(mtr)
        If InStr(mtr(n), "-") = 0 Then
            iElem = iElem + 1
            ReDim Preserve mtr2(iElem)
            mtr2(iElem) = mtr(n)
        Else
            For i = CInt(Mid(mtr(n), 2, 3)) To CInt(Right(mtr(n), 3))
                iElem = iElem + 1
                ReDim Preserve mtr2(iElem)
                mtr2(iElem) = Left(mtr(n), 1) & CStr(i)
            Next i
        End If
    Next n
    ExtraerElemento = mtr2(lFila)
End Function
Y la sintaxis sería, suponiendo que se empezara a llamar a la función en la fila 1 de cualquier columna:
=ExtraerElemento(A$1, Fila())
Copiando y pegando esta llamada hacia abajo iría apareciendo cada elemento, aunque lógicamente sería posible extraer un elemento determinado sustituyendo Fila() por el número de elemento que fuera, y cuando no quedaran más elementos que extraer comenzaría a aparecer el error #¡VALOR!
Muchísimas gracias por la respuesta, he probado algo y aunque no funciona siempre creo poder modificar la función. Ya te contare cuando lo consiga...
Gracias, un saludo,

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas