Transcribir la función max en VBA de Excel

Anne-Sophie -  
Iternity Mensajes publicados 43 Estado Miembro -
Bonjour,

Quiero saber cómo se escribe la función max de excel en VBA porque quiero que en una celda se escriba el número más alto que aparece en las celdas de B9 a L9.
He escrito activecell.Offset(11, 7).Value = Application.WorksheetFunction.Max(Range("B9:L9")) pero cuando ejecuto mi macro, me indica "error de compilación: sub o función no definida". Y no logro resolver el problema.

Última pregunta: ¿cómo hacer para que excel inscriba en otra celda la columna en la que se encuentra el mayor número en el rango de celdas de B9 a L9?
Para ser más claro: las celdas de B9 a L9 corresponden a totales. Quisiera que excel inscriba en una celda el resultado más alto (de B9 a L9) y luego inscriba en otra celda la columna que corresponde al número más grande.

Muchas gracias de antemano.

4 respuestas

Usuario anónimo
 
Hola,

Demostración:

 Sub Test_Max_Sum() Dim Celdas As Range Dim LaCel As Range Set Celdas = Range("B9:L9") Set Celdas = ActiveSheet.Range("B9:L9") Range("B11").Value = Application.WorksheetFunction.Sum(Celdas) Range("B12").Value = Application.WorksheetFunction.Max(Celdas) For Each LaCel In Celdas If (LaCel.Value = Range("B12").Value) Then Range("B13").Value = LaCel.Column 'Range("B13").Value = LaCel.Address End If Next Range("A1").Select End Sub 


Lupin
10
anne-sophie
 
Muchas gracias. :-)
Su ayuda me quita una espina del pie, porque es para mi trabajo que debo hacer esto.
Gracias de nuevo.
0
Iternity Mensajes publicados 43 Estado Miembro
 
respuesta muy, muy útil y precisa, no podría haber soñado con algo mejor. Gracias.
0
Usuario anónimo
 
re:

fue un placer, y si tienes más dificultades, no dudes
en volver a este hilo de conversación. El reconocimiento
siempre me inspira.

Lupin
2
Pier-3d Mensajes publicados 67 Fecha de registro   Estado Miembro Última intervención   1
 
Hola,

Soy un neófito y me estoy haciendo preguntas al leer el código
mostrado arriba.

¿No son estas líneas una repetición?
Set Cellules = Range("B9:L9") Set Cellules = ActiveSheet.Range("B9:L9")
Y aquí:
Range("B11").Value = Application.WorksheetFunction.Sum(Cellules) Range("B12").Value = Application.WorksheetFunction.Max(Cellules)
Realmente no entiendo. Estás modificando los valores de B11, B12 y más adelante B13
mientras que, en la enunciación del problema, estas celdas forman parte del rango a examinar
por la función Max().

Y, finalmente...
Range("B12").Value = Application.WorksheetFunction.Max(Cellules)
... ¿no es esta línea en sí misma una respuesta completa al problema planteado
por Anne-Sophie?

No conocía el método «Application.WorksheetFunction». Acabo de aprender
algo nuevo que me será muy útil. Muchas gracias.

No sé si estoy infringiendo las reglas del foro al escribir este mensaje que es más bien
una subpregunta. Si es así, ¿sería mejor enviar un mensaje privado a M. Lupin?


Pierre Cloutier
0
Usuario anónimo > Pier-3d Mensajes publicados 67 Fecha de registro   Estado Miembro Última intervención  
 
Hola,

Tu observación es muy pertinente, ¡y casi tienes razón!

Es necesario ser capaz de definir el rango

Set Celdas = Range("B9:L9")

es también un mínimo aunque muy poco explícito,
y la declaración del rango debe corresponder a la función solicitada
que es:
Application.WorksheetFunction.Max

El Miembro [ WorksheetFunction ] implica una hoja,
así que recomiendo utilizar de manera más explícita
la declaración del rango a una hoja:

Set Celdas = ActiveSheet.Range("B9:L9")
o
Set Celdas = Sheets("MiHoja").Range("B9:L9").

Un ejemplo claro sobre cómo llamar a una función :-)
InputBox
Application.InputBox
Deberías notar una diferencia :-)

y eres tan bienvenido como yo,
por mi parte soy un extraño aquí :-)

cuando tengo tiempo :-)
y a veces código en unos minutos estas improvisaciones,
las pruebo y probablemente tuve que añadir la especificación
de la hoja olvidando quitar la primera línea.

Lupin
0
Mas > Usuario anónimo
 
Hola,

Este hilo se aproxima bastante a mi problema (al menos creo...). Por ello, me permito publicar aquí para mayor coherencia.

En mi hoja de trabajo, utilizo reglas de validación que utilizan rangos dinámicos. En resumen, mis usuarios eligen un país, luego un distrito, luego un subdistrito, etc., y me gustaría que en cada nivel las opciones ofrecidas sean coherentes con la elección del nivel superior.

Por ejemplo, para Francia, obtener (en lista desplegable de validación) solo las regiones francesas.

En mi hoja de trabajo, la fórmula de validación es la siguiente:

=OFFSET(levmomA1,MATCH(D9,Admin1_Ref,0),1,COUNTIF(Admin1_Ref,D9),1)

levmomA1 y Admin1_Ref son rangos y D9 se refiere al valor elegido en el nivel superior.


Imposible trasladar esto a VBA (o esos datos deben ingresarse a través de ComboBox). Mi último intento se asemeja a esto:

'Definir Rango y sus Fórmulas'

Dim RangeLevmomA1 As Range
Dim RangeAdmin1_Ref As Range
Dim ComboBox_Ad2Range As Range

Set RangeLevmomA1 = ActiveWorkbook.Worksheets("_geo").Range("levmomA1")
Set RangeAdmin1_Ref = ActiveWorkbook.Worksheets("_geo").Range("Admin1_Ref")
Set ComboBox_Ad2Range = ActiveWorkbook.Worksheets("_geo").WorksheetFunction.Offset(RangeLevmomA1, WorksheetFunction.Match(ComboBox_Ad1.Value, RangeAdmin1_Ref, 0), 1, WorksheetFunction.CountIf(RangeAdmin1_Ref, ComboBox_Ad1.Value), 1)

'Definir la definición de RowSource de ComboBox_Ad2'

ComboBox_Ad2.RowSource = ComboBox_Ad2Range



Si tienes alguna idea... me sacarías un cactus del pie...
0
GafsiTN Mensajes publicados 10 Estado Miembro 1
 
Hola a todos,
¿Hay un código VBA o una fórmula que me permita resolver este problema?
Artículo Versión Índice
IBB102110 0
IBB102110 5
IBB102110 9 OK
IBB102110 9 OK
IBB102194 3
IBB102194 3
IBB102194 3
IBB102194 4 OK
IBB102194 4 OK
IBB102194 4 OK
Quiero poner en una columna un índice que me diga que la última versión es la más alta
Sé que es simple con 5 líneas, pero tengo 17000 referencias para determinar sus últimas versiones

Gracias por su ayuda.
1
Atikata
 
Hola a todos,

Tengo una columna de valores en la que los valores pasan por varios mínimos y máximos, ¿cómo puedo obtener todos ellos? Porque cuando hago, por ejemplo, max(A1:A200) solo obtengo un solo maximo, es decir, el más alto, y lo mismo con min(A1:A200).
¿Hay alguna solución con Excel VBA?
0
pijaku Mensajes publicados 13513 Fecha de registro   Estado Moderador Última intervención   2 772
 
Hola,

Sin VBA, existe la fórmula:
=GRANDE.VALEUR(rango;n°) que te devuelve, según el n°, el mayor, el segundo, el tercer mayor valor de tu rango.
Ejemplo:
=GRANDE.VALEUR(A1:A100;8) te devuelve el 8.º + mayor valor del rango A1:A100

a la inversa, encontrarás la fórmula =PETITE.VALEUR(A1:A100;2)
0