Crear hojas modificando caracteres especiales de una columna
Hola espero me puedan ayudar gracias.
Tengo el siguiente código lo que hace es que busca un valor en una columna en este caso la A y selecciona un valor y
crea tablas con ese valor junto con todos sus datos
Ejemplo en toda la columna A hay valores y por medio de un botón crea tablas con todos los valores de la columna A de
la hoja A.DATOS por decir si tengo en la columna A de la hoja A.DATOS eduardo, juan, pablo.. Cuando hago clic al botón crea
las tablas para cada uno y pega sus valores que están en la columna A de la hoja A.DATOS
Application.ScreenUpdating = False
Set h1 = ActiveSheet
For i = 2 To h1.Range("A" & Rows.Count).End(xlUp).Row
existe = False
For Each h In Sheets
If h.Name = h1.Cells(i, "A") Then
h1.Rows(i).Copy h.Range("A" & h.Range("A" & Rows.Count).End(xlUp).Row + 1)
existe = True: Exit For
End If
Next
If existe = False Then
Set h2 = Sheets.Add(after:=Sheets(Sheets.Count))
h2.Name = h1.Cells(i, "A")
h1.Rows(i).Copy h2.Range("A1")
End If
Next
h1.Select
Lo que necesito es que existen algunos caracteres especiales ejemplo /,*,:
es que cambie esos caracteres por otros que si puedan ser creados en las nuevas hojas de excel Ejemplo en la columna A
tengo valores como /Eduardo/SAS quiero que cambie ese valor de "/" por "_" y asi pueda crear la hoja para eso uso las siguientes lineas:
Columns("b:b").Select
Selection.Replace What:="/", Replacement:="_", lookat:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Selection.Replace What:="~*", Replacement:="#", lookat:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Selection.Replace What:=":", Replacement:="+", lookat:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Pero que en la columna A no se modifiquen ni en las demás hojas quedando el valor en las columnas
como /Eduardo/SAS y en la hoja que se creo quede _Eduardo_SAS
para hacer esto uso lo siguiente
Application.ScreenUpdating = False
Set h1 = ActiveSheet
For i = 2 To h1.Range("B" & Rows.Count).End(xlUp).Row
existe = False
For Each h In Sheets
If h.Name = h1.Cells(i, "B") Then
h1.Rows(i).Copy h.Range("A" & h.Range("A" & Rows.Count).End(xlUp).Row + 1)
Columns("b:b").Select
Selection.Replace What:="_", Replacement:="/", lookat:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
existe = True: Exit For
End If
Next
If existe = False Then
Set h2 = Sheets.Add(after:=Sheets(Sheets.Count))
h2.Name = h1.Cells(i, "B")
h1.Rows(i).Copy h2.Range("A2")
End If
Pero como tambien tengo datos en la columna A como ZEMX_FI_ROLE si uso lo de arriba me cambiaria todo quedando asi ZEMX/FI/ROLE y ese no es su valor
Ejemplo de como me gustaria que quedara
En la hoja A.DATOS
/SAST/ADMINISTRATOR
/SAST/ADMINISTRATOR
ZEMX_FI_ROLE
S:0000_RFC
quiero que al correr la macro cree las hojas para /SAST/ADMINISTRATOR pero como no puede usar "/" lo cambie por _SAST_ADMINISTRATOR y pegue los dos datos que encontro
/SAST/ADMINISTRATOR
/SAST/ADMINISTRATOR
y cree la otra hoja ZEMX_FI_ROLE y pegue su valor:
ZEMX_FI_ROLE
y otra hoja para S:0000_RFC pero como no puede usar ":" lo cambie por "+" quedando asi S+0000_RFC y pegue su valor:
S:0000_RFC
y asi con cada uno de los valores estoy usando la versión 2007 y la hoja principal se llama A.DATOS estan los valores:
GRACIAS ESPERO ME PUEDAN AYUDAR.