UniversoExcelForo

Respuesta a consultas.
Fecha de creación: 09.Abril.2012

Fundadores: Wibly,Tyno,Servando,Sakkar,Rosendo2,RMaximo,Railar,Mcoronel,Ioyama,Igtelo,Hugotron,Drochar,Dedos,Alberto,Adolfo

No se pueden hacer consultas de Excel o VBA por mensaje privado.
Utiliza el botón buscar del foro y te ahorras tiempo para obtener "ayuda".

No estás conectado. Conéctate o registrate

Ir a la página : Precedente  1, 2, 3, 4, 5, 6, 7

Ver el tema anterior Ver el tema siguiente Ir abajo  Mensaje [Página 7 de 7.]

151 Re: Anidar otra funcion a una formula el 06/08/13, 12:51 am

tyno


Hola yimi.
Te paso el archivo en el cual adapte la macro a los rangos que has indicado. 
Quedaría que insertes las formulas correspondientes en las nuevas columnas porque las que yo utilice son solo de prueba, o bien teniendo en cuenta que la disposición de los datos sea la misma en tu archivo original con respecto al archivo  que te paso entonces solo con copiar la macro debería funcionar. Saludos.

Código:
https://www.dropbox.com/s/3fhaqwajpujtoyf/MACRO%20PRONOSTICO.zip

152 rte. el 07/08/13, 08:40 am

yimycol


Hola tyno
Algun motivo especial las 2 hojas en el libro ???

salud2.

153 Re: Anidar otra funcion a una formula el 07/08/13, 09:10 am

tyno


En el ultimo archivo habias solicitado que la macro se ejecute para dos Hojas ¿no se si te acuerdas?, pero si lo que necesitas es que la macro se ejecute en una sola Hoja solo elimina la parte del codigo que llama la segunda Hoja. Saludos.

154 rte. el 07/08/13, 10:10 am

yimycol


Hola de nuevo

Si a si es,bueno antes de contactar contigo de nuevo intente ajustar los rangos pero no fui capaz,ahora para no liarte mucho te adjunto libro mira Hoja 3 es tal cual, veras que los rangos de columnas estan cambiados a 315,316 es la difrencia antes eran 515,516.
Bueno pues ajustandolo en la macro los datos no logro cuadralos en sus celdas correspondientes en la macro lo modifico a si

Application.ScreenUpdating = False

Range(Cells(313, 71), Cells(313, 178)) = ""
Range(Cells(315, 71), Cells(315, 178)) = ""
Range(Cells(316, 71), Cells(1000, 178)) = ""

Pues nada no hay manera empiezan los datos despues de actuar la macro en 70 y acaban en 177 en lugar de empezar en 71 y acabar en 178

https://www.dropbox.com/sh/o1le596sjwq0ymb/CA48wdmnys

salud2.

155 Re: Anidar otra funcion a una formula el 07/08/13, 12:13 pm

tyno


Hola yimi.

Esa parte del codigo que has redactado es solo para borrar los resultados de la macro antes de ingresar los nuevos datos.

Te voy a pasar las indicaciones de que modificar en el código de la macro en caso que agregues o muevas las columnas

Entra  al código y busca las líneas que te indico abajo, los valores que te voy a señalar serian para que la macro empiece desde la columna 70, tal cual esta el código actualmente:

For ref_column = 16 To 69 '16-69
f = 0
c = 0
ref = ref_column - 16

colr = ref_column
col = ref_column + 55 + ref  ‘<<<<<<<<VALOR ACTUAL =55
col1 = ref_column + 54 + ref ‘<<<<<<<<VALOR ACTUAL =54
lrwa = Range("a65536").End(xlUp).Row 

 
Modificar:
En principio se le indica al bucle For Next  que recorra desde la columna 16 a la 69, o sea de la columna P a BQ, si se agregan más columnas entonces hay que aumentar 69 al valor de la columna que deseamos.
Entonces para que la macro tome una columna más seria cuestión de incrementar las variables:

For ref_column = 16 To 69 '<<<si se agregan mas columnas, modificar el valor 69
f = 0
c = 0
ref = ref_column - 16

colr = ref_column
col = ref_column + 56 + ref ‘<<<<<<<<VALOR 56 seria desde la columna 72
col1 = ref_column + 55 + ref ‘<<<<<<<<VALOR 55 seria desde la columna 71
lrwa = Range("a65536").End(xlUp).Row


Recorda incrementar siempre a la par estas dos variables que te señalo a lo ultimo segun la cantidad de columnas que agregues o muevas, de la misma manera el valor del bucle For Next.

156 Re: Anidar otra funcion a una formula el 07/08/13, 02:02 pm

yimycol


Hola buenas.



O sea para que los datos de la macro se recojan en BS 313,315 hasta FV seria a si ¿?
 
 
Application.ScreenUpdating = False
 
Range(Cells(313, 71), Cells(313, 178)) = ""
Range(Cells(315, 71), Cells(315, 178)) = ""
Range(Cells(316, 71), Cells(1000, 178)) = ""
 
ultimo_dato_A = Range("a65536").End(xlUp).Row
 
For ref_column = 16 To 69 '16-69
f = 0
c = 0
ref = ref_column - 16
 
colr = ref_column
col = ref_column + 56 + ref
col1 = ref_column + 55 + ref
lrwa = Range("a65536").End(xlUp).Row 'determinar ultima fila de datos columna A

Salud2.

157 Re: Anidar otra funcion a una formula el 07/08/13, 02:39 pm

tyno


El codigo debería que quedar asi:

Código:
Sub proceso_calcular()
On Error Resume Next
Dim celda As Range
Dim mtcnaS() As Long

Application.ScreenUpdating = False

Range(Cells(313, 71), Cells(313, 178)) = ""
Range(Cells(315, 71), Cells(315, 178)) = ""
Range(Cells(316, 71), Cells(1000, 178)) = ""

ultimo_dato_A = Range("a65536").End(xlUp).Row

For ref_column = 16 To 69 '16-69
f = 0
c = 0
ref = ref_column - 16

colr = ref_column
col = ref_column + 56 + ref
col1 = ref_column + 55 + ref
lrwa = Range("a65536").End(xlUp).Row 'determinar ultima fila de datos columna A

'determinar la primer y ultima fila con 1
l = 1
i = 2
nxt: rw = Range(Cells(i, colr), Cells(300, colr)).Find(What:="1", LookIn:=xlValues, LookAt:=xlPart).Row
If rw = i Then GoTo sig
If l = 1 Then frw = rw
lrw = rw
i = rw
l = l + 1
GoTo nxt
sig:

'CELDAS NO APARECE
If Cells(3, col) = 1 Then
i = 4
Else
i = 3
End If

For a = i To lrwa
If Cells(a, col) <> 1 Then
ReDim Preserve mtcnaS(a)
mtcnaS(a) = 1
End If
If Cells(a + 1, col) <> 1 And Cells(a, col) = 1 Then c = c + 1
Next a

If Cells(lrwa, col) <> 1 Then c = c + 1

Cells(315, col1) = Application.Sum(mtcnaS()) / c

For a = i To lrwa
ReDim Preserve mtcnaS(a)
mtcnaS(a) = ""
Next a

'0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

'CELDAS SI APARECE
h = 1

For b = lrwa + 1 To 3 Step -1
If Cells(b, col) = 1 Then

Cells(317 + x, col1) = f

Cells(317 + x, col1 - 1) = h
x = x + 1
h = h + 1
f = 0
End If
f = f + 1
Next b

Range(Cells(317, col1 - 1), Cells(Cells(5000, col1 - 1).End(xlUp).Row, col1)).Sort , key1:=Cells(316, col1 - 1), Order1:=xlDescending 'ordenar datos p/pronostico

Cells(313, col1) = Application.Sum(Range(Cells(316, col1), Cells(Cells(5000, col1).End(xlUp).Row, col1))) / Application.Count(Range(Cells(316, col1), Cells(Cells(5000, col1).End(xlUp).Row, col1)))   'promedio celdas si aparece

Cells(316, col1 - 1) = Cells(317, col1 - 1) * 1 + 1
Cells(315, col1 - 1) = Cells(316, col1 - 1) * 1 + 1

Cells(315, col1 - 1).NumberFormat = "0"
Cells(316, col1 - 1).NumberFormat = "0"

rwp1 = 3

rw = (Range(Cells(316, col1), Cells(1000, col1)).Find("").Row) - 313 - 1

Cells(313, col).FormulaR1C1 = "=FORECAST(R[" & rwp1 & "]C[-2],R[4]C[-1]:R[" & rw & "]C[-1],R[4]C[-2]:R[" & rw & "]C[-2])"

Cells(313, col) = Cells(313, col) 'convertir la fomula PRONOSTICO en valor

If Not IsNumeric(Cells(313, col)) Then Cells(313, col) = "" ' si el resultado de pronostico es un error

' si el resultado de pronostico supera el valor de la ultima cedla A
If Cells(313, col) > lrwa - 2 Then
r = 0
For a = 3 To lrwa
If Cells(a, col) <> 0 Then
Cells(313, col) = r
Exit For
End If
r = r + 1
Next a
End If

If Cells(313, col) < 1 Then Cells(313, col) = 1 ' si el resultado de pronostico es menor a 1 entonces 1
Cells(313, col).NumberFormat = "0.00"

'eliminar referencias para la formula PRONOSTICO
Cells(315, col1 - 1) = ""
Range(Cells(316, col1 - 1), Cells(1000, col)) = ""

Next ref_column

Range("bs:fv").EntireColumn.AutoFit
Application.ScreenUpdating = False

End Sub

Si has agregado mas columnas tambien recuerda modificar el rango de bucle For Next que ahora esta For a=16 to 69

158 rte. el 07/08/13, 03:27 pm

yimycol


ok. parece que ya va

salud2.

159 rte. el 07/08/13, 04:00 pm

yimycol


tyno un penultimo favor,en el libro ultimo en la hoja 3 me puedes acoplar a la macro los mismo de columnas si,columnas no y pronostico, de las columnas FX:GF

No veo una cuestion de ampliar solo rangos como me explicastes,creo ???

Salud2.

160 Re: Anidar otra funcion a una formula el 07/08/13, 09:53 pm

tyno


Hola yimi.
No entiendo lo de las columnas FX:GX, despues de la modificacion de la macro no estoy seguro como te quedo el archivo, si podes pasame el archivo con una sola Hoja para ver como quedo el archivo con la macro. Saludos

161 rte. el 08/08/13, 05:49 am

yimycol


Hola tyno

La modificacion del rango anterior quedo bien y veo que funciona,pero en esta modificacion no esta incluido lo que ahora te pido se me olvido,es en la hoja 3 del libro ultimo que subi creo que esta 3 post mas atras,si la abres situate en las columnas FX a la GX en 313 y 315 pues continuar recogiendo datos de celdas si, celdas no, pronostico.
Haciendo lo anterior no soy capaz quizas por que hay una columna en blanco entre FV y FX o por que el rango de columnas FX:GX solo tiene un columna y no 2 como el rango de BS:FV

Es un poco mas de lo de siempre jeje...

salud2.

162 Re: Anidar otra funcion a una formula el 08/08/13, 02:00 pm

tyno


Hola yimi.
Te paso el archivo donde he adaptado la macro a los rangos FX:GX.
Como veras la disposición de los resultados es distinta por como están dispuestas las columnas justamente.
Como de costumbre vas a tener que realizar alguna comprobación de los resultados, al archivo lo fui haciendo en algún entretiempo en mi trabajo.
También vas a tener que restaurar las formulas ya que al abrirlo con mi Excel algunas de estas no son reconocidas  y se dañan,  pero lo importante es que pruebes si de esta forma funcionan las macros

Código:
https://www.dropbox.com/s/m9dw49mnekgwfoy/MACRO%20PRONOSTICO.rar

163 rte. el 08/08/13, 03:05 pm

yimycol


Hola de nuevo.
Pero esta macro es valida para este tema y todo lo anterior ??? no veo en el inicio de la macro esto


Sub calcular()
Sheets("Hoja 50").Activate
proceso_calcular
Sheets("Hoja 100").Activate
proceso_calcular
 
Sheets("Hoja 1 50").Activate
 
End Sub


Solo veo que hace referencia a la hoja 3 y al rango ultimo en concreto



salud2.

164 Re: Anidar otra funcion a una formula el 08/08/13, 03:23 pm

tyno


En caso que el archivo de prueba que te he pasado quede funcionando bien entonces el código que mencionas tendría que quedar así en tu archivo:

Sub calcular()
Sheets("Hoja 50").Activate
proceso_calcular
Clave_R
Sheets("Hoja 100").Activate
proceso_calcular
Clave_R
 
Sheets("Hoja 1 50").Activate
 
End Sub


A parte  también tendrías que  agregar a tu archivo el codigo Clave_R  que esta debajo del codigo proceso_calcular.

165 rte. el 08/08/13, 03:30 pm

yimycol


despues de realizar esta macro ultima tal cual esta en el libro,olvidandonos del post anterior para no liarte.

En datos antiguos (como una comprobacion facil) de FS a FV 313,315 en pronostico varia los datos con esta macro.

En rangos nuevos en FZ 315 = -1 y GC 315 = DIV/0
esto en mi libro en el tuyo no da esto ???

Bueno para no marearte mucho y ya que lo anterior estaba bien,por que no creas en un modulo nuevo la macro exclusivamente para este rango FX:GF

Salud2.

166 Re: Anidar otra funcion a una formula el 08/08/13, 03:46 pm

tyno


La macro que hice exclusivamente para esas columnas es la que se llama Clave_R y esta en el mismo modulo. Lo de un modulo exclusivo para esa macro no cambiaría los resultados en caso que este dando un error. Esto como siempre se solucionaría mas rápido si me pasas el archivo tal como lo estas usando en el original asi reviso porque hay un error.

167 rte. el 08/08/13, 05:49 pm

yimycol


Hola Tyno

Te adjunto libro tal cual que no deja de ser lo mismo que la hoja 3 del anterior,veras que tiene la macro antigua y mira el resultado que da ( como ejemplo no mire mas) como ya te comente en FS a FV 313,315 y ahora colocale la macro nueva de marras,haber si da lo mismo en esas celdas

Y a si tendre de primera mano en este libro cuando me la mandes de nuevo la macro de ahora y sera mejor y menos lioso,despues ya comprobare los resultados de lo nuevo pero que de lo mismo la antigua macro antes de mandarla de nuevo.

https://www.dropbox.com/sh/o1le596sjwq0ymb/CA48wdmnys

salud2.

168 Re: Anidar otra funcion a una formula el 09/08/13, 12:30 am

tyno


Hola yimi.
Te paso el archivo con la macro adaptada al mismo.
Recorda que debajo de los resultados de las celdas FX :GX no se pueden insertar datos ya que la macro requiere este espacio y borra todo lo que pueda existir en ese rango.
Código:
https://www.dropbox.com/s/xwv3blmxvfgpgld/TYNO.rar

169 rte. el 09/08/13, 02:27 pm

yimycol


Hola tyno.

Como ya te comente antes esta macro nueva cambia los datos de pronostico de BS:FV con respecto a la macro anterior que dimos ya por buena en su momento.
Solo tienes que poner la otra macro y lo veras.

salud2.

170 Re: Anidar otra funcion a una formula el 09/08/13, 03:07 pm

tyno


Te paso yimi el mismo archivo TYNO (ahora TYNO 2)que subí últimamente, lo único que hice fue que la macro trabaje solo para la Hoja 50 y para el rango BT:FV (es BT y no BS el rango de acción de la macro) también hice para que no se eliminen los datos sobre los cuales trabaja la formula PRONOSTICO para que veas que dicha formula, a mi entender, esta trabajando correctamente.
Cuando ejecutes la macro vas a ver los datos desde la fila 316 hacia abajo, estos datos corresponden a los valores de CELDAS SI APARECE y para sacar el PRONOSTICO, que luego la macro una, vez que obtiene los resultados, los elimina. Entonces por ejemplo has doble click en la celda BT313 y veras que los rangos y criterios de la formula PRONOSTICO estarían bien, pero si no es asi me indicas cuales deberian ser los parametros correctos de dicha formula.
Código:
https://www.dropbox.com/s/uvf26jrqmdkbx5g/TYNO%202.rar

171 rte. el 09/08/13, 04:15 pm

yimycol


Hola otra vez jeje..

Bueno para no irnos a otros 130 post jeje... mas vale una imagen que mil palabras.

Solo tienes que abrir los libros y mirar libro TYNO 2 con esta macro ultima y libro TYNO 3 con la macro anterior y veras que la nueva macro en rangos BS:FV en PRONOSTICO no da el mismo resultado en ninguna de las celdas.

https://www.dropbox.com/sh/o1le596sjwq0ymb/CA48wdmnys

Salud2.

172 Re: Anidar otra funcion a una formula el 09/08/13, 10:06 pm

tyno


Estube revisando la macro yimi y en realidad la macro que funciona bien es la ultima que te he pasado.

Si te fijas en la macro del archivo " TYNO MACRO 3 ANTIGUA OK" el  codigo quedo con un error, busca las siguientes lienas:

'0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

'CELDAS SI APARECE
h = 1
'contar 1 para dividir por suma de referencias celdas si aparece
'd = 0
'For b = 3 To lrw
'If Cells(b + 1, col) <> 1 And Cells(b, col) = 1 Then d = d + 1
'Next b

For b = lrwa + 1 To 3 Step -1
If Cells(b, col) = 1 Then

'Cells(316, col1) = frw - 2
Cells(317 + x, col1) = f  'valor celdas si aparece (p/pronostico)

Cells(317 + x, col1 - 1) = h 'nº de orden p/pronostico
x = x + 1
h = h + 1
f = 0
End If
f = f + 1
Next b

Range(Cells(317, col1 - 1), Cells(Cells(5000, col1 - 1).End(xlUp).Row, col1)).Sort , key1:=Cells(316, col1 - 1), Order1:=xlDescending 'ordenar datos p/pronostico

Cells(313, col1) = Application.Sum(Range(Cells(316, col1), Cells(Cells(5000, col1).End(xlUp).Row, col1))) / Application.Count(Range(Cells(316, col1), Cells(Cells(5000, col1).End(xlUp).Row, col1)))   'promedio celdas si aparece

Cells(316, col1 - 1) = Cells(517, col1 - 1) * 1 + 1 ' <<<<<<<<<<<<<<tiene que ser 317
Cells(315, col1 - 1) = Cells(516, col1 - 1) * 1 + 1 ' <<<<<<<<<<<<<<tiene que ser 316


O sea que la ultima macro esta bien, la del archivo  "TYNO 2 MACRO QUE NO VA"

173 rte. el 10/08/13, 09:38 am

yimycol


Hola tyno.

Pues si a si es jod.... ni con las gafas progresivas lo vi jeje.... al modificar los rangos de 513 a 313 y demas no lo vi jaja....
Bueno en cuando tenga un rato ya mirare en el comprobante manual los resultados del nuevo rango.

Ya te comento.

Salud2.

Ver el tema anterior Ver el tema siguiente Volver arriba  Mensaje [Página 7 de 7.]

Ir a la página : Precedente  1, 2, 3, 4, 5, 6, 7

Permisos de este foro:
No puedes responder a temas en este foro.