Saltar al contenido

adaptar datos con macro


Recommended Posts

publicado

Bueno gente buenas noches

Mi duda es la siguiente tengo unos datos nuevos que genera un software pero los genera muy diferentes como los trabajamos la idea es adaptar esa misma informacion al formato que ya manejamos , lo esplico mejor en el aejmplo que subo

de antemano muchas gracias si me pueden colaborar

EJEMPLO PARA MACRO.rar

publicado

No he recibido ningun comentario por favor si no fui muy claro por favor hacermelo saber ya que necesito solucionar este tema lo mas pronto posible, o por favor darme algun consejo como lo puedo modificar .

gracias quedo atento.

  • 1 month later...
publicado

ok super voro es justo lo que necesito , pero tengo una duda como puedo para adaptarlos para que me conviertas no solo una fila si no muchas , gracias quedo atento a su respuesta

  • 2 months later...
publicado

Hola Iowrider.... Perdona por tanta demora en la respuesta,pero.. he estado mucho tiempo desconectado de todo esto y no he leido hasta ahora tu mensaje... ni el de el amigo jhonleonardo... si sigue interesandote la explicacion... solo dimelo y te la hare

publicado

Hola Jhonleonardo... en oprimer lugar disculparme por no responder con antelacion...

No se si aun te interesa la solucion a tu problema... si es asi... mandame el archivo que tienes con los datos que genera el sofware nuevo he intentare darle solucion,...

Y... lo dicho... pido perdon

Salvador.

publicado

Estimado supervoro, siempre es bueno aprender, de manera que si te animas yo felizzz :)

Se agredece el gesto de responder de esta manera.

Saludos desde Chilito hermoso y quedo atento.

publicado

Estupendo amigo lowrider..... te paso la macro con los comentarios añadidos para la mejor comprension.... De todos modos... creo que la mejor manera de aprender sobre las macros es ejecutarlas en el modo paso a paso e ir viendo como se van ejecutando las instrucciones sobre la hoja de calculo.

Para cualquier duda... no dudes en preguntar...

Un saludo desde Valencia ( España )

Sub pasar_datos()

Application.ScreenUpdating = False
Range("A3:Q3").Select 'Selecciona el rango entrada de datos...
Selection.Copy
Range("A5").Select '...para pasarlo al destino definitivo
Selection.PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
For A = 1 To 30 ' con este bucle le asigna a "P"(Preguntas)numeros del 1 al 30
Cells(4, 17 + A) = "P" & A
Next A
[Q3].Activate ' Ahora nos situamos en la fila donde se encuentran los "OK"....( fila 3)
ARRIBA:
ActiveCell.End(xlToRight).Select '...y desde Q3 nos desplazamos hacia la derecha hasta
' tropezar con el primer "OK"

If ActiveCell.Column > 200 Then ' en el caso de que no hubiese ningun "OK" ...
[A1].Activate ' activa la celda A1 y salimos de la rutina
Exit Sub
End If

CELDA = ActiveCell.Address '... una vez encontrado el primer "OK", toma nota de la direccion de dicho "OK" (variable CELDA)
VALOR = ActiveCell.Offset(-1, 0).Value '... toma nota del valor que hay en la celda inmediatamente superior (variable VALOR)....
ColumnA = ActiveCell.Column 'y del nº de columma
Cells(1, ColumnA).Activate ' ... se posiciona el la primera celda de arriba ( donde esta el nº de Pregunta )
PE = ActiveCell.Text '... y toma nota del nº de Pregunta ( variable PE )

[4:4].Find(WHAT:=PE, LOOKAT:=xlWhole).Activate '...Ahora en la columna nº4,busca el nº de pregunta (variable PE)
ActiveCell.Offset(1, 0) = VALOR ' ... y en la celda inmediatamente inferior anota el valor que habia tomado antes (variable VALOR)
Range(CELDA).Select ' Ahora vuelve a la posicion donde encontro el primer "OK" (variable CELDA).....
GoTo ARRIBA ' .... para desde alli volver a la misma rutina de encontrar otro "OK" en la fila3
End Sub[/CODE]

publicado

Estimado, muy agradecido. En especial con eso de

[4:4].Find(WHAT:=PE, LOOKAT:=xlWhole).Activate

Nunca visto para mí y me genera millones de dudas, sobre qué más se puede hacer con este tipo de instrucciones.

Podrías crear un tema para enseñar, pues me siento como viendo la caja de pandora... jejeje pero con efectos positivos.

Muy agradecido y si no es abusar de la buena voluntad y conocimientos, si pudiese considerar el tema de ampliar esta sección.

Saludos cordiales desde mi Chile hermoso. Y desde ya muy agradecido.

publicado

Me alegro de que te haya servido de algo la explicacion... la verdad es que aqui en este foro puedes aprender muchisimas cosas como estas... Te aconsejo que utilices la grabadora de macros y luego... edites las macros generadas y con la ejecucion paso a paso ir viendo el desarrollo de las mismas... tambien es muy util utilizar la Ayuda VBA ( seleccionar la palabra que te llame la atencion,en este caso Find y pulsar F1...... alli te aparecera una definicion con ejemplos de todo lo relacionado con lo buscado...).

Recibe un saludo y muchos animos en la tarea esta de aprender.

Salvador

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

  • 109 ¿Te parecen útiles los tips de las funciones? (ver tema completo)

    1. 1. ¿Te parecen útiles los tips de las funciones?


      • No
      • Ni me he fijado en ellos

  • Ayúdanos a mejorar la comunidad

    • Donaciones recibidas este mes: 0.00 EUR
      Objetivo: 130.00 EUR
  • Archivos

  • Estadísticas de descargas

    • Archivos
      188
    • Comentarios
      98
    • Revisiones
      29

    Más información sobre "Cambios en el Control Horario"
    Última descarga
    Por pegones1

    4    1

  • Crear macros Excel

  • Mensajes

    • Hola, veo que tienes 365, así que esta forma funcionará   Almacen.xlsx
    • Buenos días  @LeandroA espero estes bien Tengo un caso idéntico al planteado en la siguiente pregunta: Sin embargo, a diferencia de quien planteo originalmente la pregunta al correr el código no obtengo ningún resultado podrían ayudarme a resolver este inconveniente y que al hacer click en el Botón Guardar (CommandButton3) del Formulario RCS (frmrcs) el archivo pdf quede configurado con orientación vertical, márgenes superior, inferior, derecho e izquierdo = 1 y en página tamaño carta. Si acaso influye uso Microsoft Excel LTSC MSO (versión 2209 Compilación16.0.1.15629.20200) de 64 bits Mucho le sabre agradecer la ayuda que me pueda dar  RCS PRUEBA - copia.xlsm
    • @JSDJSDCon gusto mi estimado Para la opción 1: Sub Surtirhastadondealcanse() Dim ws As Worksheet Set ws = ThisWorkbook.Sheets(1) Dim filaInicio As Integer: filaInicio = 4 Dim filaFin As Integer: filaFin = 7 Dim colInventario As Integer: colInventario = 2 Dim colSolicitudesInicio As Integer: colSolicitudesInicio = 4 ' Columna C Dim colResultadoInicio As Integer: colResultadoInicio = 9 ' Columna I Dim colTotalSurtido As Integer: colTotalSurtido = 12 ' Columna L Dim colFinalInventario As Integer: colFinalInventario = 13 ' Columna M Dim numClientes As Integer: numClientes = 3 Dim fila As Integer, i As Integer For fila = filaInicio To filaFin Dim inventario As Double inventario = Val(ws.Cells(fila, colInventario).Value) Dim solicitudes(1 To 3) As Double Dim surtido(1 To 3) As Variant Dim totalSurtido As Double: totalSurtido = 0 ' Leer solicitudes For i = 1 To numClientes If IsNumeric(ws.Cells(fila, colSolicitudesInicio + i - 1).Value) Then solicitudes(i) = CDbl(ws.Cells(fila, colSolicitudesInicio + i - 1).Value) Else solicitudes(i) = 0 End If surtido(i) = "POR FALTA STOCK" Next i ' Surtir de acuerdo al inventario disponible For i = 1 To numClientes If solicitudes(i) > 0 Then If inventario >= solicitudes(i) Then surtido(i) = solicitudes(i) inventario = inventario - solicitudes(i) totalSurtido = totalSurtido + solicitudes(i) ElseIf inventario > 0 Then surtido(i) = inventario totalSurtido = totalSurtido + inventario inventario = 0 Else surtido(i) = "POR FALTA STOCK" End If End If Next i ' Escribir resultados en las columnas correspondientes para cada cliente For i = 1 To numClientes With ws.Cells(fila, colResultadoInicio + i - 1) If surtido(i) = "POR FALTA STOCK" Then .Value = surtido(i) .Font.Color = vbRed Else .Value = surtido(i) .Font.Color = vbBlack End If End With Next i ' Escribir total surtido y existencia final ws.Cells(fila, colTotalSurtido).Value = totalSurtido ws.Cells(fila, colFinalInventario).Value = inventario Next fila MsgBox "Resultado surtido cargado con éxito...", vbInformation End Sub Para la opción 2:   Sub surtirenpartesiguales() Dim ws As Worksheet Set ws = ThisWorkbook.Sheets(1) Dim filaInicio As Integer: filaInicio = 13 Dim filaFin As Integer: filaFin = 16 Dim colInventario As Integer: colInventario = 2 Dim colSolicitudesInicio As Integer: colSolicitudesInicio = 4 ' Columna C Dim colResultadoInicio As Integer: colResultadoInicio = 9 ' Columna I Dim colTotalSurtido As Integer: colTotalSurtido = 12 ' Columna L Dim colFinalInventario As Integer: colFinalInventario = 13 ' Columna M Dim numClientes As Integer: numClientes = 3 Dim fila As Integer, i As Integer For fila = filaInicio To filaFin Dim inventario As Double inventario = Val(ws.Cells(fila, colInventario).Value) Dim solicitudes(1 To 3) As Double Dim surtido(1 To 3) As Variant Dim totalSurtido As Double: totalSurtido = 0 Dim totalPedido As Double: totalPedido = 0 ' Leer solicitudes For i = 1 To numClientes If IsNumeric(ws.Cells(fila, colSolicitudesInicio + i - 1).Value) Then solicitudes(i) = CDbl(ws.Cells(fila, colSolicitudesInicio + i - 1).Value) totalPedido = totalPedido + solicitudes(i) Else solicitudes(i) = 0 End If surtido(i) = 0 Next i ' Si hay suficiente inventario, surtir lo que el cliente pide If inventario >= totalPedido Then For i = 1 To numClientes If solicitudes(i) > 0 And inventario >= solicitudes(i) Then surtido(i) = solicitudes(i) inventario = inventario - solicitudes(i) totalSurtido = totalSurtido + solicitudes(i) End If Next i Else ' Reparto base igualitario Dim baseSurtido As Long baseSurtido = Int(inventario / numClientes) For i = 1 To numClientes If solicitudes(i) > 0 Then If solicitudes(i) <= baseSurtido Then surtido(i) = solicitudes(i) inventario = inventario - solicitudes(i) totalSurtido = totalSurtido + solicitudes(i) Else surtido(i) = baseSurtido inventario = inventario - baseSurtido totalSurtido = totalSurtido + baseSurtido End If End If Next i ' Repartir sobrante restante uno por uno, respetando lo pedido Do While inventario > 0 For i = 1 To numClientes If surtido(i) < solicitudes(i) Then surtido(i) = surtido(i) + 1 totalSurtido = totalSurtido + 1 inventario = inventario - 1 If inventario = 0 Then Exit For End If Next i Loop End If ' Escribir resultados en las columnas correspondientes para cada cliente For i = 1 To numClientes With ws.Cells(fila, colResultadoInicio + i - 1) If surtido(i) = 0 Then .Value = "POR FALTA STOCK" .Font.Color = vbRed Else .Value = surtido(i) .Font.Color = vbBlack End If End With Next i ' Escribir total surtido y existencia final ws.Cells(fila, colTotalSurtido).Value = totalSurtido ws.Cells(fila, colFinalInventario).Value = inventario Next fila MsgBox "Resultado surtido cargado con éxito...", vbInformation End Sub Saludos, Diego
    • Buenos dias.  Estoy trabajando en una hoja para poder llevar un control de un pequeño almacén.  Tengo un pedido con varias líneas y "lotes" y necesito sacar las ubicaciones que coincidan con la referencia y lote que pone en el pedido. El problema viene cuando tengo la misma referencia y mismo lote en ubicaciones diferentes y necesito sacar la información en columnas diferentes. No se si  me he explicado bien, pero creo que con el ejemplo adjunto se entiende mejor. Agradecería mucho si me pudieran ayudar  Libro1.xlsx
    • Exelente solución mil gracias 
  • Visualizado recientemente

    • No hay usuarios registrado para ver esta página.
×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.