Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Concatenar mediante codigo vba

699 views
Skip to first unread message

Federico

unread,
Dec 17, 2009, 6:20:01 PM12/17/09
to
buenaa tardes, espero den solucion a mi pregunta.
tengo un archivo excel que imprime polizas de cheque.
en la hoja polizas de cheque, para ser mas exacto, hay una celda donde pongo
manualmente el concepto de dicha poliza, el ranfo es A18, pero esta
combinada, hasta a18:f20, el concepto es los numeros de facturas que estoy
pagando, del cual se extraerian de Hoja2 G9 en adelante, podria ser una o mas
facturas separadas por comas, claro primero la macro tomaria en cta el cheque
o folio de operacion tomado de la hoja poliza de cheque
pudiendo quedar asi

Folio op. & 45874566 &pao de fact & polizacheque!g9 mas las que encuentre
dentro de esa columna.

sin excederse de 60 caracteres, si hay mas que hasta ahi corte.

espero haberme dado a entender si no podria mandarles la hoja por mail

mil gracias por su ayuda!!

H�ctor Miguel

unread,
Dec 17, 2009, 9:53:32 PM12/17/09
to
hola, Federico !

> ... un archivo... imprime polizas de cheque.... una celda... combinada, hasta a18:f20
> el concepto... numeros de facturas que estoy pagando... se extraerian de Hoja2 G9 en adelante
> podria ser una o mas facturas separadas por comas... primero la macro tomaria... el cheque o folio de operacion


> tomado de la hoja poliza de cheque pudiendo quedar asi
> Folio op. & 45874566 &pao de fact & polizacheque!g9 mas las que encuentre dentro de esa columna.

> sin excederse de 60 caracteres, si hay mas que hasta ahi corte...

- de cual celda se "tomaria" la macro el numero de cheque/folio de operacion ?
- cual seria el rango maximo con numeros de facturas a partir de [G9] en la hoja "polizacheque" ?
- que significa (exactamente) ... una o mas facturas separadas por comas..." ?
- se puede suprimir/abreviar/... el texto "pago de fact" (para no agotar el limite de 60 caracteres) ?

saludos,
hector.


H�ctor Miguel

unread,
Dec 17, 2009, 10:33:13 PM12/17/09
to
hola (de nuevo), Federico !

en via de mientras, prueba con una macro +/- como la siguiente:
- suponiendo que el folio de la factura se toma de la celda [B5] de la hoja activa
- y que el rango de posibles datos en la hoja "polizacheque" fuera [G9:G45]
(ajusta/adapta/corrige/... donde mis supuestos sean diferentes de TU realidad)

Sub A()
Dim n As Byte, x As Byte, Facturas As String, Texto As String
With Worksheets("polizacheque")
x = Application.CountA(.Range("g9:g45"))
If x = 0 Then Exit Sub
For n = 1 To x
Facturas = Facturas & ", " & .Range("g9").Offset(n - 1)
Next
Texto = "Folio op. " & Range("b5") & " en pago de facts. " & Mid(Facturas, 3)
Range("a18") = Left(Texto, 60)
End With
End Sub

saludos,
hector.

__ previos __

H�ctor Miguel

unread,
Dec 17, 2009, 10:45:35 PM12/17/09
to
hola (otra vez), Federico !

tambien puedes ver un articulo relacionado con hacer concatenaciones de rangos aqui:
Concatenar Matrices
http://www.teladearana.es/seccion/excel/107-h11.html
(SIN macros, solo definiendo nombres y algunas macro-funciones del "vejo" excel-4)

y al final de la pagina puedes descargar un archivo con los ejemplos
asi como enlaces a otros articulos con temas relacionados (CON macros)

saludos,
hector.


Federico

unread,
Dec 18, 2009, 2:33:01 PM12/18/09
to
me quedo asi.

Sub A()
Dim n As Byte, x As Byte, Facturas As String, Texto As String

With Worksheets("Hoja2")


x = Application.CountA(.Range("g9:g45"))
If x = 0 Then Exit Sub
For n = 1 To x
Facturas = Facturas & ", " & .Range("g9").Offset(n - 1)
Next

Texto = "Folio op. " & Range("D15") & " en pago de facts. " &

Mid(Facturas, 3)
Range("a18") = Left(Texto, 60)
End With
End Sub

en principio pense que tendria que reasignar el resultado a
sheet.(polizacheque).range(d15).

pero no, todo salio a pedir de boca, ya que en la hoja dos es mi
reporteador, de ahi saco info de la bd hoja1, una vez que obtengo info en la
hoja dos de ahi se saca los folios de facturas, y ya concatenado todo se
vacia en la hoja poliza de cheque.

no se si sea posible ayudarme en cto a entender el codigo, que en principio
entiendo
se establece una variable n de tipo byte, creo que es de 1 a 9, para ahorrar
recursos, despues se crea la variable x, que es donde se asignara la el
numero de facturas que hay, usando la funcion propia de excel contara, de ahi
ya no entiendo mucho esto, del desplazamiento offset


Facturas = Facturas & ", " & .Range("g9").Offset(n - 1)
Next

mid, extrae el largo establecido, segun creo entender.

seria tan amable de comentarme el codigo?.

entendio perfectamente mi pedido!!!! me dejo sorprendido

Felicidades!!!!

H�ctor Miguel

unread,
Dec 18, 2009, 10:02:27 PM12/18/09
to
hola, Federico !

- en cuanto a las variables declaradas como de tipo "byte"...
efectivamente, son para ahorrar espacio (reservado en memoria) al ejecutar el codigo
el alcance es de 0 a 255 (en tanto no se requiera superarlo, este tipo de datos sera suficiente)

- en cuanto al .offset(n_filas, n_columnas)
sirve como la funcion de hoja de calculo DESREF(... (para DESplazarREFerencias)
.offset(0) se refiere a la referencia en si misma
.offset(1) se refiere a la celda una fila abajo de "la referencia"

(la ayuda en linea {F1} de vba/excel es mas clara en relacion con ambos puntos)

saludos,
hector.

__ OP __


> me quedo asi.
>
> Sub A()
> Dim n As Byte, x As Byte, Facturas As String, Texto As String
> With Worksheets("Hoja2")
> x = Application.CountA(.Range("g9:g45"))
> If x = 0 Then Exit Sub
> For n = 1 To x
> Facturas = Facturas & ", " & .Range("g9").Offset(n - 1)
> Next
> Texto = "Folio op. " & Range("D15") & " en pago de facts. " & Mid(Facturas, 3)
> Range("a18") = Left(Texto, 60)
> End With
> End Sub
>

> ... entender el codigo, que en principio entiendo


> se establece una variable n de tipo byte, creo que es de 1 a 9, para ahorrar recursos

> despues se crea la variable x, que es donde se asignara la el numero de facturas que hay

> usando la funcion propia de excel contara, de ahi ya no entiendo mucho esto, del desplazamiento offset
> Facturas = Facturas & ", " & .Range("g9").Offset(n - 1)

> ...


Federico

unread,
Dec 19, 2009, 4:31:01 PM12/19/09
to
sr hector miguel, le quedo agradecido por su aportacion y mas agradecido por
la humildad y sencillez de su persona.

Saludos Cordiales!!!

H�ctor Miguel

unread,
Dec 19, 2009, 9:22:49 PM12/19/09
to
hola, Federico !

> ... agradecido por su aportacion ...

gracias a ti, por el "feed-back"
(y me alegra haber acertado en las suposiciones) :D

saludos,
hector.


0 new messages