Macro para desglosar por item en columnas

-----

Para Dante Ammor

---

Primero que nada, me disculpo por mi compañero Carlos Manuel Arana

Somos compañeros en el trabajo y utilizamos el mismo archivo y el hizo la ultima publicacion

Donde se porto mal, por eso te pedimos disculpas si te ofendimos y te quiero pedir si es posible me ayudes con el mismo problema

La ultima publciacion que hiciste es como queremos que funcione el codigo

Este tu me lo proporcionaste

Private Sub CommandButton1_Click()
Dim condi1 As Date
Dim condi2 As Date
cond1 = TextBox1
cond2 = TextBox2
'DECLARACIÓN de variables
Dim a As Variant, b As Variant, c1 As Variant, c2 As Variant
Dim dic As Object, i As Long, j As Long, k As Long, sh As Worksheet
'ENTRADAS
Set sh = Sheets("Puestos")
Set dic = CreateObject("Scripting.Dictionary")
dic.CompareMode = vbTextCompare
a = Sheets("Salidas2").Range("A3:E" & Sheets("Salidas2").Range("A" & Rows.Count).End(3).Row).Value2
b = sh.Range("A3", sh.Range("A" & Rows.Count).End(3)).Value2
ReDim c1(1 To UBound(b), 1 To 4)
ReDim c2(1 To UBound(b), 1 To 6)
For i = 1 To UBound(b, 1)
dic(b(i, 1)) = i
Next
'PROCESO
For i = 1 To UBound(a, 1)
If a(i, 2) >= CDate(cond1) And a(i, 2) <= CDate(cond2) And dic.exists(a(i, 1)) Then
j = dic(a(i, 1))
k = Month(a(i, 2))
Select Case k
Case 1 To 4: c1(j, k) = c1(j, k) + a(i, 5)
Case 5 To 10: c2(j, k - 4) = c2(j, k - 4) + a(i, 5)
End Select
End If
Next
'SALIDA
sh.Range("B3").Resize(UBound(c1, 1), 4).Value = c1
sh.Range("G3").Resize(UBound(c2, 1), 6).Value = c2
Range("A1").Select
End Sub

Esto publicaste por ultimo

Y asi queremos que funcione

Este es un ejemplo con datos, en ningún momento menciono líneas de la macro:

En la hoja "salida2", en la celda D28 tienes "laboratorio", en la E28 tienes "50" y en la A28 tienes "Fastener caja"

En la hoja "puestos" en la celda "C2" tienes "laboratorio".

Supongo que en la hoja "puestos" en la fila donde encuentre "Fastener caja", vamos a suponer que está en la fila 20, entonces en la celda C20 hay que pegar el valor "50".

Si me haces el favor

1 respuesta

Respuesta
3

De acuerdo cesar corado, con gusto te ayudo, pero quisiera que me ayudaras a ayudarte.

El ejemplo que yo puse solamente son suposiciones, me gustaría que tú pusieras un ejemplo con datos y con imágenes de la siguiente manera:

1. Una imagen de la hoja "salida2", de esta hoja deberás tomar un ejemplo para explicarlo.

2. Una imagen de la hoja "puestos" antes de poner los resultados, en esta hoja deberá mostrarse claramente el ejemplo que se visualiza en la imagen1.

3. Por último, la misma hoja "puestos", pero esta vez con el resultado esperado.

En resumen deberás poner 3 imágenes. Esto no es opcional. Sin las tres imágenes expuestas con claridad no es posible que yo les pueda ayudar.


Lo que debe tener cada imagen.

ok

hay cosas que no las domino

pero voy a tratar de explicarlo lo mejor posible

esta es la hoja Salidas2

se llama Salidas porque es donde almaceno todo lo que sale de la bodega

1. en la columna A estan los items repetidos que son los mismos de la columna A de la hoja Puestos pero no repetidos

2. tambien en esta hoja en la columna B estan las fechas de salida

3. en la columna D estan los destinatarios de las salidas, que son los mismos de los encabezados de las columnas B a la L (excepto la F) de la hoja Puestos

4. en la columna E estan las cantidades que corresponde a las salidas de cada item de la columna A.

esta es la hoja Puestos

1. como dije antes en la columna A estan todos los items pero no repetidos, que son los de la columna A de la hoja Salidas2

2. en la fila 2 y desde la columna B estan los items no repetidos que corresponden a los de la columna D de la hoja Salidas2

3. debajo de cada item (encabezado) deben ir las cantidades que salieron de cada uno de ellos en la hoja Salidas2, si un item de la coluna A salio varias veces (en el rango de fechas establecido, (por ejemplo a Laboratorio)) entonces debe sumarse

al codigo le hice modificaciones para adecuarlo a lo que necesitaba pero me da error en la linea

k = Month(a(i, 4))

el 4 es la columna D de la hoja Salidas2 que es donde estan los destinatarios y que estan en los encabezados de la hoja Puestos en la fila 2

Private Sub CommandButton1_Click()
Dim condi1 As Date
Dim condi2 As Date
cond1 = TextBox1
cond2 = TextBox2
'DECLARACIÓN de variables
Dim a As Variant, b As Variant, c1 As Variant, c2 As Variant
Dim dic As Object, i As Long, j As Long, k As Long, sh As Worksheet
'ENTRADAS
Set sh = Sheets("Puestos")
Set dic = CreateObject("Scripting.Dictionary")
dic.CompareMode = vbTextCompare
a = Sheets("Salidas2").Range("A3:E" & Sheets("Salidas2").Range("A" & Rows.Count).End(3).Row).Value2
b = sh.Range("A3", sh.Range("A" & Rows.Count).End(3)).Value2
ReDim c1(1 To UBound(b), 1 To 4)
ReDim c2(1 To UBound(b), 1 To 6)
For i = 1 To UBound(b, 1)
dic(b(i, 1)) = i
Next
'PROCESO
For i = 1 To UBound(a, 1)
If a(i, 2) >= CDate(cond1) And a(i, 2) <= CDate(cond2) And dic.exists(a(i, 1)) Then
j = dic(a(i, 1))
k = (a(i, 4))
Select Case k
Case 1 To 4: c1(j, k) = c1(j, k) + a(i, 5)
Case 5 To 10: c2(j, k - 4) = c2(j, k - 4) + a(i, 5)
End Select
End If
Next
'SALIDA
sh.Range("B3").Resize(UBound(c1, 1), 4).Value = c1
sh.Range("G3").Resize(UBound(c2, 1), 6).Value = c2
Range("A1").Select
End Sub

a mi me salen 2 imagenes

pero espero explicarme lo mejor posible

aunque tu ya habias dado con el asunto

Este es un ejemplo con datos, en ningún momento menciono líneas de la macro:

En la hoja "salida2", en la celda D28 tienes "laboratorio", en la E28 tienes "50" y en la A28 tienes "Fastener caja"

En la hoja "puestos" en la celda "C2" tienes "laboratorio".

Supongo que en la hoja "puestos" en la fila donde encuentre "Fastener caja", vamos a suponer que está en la fila 20, entonces en la celda C20 hay que pegar el valor "50".

si necesitas mas informacion tratare de dartela

de antemano

gracias

Vamos otra vez desde el principio. Lee con atención lo que estoy solicitando:

1. Deben ser 3 imágenes. Podrías recortar la imagen, solamente muestra la hoja de excel. Algunas filas y las columnas necesarias ( no pongas toda la pantalla ).

2. No pongas código.

Estas son las 3 imágenes que necesito:

3. Imagen 1. Con La hoja Salida2.

En esa imagen puedo ver estos datos:

Celda A3: Jeringa descartable 3mL con aguja
Celda D3: Saneamiento Ambiental
E3: la cantidad 300

El ejemplo que quiero, consiste explicar qué hago con esos 3 datos, es decir, qué hago con el dato Jeringa descartable 3mL con aguja, qué hago con el dato Saneamiento Ambiental y qué hago con el dato 300.


En ninguna parte de tú explicación mencionas datos. Solamente pusiste mi ejemplo. No quiero ver mi ejemplo, lo que quiero es que tú construyas un ejemplo. Ya te di una pista, quiero que expliques el ejemplo Jeringa descartable 3mL con aguja


4. Imagen 2. La imagen 2 es de la hoja "Puestos". Se supone que en la hoja "Puestos" tienes un item con el nombre "Jeringa descartable 3mL con aguja". Quiero ver en la imagen 2 el dato "Jeringa descartable 3mL con aguja", quiero ver en la imagen 2 el dato " Saneamiento Ambiental", y supongo que la cantidad es 0.

5. Imagen 3. La imagen 3 es de la hoja "Puestos". Quiero ver en la imagen 3 el dato "Jeringa descartable 3mL con aguja", quiero ver en la imagen 2 el dato "Saneamiento Ambiental", y quiero ver en dónde pusiste los 300.


disculpa sino me explico exactamente como pedis

1. en la hoja salidas2 columna A tengo Jeringa descartable 3mL con aguja varias veces, igual en la hoja Puestos en la columna A pero solo una vez

2. en la hoja Salidas2 tengo Post - Consulta en la columna D varias veces, igual en la hoja Puestos tengo Post - Consulta en la columna B fila 2. pero solo una vez como encabezado

3. en la hoja Salidas2 en la columna E tengo 600 jeringas

esas 600 jeringas deben colocarse en la columna B (que es Post - Consulta), fila 214, 

si hay varias jeringas en el rango de fechas inicial y final (ejem. 01/01/2020 al 31/08/2020) deben sumarse y colocarse en la columna y fila antes mencionada

las fechas inicial y final se sacan de la columna B de la hoja Salidas2

links de la vez que me proporcionaste ese codigo

Macro para filtrar por mes

Macro para desglosar por cuatrimestre

Macro para desglosar por mes

Olvida las explicaciones.

En la imagen que tú pusiste solamente veo un suministro: "Jeringa descartable 3mL con aguja" con Saneamiento Ambiental y cantidad 300.

¿De dónde sacas 600? Por eso no entiendo qué quieren!


Solamente basa tu explicación en los datos de la imagen. Probablemente tienes miles de datos, pero en la imagen solamente veo un dato con "Jeringa descartable 3mL con aguja"


No te pedí que pusieras enlaces. No pongas enlaces, no pongas códigos. Solamente 3 imágenes.


Simplemente pon 3 imágenes:

Imagen 1. Hoja salida2

Imagen 2. Hoja puestos (vacía)

Imagen 3. Hoja puestos (llena)

En la imagen 3 quiero ver en dónde tienes estos datos:

"Jeringa descartable 3mL con aguja" con Saneamiento Ambiental y cantidad 300.


Ya no expliques más. Solamente pon las 3 imágenes.

no entiendo de donde sacas Saneamiento Ambiental

en los encabezados de la hoja Puestos solo tengo

Post - Consulta

Laoboratorio

TB

Inmunizaciones

P/S Arapahoe

P/S Cerritos

P/S Playitas

P/S Mojanales

P/S Virginia

P/S Gran Cañon

los datos de estos son los que debe extraer el codigo

las cantidades de la columna E de la hoja Salidas2 que esten entre las fechas inicial y fecha final

del userform

puse Saneamiento Ambiental en la hoja Puestos porque tu lo estas mencionando pero esa no esta en la hoja Puestos en realidad solo los que mencione anteriormente

Tú pusiste "saneamiento ambiental" en tu primer imagen de este post.

Solamente estoy proyectando tus datos. Si tú proporcionas información errónea, entonces los resultados serán erróneos.

Entonces, pon un ejemplo correcto.

Pon otra vez 3 imágenes. No pongas 2 ni 4. Quiero 3 imágenes.

Me permití realizar un pequeño esquema de lo que debe tener un ejemplo.

Si así lo desean, estoy dispuesto a seguir colaborando con ustedes, solamente quiero entender su necesidad. Si lo plantean en 3 imágenes como mi "pequeño esquema", con gusto les ayudo con la macro.

Recuerden, son datos que yo no conozco, no estoy familiarizado con esos datos, para ustedes es obvio porque los conoces y también los están visualizando. Por eso quiero las imágenes para ver los datos y el resultado.

buen dia

hoja salidas2

hoja puestos vacia

hoja puestes con un ejemplo

No veo en la imagen 1 el "Acetaminofen 100mg-mL Frasco Gotero", tampoco veo la cantidad "156".

Los ejemplos deben ser claros y coherentes.

Es justo lo que estoy tratando de entender. ¿De dónde sacas tú el dato "Acetaminofen 100mg-mL Frasco Gotero"?

Quieres que yo inventé el dato "Acetaminofen 100mg-mL Frasco Gotero" y también invente la cantidad "156". ¿Es un número aleatorio? O cómo determino el número 156. Porque no lo veo en la imagen1.

La imagen 1 es justamente para que yo vea en dónde esta el dato del ejemplo y en dónde lo voy a buscar en la imagen2.

Pero el dato de la imagen2 no coincide con los datos de la imagen1.


Tal vez te equivocaste de imagen 1, si tienes la imagen 1 correcta entonces, podrías arreglar la imagen1 y que el ejemplo de la imagen1 coincida con los datos mostrados en las imágenes 2 y 3.


Con gusto te sigo colaborando, pero sigo sin entender de dónde salen los datos.

la hoja Puestos va a extraer los datos de la hoja Salidas2, en esta estan todos los datos que necesita la otra hoja.

el codigo que te original que me proporcionaste la primera vez hace lo mismo

solo que es de la hoja Entradas2 a la hoja CT (cuatrimestre)

ahora solo cambie la hoja Entradas2 por la hoja Salidas2 y la hoja destino CT por Puestos

pero en el codigo original la hoja CT tiene los meses por encabezados y ahora la hoja Puestos tiene los nombres de Servicios de Salud de donde trabajo.

en el original buscaba el mes de la fecha de la columna 2 de la hoja Entradas2

k = Month(a(i, 2))

para compararlo con los meses del encabezado de la hoja CT

ahora como te dije cambie la hoja Entradas2 por Salidas2 y la hoja destino CT por Puestos

y cambie esta linea

k = Month(a(i, 2))

por esta

k=a(i,4)

pero me da error

porque ya no va a buscar meses, sino los servicios de salud de la fila 2 de la hoja Puestos en la columna D de la hoja Salidas2

al encontrar iguales asi como los iguales de los items de las columnas A de ambas hojas entonces extraer la cantidad de ese item en la columna E de la hoja Salidas2 y colocarlo en la hoja Puestos en la fila del item y en la columna del servicio.

no puedo explicarlo de otra forma

o soy demasiado bruto para no hacerlo mejor

pero sino se puede

gracias de todas formas

Para nada, todo lo contrario yo soy el que no entiende.

Solamente quiero imágenes. No quiero código.

Con todo gusto te ayudo. Solamente quiero ver la imagen1 en donde pueda ver los datos:

"Acetaminofen 100mg-mL Frasco Gotero" y 156.


Lo mismo le dije Carlos, si ya saben en cuál parte de la macro hay que hacer el cambio, entonces corrijan el código y no vuelvan a utilizar mi nombre.

Si quieres que te ayude, debe ser a mi manera, porque ustedes solamente vienen aquí a dar ordenes y parece que con poner mi nombre al inicio de la pregunta, yo tengo la obligación de entender y de hacerles una macro.

Te repito nuevamente, con todo gusto te ayudo. Solamente quiero ver la imagen1 en donde pueda ver los datos: "Acetaminofen 100mg-mL Frasco Gotero" y 156.

Ése es el ejemplo que necesitaba.

Prueba la siguiente macro:

Private Sub CommandButton1_Click()
'Por Dante Amor
'DECLARACIÓN de variables
  Dim sh1 As Worksheet, sh2 As Worksheet
  Dim a As Variant, b As Variant, c As Variant, d As Variant
  Dim dic1 As Object, dic2 As Object
  Dim i As Long, j As Long, k As Long
  '
'ENTRADAS
  Set sh1 = Sheets("Salida2")
  Set sh2 = Sheets("Puestos")
  Set dic1 = CreateObject("Scripting.Dictionary")
  Set dic2 = CreateObject("Scripting.Dictionary")
  dic1.CompareMode = vbTextCompare
  dic2.CompareMode = vbTextCompare
  sh2.Range("B3", sh2.Cells(Rows.Count, Columns.Count)).ClearContents
  '
  a = sh1.Range("A3", sh1.Range("E" & Rows.Count).End(3)).Value2  'base Salida2
  b = sh2.Range("A3", sh2.Range("A" & Rows.Count).End(3)).Value2  'filas puestos
  c = sh2.Range("B2", sh2.Cells(2, Columns.Count).End(1)).Value2  'columnas puestos
  ReDim d(1 To UBound(b, 1), 1 To UBound(c, 2))                   'destino(filas, columnas)
  '
  For i = 1 To UBound(b, 1) 'filas puestos
    dic1(b(i, 1)) = i
  Next
  For i = 1 To UBound(c, 2) 'columnas puestos
    If c(1, i) <> "" Then dic2(c(1, i)) = i
  Next
  '
'PROCESOS
  For i = 1 To UBound(a, 1)
    If dic2.exists(a(i, 4)) And dic1.exists(a(i, 1)) Then
      If a(i, 2) >= CDate(TextBox1.Value) And a(i, 2) <= CDate(TextBox2.Value) Then
        j = dic1(a(i, 1))
        k = dic2(a(i, 4))
        d(j, k) = d(j, k) + a(i, 5)
      End If
    End If
  Next
  '
'SALIDAS
  sh2.Range("B3").Resize(UBound(d, 1), UBound(d, 2)).Value = d
End Sub

gracias

disculpa tanta molestia

funciona excelente

Encantado de ayudarte. Gra cias por comentar.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas