Jump to content

Archived

This topic is now archived and is closed to further replies.

dogwall

¿Pueden concatenarse dos arrays?

Recommended Posts

Buenos días, 

Tengo dos matrices (2 columnas y n filas) cada una. Mi idea es "concatenar" esas dos matrices y unirlas en una sola:

Matriz1: A, B

Matriz2: B, C

MatrizResultante: A, B, C, D.

¿Es posible hacer esto?

Gracias.

Share this post


Link to post
Share on other sites

Hola, algo así tal vez?

Sub Unir_array()

Dim Matriz1() As Variant
Dim Matriz2() As Variant
Dim MatrizResultante() As Variant
Dim i As Integer

Matriz1() = Array("A", "B")
Matriz2() = Array("B", "C")

ReDim MatrizResultante(UBound(Matriz1) + UBound(Matriz2) + 1)

For i = 0 To UBound(Matriz1)
    MatrizResultante(i * 2) = Matriz1(i)
    MatrizResultante(i * 2 + 1) = Matriz2(i)
Next i

End Sub

Comentas, salu2.

Share this post


Link to post
Share on other sites

Otra forma de hacerlo sin utilizar los ciclos for:

Sub Unir_array()
Dim Matriz1() As Variant
Dim Matriz2() As Variant

Matriz1() = Array("A", "B")
Matriz2() = Array("B", "C")

MatrizResultante = Split(Join(Matriz1, Chr(1)) & Chr(1) & Join(Matriz2, Chr(1)), Chr(1))

End Sub

Salu2

Share this post


Link to post
Share on other sites

Bien, ayer estuve haciendo alguna y aunque tengo aún dudas creo que voy por el buen camino.

De momento puede darse el tema por cerrado. Iré probando a ver que tal se me da y si tengo problemas vuelvo a preguntar.

 

Muchas gracias por tu ayuda Riddle :)

Share this post


Link to post
Share on other sites

Contesto vuestras dudas:

Gerson, el problema es que no tengo ni idea de arrays. Te comento lo que me ocurre: en ocasiones necesito pasar a un array un rango de datos bastante extenso (40 columnas y aprox. 15.000 filas). De esas 40 columnas, la mayoría de las ocasiones, sólo contienen datos útiles para mi las tres primeras columnas y las cuatro últimas. Cómo ya he dicho mi conocimiento sobre arrays es prácticamente nulo así que se me ocurrió como primera solución el crear dos arrays, uno para las primeras tres columnas y otro para las cuatro últimas. Una vez definidos los uniría para dejar uno solo.

Seguramente vosotros tengais respuesta a mi duda y seguramente el crear dos arrays no sea la mejor de la opciones... Ya digo que estoy depurando todas mis macros y el acelerar cálculos y operaciones pasa (a mi parecer) por utilizar arrays.

A Gabriel comentarle que no tengo acceso a Power Query, bueno si, tengo en casa pero en el trabajo, que es donde utilizo la mayoría de mis macros, no nos instalan complementos. De hecho en el trabajo utilizo Excel 2007 y estoy peleando con IT para que me pongan al menos el 2010... 

Muchas gracias a todos por vuestro interés y vuestra ayuda :)

Share this post


Link to post
Share on other sites

se puede hacer con array o con la instruccion set xxx=range(xx:xx).currentregion, se me ocurren varias formas de hacer lo que necesitas, el archivo anexo es solo un ejemplo, funciona asi, se crean tres regiones de datos en la hoja1, una con todos los datos, una segunda region con los datos de las 3 primeras columnas y una tercera region con los datos de las ultimas 4 columnas y luego las copio a otra region en la hoja2, asi quedan las 7 columnas que necesitas, en este caso 1513 archivos los proceso en maximo 1 segundo, con la cantidad de datos que manejas se debe tardar entre 10 y 15 seg maximo.

ejemplo_c.rar

Share this post


Link to post
Share on other sites

Buenas tardes a todos!

Coincido con que se hace muy difícil trabajar en un sentido "metafórico" y, para colmo de males, cuándo se le devuelve una solución, se encuentra con que no era lo que se imaginaba el usuario que efectuó la solicitud de ayuda...y digo imaginaba, porque por muy bien que se expliquen,es necesario el ejemplo práctico para entendernos mejor.

Hasta hace poco, eran ignorados los post dónde el usuario no cumpía con dicho requisito.

Ahora bien, y aquí va mi pedido a @Macro Antonio, para que ignore las faltas de cumplimiento de las normas y realice la entrega de la planilla (o lo que haya avanzado); eso nos servirá a quienes ingresamos al foro buscando soluciones. Personalmente, ingreso al foro para intentar ayudar a otro; pero sobre todo para ver nuevas ideas, soluciones prácticas y APRENDER un poco más.

No tengo duda, que todos aprenderemos si la planilla es ingresada al foro. Brindo por ello!

Que tengan todos una buena jornada!

 

Share this post


Link to post
Share on other sites

Buenos días, 

Sin ánimo de crear polémica, pues creo que no es necesario, no subí ejemplo ya que no lo creí necesario en un primer momento. En mi post de ayer expliqué con más detalle que es lo que busco y como únicamente añadía algo más de información a mi pregunta inicial tampoco creí necesario subir el fichero. De hecho Riddle, GabrielRaigosa y Macro Antonio respondéis en un primer momento sin mencionar fichero de ejemplo alguno, cosa que agradezco (y siempre agradeceré).

Cierto es que en las normas se indica que debe acompañarse a la pregunta con un ejemplo, cierto, pero como ya comento no lo creí necesario de primeras. Si posteriormente es necesario se me pide y punto, conozco las normas y siempre he colaborado.

Pero luego hay formas y formas de pedir las cosas y aunque la manera de @Macro Antonio para hacerlo no es excesivamente brusca si que me ha molestado en cierta medida. Entiendo que tu tiempo es tuyo y que tus aportaciones al foro son porque quieres y te apetece ayudar (de hecho a mi me has ayudado en varias ocasiones y te lo agradezco de veras) pero muchas veces, a los pesos pesados del foro os pierden las formas. Lo digo todo esto desde el respeto y sin ánimo de ofender a nadie, he sido administrador de una comunidad bastante grande de usuarios casi 10 años y se de lo que hablo.

Por último comentar que he subido el fichero de ejemplo y que la idea sigue siendo la misma: meter los datos de la primera columna y de las cuatro últimas en un array obviando el resto.

Gracias a todos.

 

 

ejemplo_dog.xlsx

Share this post


Link to post
Share on other sites
Hace 4 horas, dogwall dijo:

Por último comentar que he subido el fichero de ejemplo y que la idea sigue siendo la misma: meter los datos de la primera columna y de las cuatro últimas en un array obviando el resto.

Lee el título de tu consulta y tu primer post y dime en que se parece a esto que solicitas ahora.

Share this post


Link to post
Share on other sites

Publicaste la consulta el 12 de agosto, si tu último post hubiera sido el primero, posiblemente, hubieras tenido la respuesta  el propio día 12.

Sub Valores_Varios_Rangos_A_Array()
Dim Valores As Variant, Activa As Worksheet
'--
Application.ScreenUpdating = False
Set Activa = ActiveSheet
Sheets.Add
Activa.Columns("A").Copy ActiveSheet.Range("A1")
Activa.Range("W:Z").Copy ActiveSheet.Range("B1")
Valores = ActiveSheet.Range("A3:E" & _
          ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row)
'--
MsgBox "Valores(" & UBound(Valores, 1) & ", " & _
                    UBound(Valores, 2) & ")"
'--
Application.DisplayAlerts = False
ActiveSheet.Delete
End Sub

PD: Y si no caigo simpático, lo siento mucho, pero me parieron así. ;)

 

Share this post


Link to post
Share on other sites

@dogwall a diferencias de otros foros dedicados a otras temáticas, con Excel no hay cosa mejor que ver una muestra del problema planteado, eso no quiere decir que en todas las dudas se debe adjuntar un archivo, porque obviamente no siempre sera necesario, pero si toma en cuenta esto:

A PREGUNTAS GENERALES, RESPUESTAS GENERALES

Siguiendo con tu duda, prueba una opción mas, seguida a la de MacroAntonio 

Dim arrai As Range
vuf = Range("A" & Rows.Count).End(xlUp).Row
vuc = Cells(1, Columns.Count).End(xlToLeft).Column

Set arrai = Union(Range("A1:A" & vuf), Range(Cells(1, vuc - 3), Cells(vuf, vuc)))
arrai.Copy Hoja2.Range("A1")

Set arrai = Nothing

 

Saludos a todos!

Share this post


Link to post
Share on other sites

Ante todo gracias por vuestra ayuda.

Sobre si se parecen o no el primer mensaje mío y los siguientes la respuesta es no @Macro Antonio, pero este cambio de tema se debe a la pregunta de @Gerson Pineda:

La pregunta del millón es, cual es el propósito de unirlas?

Es a partir de ahí que expongo mi otra duda (tal vez debería haber abierto el post con ésta y no con la original) y es aquí cuando cambiamos. Pero ambas dudas van ligadas al mismo problema, mal planteado por mi parte eso si.

Hace 18 horas, Macro Antonio dijo:

PD: Y si no caigo simpático, lo siento mucho, pero me parieron así. ;)

No es el caso @Macro Antonio, de veras. No he tenido problemas con nadie del foro y espero no tenerlos. Siempre he recibido ayuda cuando la he necesitado. Y espero, en un futuro cercano, poder ayudar yo a los demás.

Gracias de nuevo por vuestros aportes

Share this post


Link to post
Share on other sites
Guest Cacho R
Hace 20 horas, Macro Antonio dijo:

... me parieron así. ;)

¿Cómo que te "parieron" así?...

¿Cuántas progenitoras se necesitaron para traerte a este mundo, Antoni? (¡Qué cosa rara este muchacho!)...

Share this post


Link to post
Share on other sites
Guest Cacho R

.

¿Estarás buscando "algo" así?...

 

Sub Macro348()
Dim Mat1, Mat2, Q&, i&, j%

Q = Range("a3", Cells(Rows.Count, "a").End(xlUp)).Count
Mat1 = Range("a3").Resize(Q)
Mat2 = Range("w3:z3").Resize(Q)

ReDim Preserve Mat1(1 To Q, 1 To 5)
For i = 1 To Q
  For j = 1 To 4
    Mat1(i, 1 + j) = Mat2(i, j)
  Next
Next

Range("ac3:ag3").Resize(Q) = Mat1
End Sub
En 25/8/2016 at 2:21 , dogwall dijo:

@Macro Antonio... Por último comentar que he subido el fichero de ejemplo y que la idea sigue siendo la misma: meter los datos de la primera columna y de las cuatro últimas en un array obviando el resto.

 

Share this post


Link to post
Share on other sites
Hace 9 horas, Cacho R dijo:

¿Cómo que te "parieron" así?...

¿Cuántas progenitoras se necesitaron para traerte a este mundo, Antoni? (¡Qué cosa rara este muchacho!)...

A mi me parieron entre 2 madres, es que soy mucho yo.:P

Share this post


Link to post
Share on other sites
Guest Cacho R

A mi me me parieron entre 2 madres, es que soy mucho yo.:P

Conduciendo mi automóvil parece que hice una maniobra poco feliz.

El automovilista que me precedía apuró su marcha, se puso a la par y dirigió epítetos sumamente desconsiderados respecto de la madre que me parió (¡muy extraño! puesto que -entiendo- no la conoce y si la conociese no podría menos que regocijarse ante tamaño ser humano).

Por ello me pregunto:

¿Y tú como haces, Antoni? ¿Recibes epítetos vulgares por partida doble? ¿O simplemente no conduces?...

 

Share this post


Link to post
Share on other sites
Hace 11 horas, Cacho R dijo:

¿Y tú como haces, Antoni? ¿Recibes epítetos vulgares por partida doble? ¿O simplemente no conduces?...

 

En realidad es fácil, ya que una madre me parió a mi y la otra a mi otro yo, con lo cual, queda claro para que madre va el recuerdo sobre su profesión, ya que solo uno de mis dos yos conduce el automóvil. :P

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.

INFORMACIÓN BÁSICA SOBRE PROTECCIÓN DE DATOS

Responsable: Sergio Andrés Celemín

Finalidad: Moderar y responder comentarios de usuarios. Recuerda que la información que facilites es pública, y los datos que incluyas los leerá cualquier visitante de esta web, así como el avatar que poseas.

Legitimación: Consentimiento del interesado.

Destinatarios: Hetzner Online GmbH.

Derechos: Puedes ejercitar en cualquier momento tus derechos de acceso,
rectificación, supresión, oposición y demás derechos legalmente establecidos a
través del email sergio@ayudaexcel.com.

Información adicional: Encontrarás más información en la política de privacidad.




×
×
  • Create New...

Important Information

Privacy Policy