Sobre concatenar mediante visual en excel

08/12/2008 - 04:21 por Anonimo | Informe spam
Un saludo y gracias de antemano.

Tengo un rango, digamos "a1:p100"

En cada fila de ese rango tengo varias columnas con datos pero de forma
irregular, me explico, igual en la primera fila tengo con datos 4 columnas,
en la fila 2, tengo 8 datos en las columnas

Estoy intentando crear un bucle que recorra todo el rango y me reconozca el
numero de columnas a la izquierda de un determinado valor, en este caso el
"-", y lo mismo para las columnas que este a la izquierda y que no esten
vacias

Ejemplo:

A.D. Cuevas del Castillo 2 - 0 AA.VV. La Marisma
C.D. Saltor Los Ríos 0 - 17 Real Rácing Club B
E.M.F. Santander B 2 - 3 P.A. Gimnástica A
E.M.F. Reocín A 8 - 0 C.D. Tropezón


Yo hago los siguiente: distribuyo el texto en columnas

Despues averiguo en que columna esta el texto "-"
Seguido coloco los equipos mediante el siguiente codigo:

Sub JOSEANGEL()

ultfila = Columns("A:A").Range("A65536").End(xlUp).Row

x = 1
l = 1


For Each rango In Range("a1:p" & ultfila)


DATO = InStr(1, "-", rango, vbBinaryCompare)


If rango <> "" Then

If DATO >= 1 Then

columna = rango.Column
FILA = rango.Row
datos = rango.Address




For I = 1 To columna - 2

Cells(x, 15 + I) = Range(datos).Offset(0, -((columna - I)))





Next I


x = x + 1




For j = 1 To 8


Cells(l, 25 + j) = Range(datos).Offset(0, j + 1)


Next j

l = l + 1

datos = rango.Address

dat = Range(datos).Offset(0, 1)
dat1 = Range(datos).Offset(0, -1)

For nov = 1 To columna - 2

Dim mat(43, 15)

mat(FILA, nov) = Range(datos).Offset(0, -(columna -
nov))


Next nov

For mes = 1 To 8

mat(FILA, mes) = Range(datos).Offset(0, mes + 1)

Next mes

Else: End If

Else: End If

Next rango

End Sub


Como ya me he perdido, lo que me gustaria es que con esos datos distribuidos
en columnas, buscar el caracter "-" que ya se como se hace. Despues me
gustaria que un bucle me recorriese todo los datos y me separese mediante
concatenación los dos equipos.

digamos que asi:

Z1 AA1
AB1
A.D. Cuevas del Castillo AA.VV. La Marisma 2-3
C.D. Saltor Los Ríos Real Rácing Club B 1-2
E.M.F. Santander B P.A. Gimnástica A
E.M.F. Reocín A C.D. Tropezón
Velarde Camargo C.F. S.D. Buelna
Atco. Perines B Peña Revilla


Utilizo excel 2007

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
08/12/2008 - 08:56 | Informe spam
hola, 'anonimo-a' ! (o... Jose Angel ?)

me da la impresion de que copias/pegas datos desde alguna pagina de internet y luego tratas de acomodar los datos -?-
(creo que) te saldria menos laborioso si en lugar de separar texto en columnas por espacios, utilizas el caracter "-" -?-
o... si podemos asumir que los datos del ejemplo que expones estuviera en el rango [A1:A4] (o el que sea pero iniciando en A1)
y que no hay datos en las columnas B en adelante... prueba cambiando de macro por una +/- como la siguiente:

Sub Arregla_datos()
[a1].CurrentRegion.TextToColumns [a1], xlDelimited, , , , , , , 1, "-"
With [a1].CurrentRegion
.Value = Evaluate("transpose(transpose(trim(" & .Address & ")))")
.Offset(, 2).Resize(, 1).Value = Evaluate("transpose(transpose(right(" & _
.Columns(1).Address & ",2)&"" - ""&left(" & .Columns(2).Address & ",2)))")
.Columns(1).Value = _
Evaluate("transpose(transpose(trim(left(" & .Address & ",len(" & .Address & ")-2))))")
.Columns(2).Value = _
Evaluate("transpose(transpose(trim(mid(" & .Address & ",3,100))))")
End With
[a1].CurrentRegion.EntireColumn.AutoFit
End Sub

si cualquier duda (o informacion adicional)... comentas ?
saludos,
hector.

__ OP __
Tengo un rango, digamos "a1:p100"
En cada fila de ese rango tengo varias columnas con datos pero de forma irregular
me explico, igual en la primera fila tengo con datos 4 columnas, en la fila 2, tengo 8 datos en las columnas
Estoy intentando crear un bucle que recorra todo el rango y me reconozca el numero de columnas
a la izquierda de un determinado valor, en este caso el "-", y lo mismo para las columnas que este a la izquierda y que no esten vacias
Ejemplo:
A.D. Cuevas del Castillo 2 - 0 AA.VV. La Marisma
C.D. Saltor Los Ríos 0 - 17 Real Rácing Club B
E.M.F. Santander B 2 - 3 P.A. Gimnástica A
E.M.F. Reocín A 8 - 0 C.D. Tropezón
Yo hago los siguiente: distribuyo el texto en columnas
Despues averiguo en que columna esta el texto "-"
Seguido coloco los equipos mediante el siguiente codigo: (...)
Como ya me he perdido, lo que me gustaria es que con esos datos distribuidos en columnas
buscar el caracter "-" que ya se como se hace. Despues me gustaria que un bucle me recorriese todo los datos
y me separese mediante concatenación los dos equipos.
digamos que asi:
Z1 AA1 AB1
A.D. Cuevas del Castillo AA.VV. La Marisma 2-3
C.D. Saltor Los Ríos Real Rácing Club B 1-2
E.M.F. Santander B P.A. Gimnástica A
E.M.F. Reocín A C.D. Tropezón
Velarde Camargo C.F. S.D. Buelna
Atco. Perines B Peña Revilla
Respuesta Responder a este mensaje
#2 Héctor Miguel
08/12/2008 - 20:20 | Informe spam
hola, (...) ?????

segun esta exposicion del "arreglo" (y lo que se alcanza a ver en la imagen)...
-> que es lo que debe quedar en la columna "Campo" -?????-
(o como determinar cuando hay un nombre de campo o es parte del nombre del equipo ?)

saludos,
hector.

p.d. OJO: los adjuntos NO los ve "todo mundo" :-((

__ OP __
Mira, los datos quedan como estos en la a1 y siguientes:
Jornada 2 el 28/09/2008
Fecha Encuentro Campo
D,28 12:30 AA.VV. La Marisma 6 - 4 S.D. Amistad B Municipal Frajanas
D,28 12:00 Real Rácing Club B 5 - 3 A.D. Cuevas del Castillo Inst. Racing (4)
D,28 10:00 P.A. Gimnástica A 3 - 1 C.D. Saltor Los Ríos El Malecón (2)
D,28 11:30 C.D. Tropezón 2 - 5 E.M.F. Santander B Tanos (2)
S,27 16:30 S.D. Buelna 1 - 0 E.M.F. Reocín A Los Corrales
D,28 11:00 Peña Revilla 3 - 2 Velarde Camargo C.F. Regimiento
D,28 09:30 C.D. Cervantes 1 - 4 Atco. Perines B Regimiento
S,27 12:30 S.D. Nueva Montaña A 0 - 4 Club Bansander B Nueva Montaña
S,27 11:30 C.D. Liébana 1 - 2 E.M.F. Meruelo Tama
lo que quiero es que me separe por columnas el texto.
Para ello sin utilzar el codigo hago la separación de texto segun "espacio", y me queda como en dibujo ...
Respuesta Responder a este mensaje
#3 Anonimo
09/12/2008 - 00:13 | Informe spam
De nuevo un saludo, en la imagen igual no se aprecia, pero el separador es
el siguiente: "-"

De todas formas ya lo consegui, aunque seguro que se podria mejorar y
hacerlo más rápido con este codigo

Sub joseang()


Application.ScreenUpdating = False

Sheets("Hoja2").Activate

Columns("B:B").Select
Selection.TextToColumns Destination:=Range("B1"), DataType:=xlDelimited,
_
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True,
Tab:=False, _
Semicolon:=False, Comma:=False, Space:=True, Other:=False, OtherChar
_
:="-", FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1),
Array(4, 1), Array(5, _
1), Array(6, 1), Array(7, 1), Array(8, 1), Array(9, 1), Array(10,
1), Array(11, 1)), _
TrailingMinusNumbers:=True




ultfila = Columns("A:A").Range("A65536").End(xlUp).Row



For Each RANGO In Range("c1:p" & ultfila)

DATO = InStr(1, "-", RANGO, vbTextCompare)

If RANGO <> "" Then

If DATO = 1 Then

columna = RANGO.Column

For i = columna - 2 To 2 Step -1

valor = Cells((RANGO.Row), i)

esp = " "

fil = valor + esp + fil

Cells(RANGO.Row, 20) = Trim(fil)

Next i

fil = ""


For j = 16 To columna + 2 Step -1

valor2 = Cells((RANGO.Row), j)

esp = " "

fil2 = valor2 + esp + fil2

Cells(RANGO.Row, 21) = Trim(fil2)


dt = RANGO.Address


Cells(RANGO.Row, 22) = "'" & Range(dt).Offset(0, -1) & "
" & RANGO & " " & Range(dt).Offset(0, 1)

Next j

fil2 = ""


Else: End If


Else: End If
Next RANGO

Selection.Columns.AutoFit

Call CLASIFICA

Application.ScreenUpdating = True

End Sub


Sub CLASIFICA()

Application.ScreenUpdating = False


Set JOSE = Sheets("Hoja4")
Set angel = Sheets("Hoja2")


Sheets("Hoja2").Activate
ultfila = Columns("T:T").Range("a65536").End(xlUp).Row


For Each rang In angel.Range("t2:t" & ultfila)


For Each grupo In JOSE.Range("a2:a19")

For Each col In JOSE.Range("b1:s1")

If rang = grupo And Range(rang.Address).Offset(0, 1) = col Then

fila = grupo.Row
columna = col.Column


JOSE.Cells(fila, columna) = Range(rang.Address).Offset(0, 2)

Else: End If

Next col

Next grupo

If rang = JOSE.Range("a2") Then



Else: End If






Next rang

Application.ScreenUpdating = True

End Sub




Sub CLASIFICACIONFINAL()


Set resultados = Worksheets("Hoja2")
Set cuadro = Worksheets("CUADRO")

Dim MATFIL(18) As Variant
Dim MATCOL(18) As Variant

For i = 0 To 17

MATFIL(i) = cuadro.Cells(i + 2, 1)
MATCOL(i) = cuadro.Cells(1, 2 + i)

Next i



'activa la hoja donde estan los resultados
resultados.Activate

'busca el valor de la ultima fila del rango
ultfila = Columns("T:T").Range("a65536").End(xlUp).Row

'recorre el bucle de la pagina de resultados
For Each resultado In Range("t1:t" & ultfila)



Dim X, P

X = cuadro.Range("a2:a19")
P = cuadro.Range("b1:s1")

For j = 1 To 18


For l = 1 To 18



If resultado = X(j, 1) And Range(resultado.Address).Offset(0, 1) =
P(1, l) Then

cuadro.Cells(j + 1, l + 1) = Range(resultado.Address).Offset(0,
2)

End If

Next l

Next j

Next resultado



End Sub













"Héctor Miguel" escribió en el mensaje de
noticias news:%23$G$
hola, (...) ?????

segun esta exposicion del "arreglo" (y lo que se alcanza a ver en la
imagen)...
-> que es lo que debe quedar en la columna "Campo" -?????-
(o como determinar cuando hay un nombre de campo o es parte del nombre
del equipo ?)

saludos,
hector.

p.d. OJO: los adjuntos NO los ve "todo mundo" :-((

__ OP __
Mira, los datos quedan como estos en la a1 y siguientes:
Jornada 2 el 28/09/2008
Fecha Encuentro Campo
D,28 12:30 AA.VV. La Marisma 6 - 4 S.D. Amistad B Municipal Frajanas
D,28 12:00 Real Rácing Club B 5 - 3 A.D. Cuevas del Castillo Inst. Racing
(4)
D,28 10:00 P.A. Gimnástica A 3 - 1 C.D. Saltor Los Ríos El Malecón (2)
D,28 11:30 C.D. Tropezón 2 - 5 E.M.F. Santander B Tanos (2)
S,27 16:30 S.D. Buelna 1 - 0 E.M.F. Reocín A Los Corrales
D,28 11:00 Peña Revilla 3 - 2 Velarde Camargo C.F. Regimiento
D,28 09:30 C.D. Cervantes 1 - 4 Atco. Perines B Regimiento
S,27 12:30 S.D. Nueva Montaña A 0 - 4 Club Bansander B Nueva Montaña
S,27 11:30 C.D. Liébana 1 - 2 E.M.F. Meruelo Tama
lo que quiero es que me separe por columnas el texto.
Para ello sin utilzar el codigo hago la separación de texto segun
"espacio", y me queda como en dibujo ...




Respuesta Responder a este mensaje
#4 Héctor Miguel
09/12/2008 - 00:48 | Informe spam
hola, !

... en la imagen igual no se aprecia, pero el separador es el siguiente: "-"
De todas formas ya lo consegui, aunque seguro que se podria mejorar y hacerlo mas rapido con este codigo ...



(probablemente) obtendrias mas rapidez con un codigo similar al ofrecido en la propuesta inicial -?-
solo que para hacer una nueva propuesta, tendrias que decidirte por alguna columna "de inicio" (A ?... B ?... C ?... )
y comentar que existe/pones/dejas/... en alguna columna anterior
y exponer dos o tres ejemplos del texto a separar (de preferencia, todo esto +/- exactamente) ;)

saludos,
hector.
Respuesta Responder a este mensaje
#5 Héctor Miguel
09/12/2008 - 05:33 | Informe spam
hola (de nuevo), ???

suponiendo que los datos obtenidos son en una sola columna (+/- exactamente como en tu exposicion anterior)...
Mira, los datos quedan como estos en la a1 y siguientes:
Jornada 2 el 28/09/2008
Fecha Encuentro Campo
D,28 12:30 AA.VV. La Marisma 6 - 4 S.D. Amistad B Municipal Frajanas
D,28 12:00 Real Rácing Club B 5 - 3 A.D. Cuevas del Castillo Inst. Racing (4)
D,28 10:00 P.A. Gimnástica A 3 - 1 C.D. Saltor Los Ríos El Malecón (2)
D,28 11:30 C.D. Tropezón 2 - 5 E.M.F. Santander B Tanos (2)
S,27 16:30 S.D. Buelna 1 - 0 E.M.F. Reocín A Los Corrales
D,28 11:00 Peña Revilla 3 - 2 Velarde Camargo C.F. Regimiento
D,28 09:30 C.D. Cervantes 1 - 4 Atco. Perines B Regimiento
S,27 12:30 S.D. Nueva Montaña A 0 - 4 Club Bansander B Nueva Montaña
S,27 11:30 C.D. Liébana 1 - 2 E.M.F. Meruelo Tama



- selecciona alguna celda NO en las dos primeras filas, sino a partir del primer encuentro (o cualquiera de los siguientes)
y ejecuta una macro +/- como la siguiente (se ve "medio aparatosa", pero creo que sera rapida y mas efectiva que la que usas)...

Sub Arregla_datos(): Application.ScreenUpdating = False
Dim Jornada As String: Jornada = ActiveCell.CurrentRegion.Cells(1, 1)
ActiveCell.CurrentRegion.Range("a1:a2").ClearContents
ActiveCell.CurrentRegion.TextToColumns _
ActiveCell.CurrentRegion.Cells(1), xlDelimited, , , , , , , 1, "-"
With ActiveCell.CurrentRegion
.Columns(1).Value = Evaluate("transpose(transpose(trim(" & .Columns(1).Address & ")))")
.Columns(2).Value = Evaluate("transpose(transpose(trim(" & .Columns(2).Address & ")))")
.Cells.Insert xlToRight
.Offset(, -2).Resize(, 1).Value = Evaluate("transpose(transpose(trim(left(" & .Columns(1).Address & ",4))))")
.Offset(, -1).Resize(, 1).Value = Evaluate("transpose(transpose(trim(mid(" & .Columns(1).Address & ",5,6))))")
.Offset(, 2).Resize(, 1).Value = Evaluate("""'""&transpose(transpose(trim(right(" & _
.Columns(1).Address & ",2))&"" - ""&trim(left(" & .Columns(2).Address & ",2))))")
.Columns(1).Value = _
Evaluate("transpose(transpose(trim(mid(" & .Columns(1).Address & ",12,len(" & .Columns(1).Address & ")-12))))")
.Columns(2).Value = Evaluate("transpose(transpose(trim(mid(" & .Columns(2).Address & ",3,100))))")
End With
With ActiveCell.CurrentRegion
.Offset(-1).Resize(1, 5) = Array("Fecha", "Hora", "Equipo Local", "Equipo Visitante", "GL-GV")
.EntireColumn.AutoFit
.Offset(-2).Resize(1, 1) = Jornada
End With
End Sub

saludos,
hector.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida