Concatenar mediante codigo vba

18/12/2009 - 00:20 por Federico | Informe spam
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!!

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
18/12/2009 - 03:53 | Informe spam
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.
Respuesta Responder a este mensaje
#2 Héctor Miguel
18/12/2009 - 04:33 | Informe spam
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 __
... 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) ?
Respuesta Responder a este mensaje
#3 Héctor Miguel
18/12/2009 - 04:45 | Informe spam
hola (otra vez), Federico !

tambien puedes ver un articulo relacionado con hacer concatenaciones de rangos aqui:
Concatenar Matrices
http://www.teladearana.es/seccion/e...7-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.
Respuesta Responder a este mensaje
#4 Federico
18/12/2009 - 20:33 | Informe spam
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!!!!
Respuesta Responder a este mensaje
#5 Héctor Miguel
19/12/2009 - 04:02 | Informe spam
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)
...
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida