Macro para dividir cadenas en dos columnas con delimitador
publicado
Hola a todos, como estan? estoy con un problema que me viene trabando hace dias!!!! y no le encuentro solucion...estoy desesperada...
Tengo un archivo con varios formularios, para una ong que estoy ayudando de cuidado ambiental...
uno de los formularios en el archivo "FotosOVideosPorCarpeta, permite seleccionar atraves de un boton una carpeta, y obtener en la Hoja13 o " FotosEtiquetadas" todos los datos de los archivos que estan ahi contenidos, como ser tipo de archivo nombre, tamaño etc, pero tambien extrae la informacion de otros atributos que se suele llamar informacion exif de esas fotos, que se añaden como keywords o etiquetas... hasta ahi estamos super... y me coloca esta informacion en la hoja 13.
Ahora el detalle de lo que necesito lograr es que :
1) que la columna "B" de la Hoja13 se divida en las columnas subsiguientes por el delimitador "_" cada vez que se cargue una carpeta nueva,
2) que la columna "K" que contiene los Tag, keywords o etiquetas tambien se divida en las columnas subsiguientes a traves del delimitador ";" el detalle es que cada etiqueta contiene ademas al comienzo "el nombre de la etiqueta seguido por | " ejemplo: A.Sitio|San jorge; B.Estacion|Papio; C.Especie|Pecari tajacu y
en este ejemplo molesta o no sirve "A.Sitio|" deberia quedar solo = "San jorge" ; no sirve "B.Estacion|" , deberia quedar = Papio; no sirve "C.Especie|" deberia quedar Pecari tajacu ... esto ultimo no se si es posible o no... de no serlo, bueno quedará estorbando... pero al fin lo que necesito es poder separar esa informacion cada vez que se cargue una nueva carpeta sin que se vuelva super lento.
Probe con la grabadora de campos : pero se me vuelve super lento y no siempre me lo ejecuta,
Dim celda As Range
Dim matrizresultados() As String
Dim i As Long
For Each celda In miRango
Range(celda.Offset(0, 1), celda.Offset(0, 5)).ClearContents
matrizresultados = Split(celda.Value, "_")
For i = 0 To UBound(matrizresultados)
celda.Offset(0, i + 1).Value = Trim(matrizresultados(i))
Next i
Next celda
End Sub
///
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 2 And Target.Row >= 2 Then
Call Módulo12.DivisionNombreArchivo(Target)
End If
End Sub
//
Y tampoco me funciona, lo probe cambiar al evento selection_change y ahi si funciona, pero para que se ejecute tengo que pararme manualmente en cada celda , darle enter y ahi si hace la division... pero no es nada automatizado aunque es mas rapido si...
ambos codigos estan el modulo 12 , y me estan enloqueciendo... me podrian ayudar por favor?
Millones de gracias
Adjunto el archivo excel quise subir las fotos y no me deja por el tamaño no se como ponerlas: pero por las dudas asi me sale la informacion en la hoja excel:
Hola a todos, como estan? estoy con un problema que me viene trabando hace dias!!!! y no le encuentro solucion...estoy desesperada...
Tengo un archivo con varios formularios, para una ong que estoy ayudando de cuidado ambiental...
uno de los formularios en el archivo "FotosOVideosPorCarpeta, permite seleccionar atraves de un boton una carpeta, y obtener en la Hoja13 o " FotosEtiquetadas" todos los datos de los archivos que estan ahi contenidos, como ser tipo de archivo nombre, tamaño etc, pero tambien extrae la informacion de otros atributos que se suele llamar informacion exif de esas fotos, que se añaden como keywords o etiquetas... hasta ahi estamos super... y me coloca esta informacion en la hoja 13.
Ahora el detalle de lo que necesito lograr es que :
1) que la columna "B" de la Hoja13 se divida en las columnas subsiguientes por el delimitador "_" cada vez que se cargue una carpeta nueva,
2) que la columna "K" que contiene los Tag, keywords o etiquetas tambien se divida en las columnas subsiguientes a traves del delimitador ";" el detalle es que cada etiqueta contiene ademas al comienzo "el nombre de la etiqueta seguido por | " ejemplo: A.Sitio|San jorge; B.Estacion|Papio; C.Especie|Pecari tajacu y
en este ejemplo molesta o no sirve "A.Sitio|" deberia quedar solo = "San jorge" ; no sirve "B.Estacion|" , deberia quedar = Papio; no sirve "C.Especie|" deberia quedar Pecari tajacu ... esto ultimo no se si es posible o no... de no serlo, bueno quedará estorbando... pero al fin lo que necesito es poder separar esa informacion cada vez que se cargue una nueva carpeta sin que se vuelva super lento.
Probe con la grabadora de campos : pero se me vuelve super lento y no siempre me lo ejecuta,
Este codigo esta en el modulo 12
Hoja5.Select
'
' Range("B2:B").Select
' Selection.TextToColumns Destination:=Range("B2"), DataType:=xlDelimited, _
' TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
' Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
' :="_", FieldInfo:=Array(Array(1, 1), Array(2, 4), Array(3, 1), Array(4, 1), Array(5, _
' 1)), TrailingMinusNumbers:=True
'End With
Luego tambien probe con este codigo:
Sub DivisionNombreArchivo(miRango As Range)
Hoja13.Select
Dim celda As Range
Dim matrizresultados() As String
Dim i As Long
For Each celda In miRango
Range(celda.Offset(0, 1), celda.Offset(0, 5)).ClearContents
matrizresultados = Split(celda.Value, "_")
For i = 0 To UBound(matrizresultados)
celda.Offset(0, i + 1).Value = Trim(matrizresultados(i))
Next i
Next celda
End Sub
///
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 2 And Target.Row >= 2 Then
Call Módulo12.DivisionNombreArchivo(Target)
End If
End Sub
//
Y tampoco me funciona, lo probe cambiar al evento selection_change y ahi si funciona, pero para que se ejecute tengo que pararme manualmente en cada celda , darle enter y ahi si hace la division... pero no es nada automatizado aunque es mas rapido si...
ambos codigos estan el modulo 12 , y me estan enloqueciendo... me podrian ayudar por favor?
Millones de gracias
Adjunto el archivo excel quise subir las fotos y no me deja por el tamaño no se como ponerlas: pero por las dudas asi me sale la informacion en la hoja excel:
Saludos Romi
adjunto el
Pruebas.xlsm