
Tengo marcas de tiempo en forma de archivo csv donde cada cadena se ve así:
TT_TU_MN009,"5009","200001010000","-1.8","3","4"
TT_TU_MN009,"5009","200001010200","-1.7","10","1"
TT_TU_MN009,"5009","200001011400","1","10","1"
...
Mi objetivo es extraer la segunda, tercera y cuarta posición de esta cadena (sin las comillas dobles) en su propia columna:
- 5009
- 200001010000
- -1,8
Logré lograr esto para la primera columna.
=LEFT(A2;SEARCH(",";A2)-1)
pero no tengo idea de cómo hacerlo para las otras 2 posiciones. ¿Se puede lograr eso sin VBA?
gracias de antemano
A
Respuesta1
Me gustaría sugerir dos métodos diferentes para extraer el enésimo texto de la cadena de texto en la celda.
Método 1:
Fórmula en la celda
J16
:=TRIM(MID(SUBSTITUTE("""" & $J$13& REPT(" ",6),"""",REPT(CHAR(32),255)),2*255,255))
NÓTESE BIEN
2*255
determina la posición del texto, enJ13
,5009
es la segunda palabra/texto.Porque
20000101000
la posición es la cuarta, ya que la fórmula cuenta,
antes como la tercera, por lo que para la fórmula en la celdaJ17
reemplace2*255
con4*255
y con6*255
para-1.8
la fórmula enJ18
.
Método 2:
Comprende una macro VBA y es una UDF (función definida por el usuario).
- Presione cualquieraAlt+F11oRHaga clic derecho enShoja TAB y desde el menú emergente presioneVer códigopara obtener el editor VB.
- Ccopiar yPAGGuarde este código como Módulo.
Function FindWord(Source As String, Position As Integer)
Dim arr() As String
arr = VBA.Split(Source, ",")
xCount = UBound(arr)
If xCount < 1 Or (Position - 1) > xCount Or Position < 0 Then
FindWord = ""
Else
FindWord = arr(Position - 1)
End If
End Function
- Fórmula en la celda
J3
:=SUBSTITUTE(J1,CHAR(34),"")
- Ingrese esta fórmula en la celda
J5
:=FindWord(J3,2)
NÓTESE BIEN
- En esta fórmula
2
se determina la segunda palabra/texto en la celda para que la siguiente sea=FindWord(J3,3)
y así sucesivamente.
Puede usar CONCATENACIÓN si es necesario, todo en una celda.