Sunteți pe pagina 1din 17

Auto_Open() y Auto_Close() Existe una macro de autoarranque que se ejecuta cuando se abre el libro. Se llama auto_open().

Y existe otra que se ejecuta justo antes de cerrar el libro que se llama auto_close(). Sub Auto_Open() Dim hora As Double Dim saludo As String hora = (Now - Int(Now)) * 24 Select Case hora Case 6 To 14 saludo = "Buenos das" Case 14 To 21 saludo = "Buenas tardes" Case Else saludo = "Buenas noches" End Select MsgBox saludo & " Amo" End Sub Equivalente a auto_open existe otra macro Workbook_Open, pero sta ha de ser guardada no en un mdulo normal, sino en ThisWorkbook. Pruebe lo siguiente: El siguiente procedimiento permite abrir automticamente el libro Balance.xls al abrir el libro Informe.xls. El procedimiento ha de estar en ThisWorkbook del libro Informe.xls. Sub Workbook_Open() 'Apertura de libro Balance Workbooks.Open Filename:="C:/Temp/Balance.xls" 'Activacin del libro Informe Windows("Informe.xls").Activate End Sub Saludo al arrancar Crear un libro Personal.xls como se ha indicado anteriormente con la macro de autoarranque siguiente: 2 Sub Auto_open() MsgBox ("Que tengas un buen da") End Sub Esta macro creada en el libro Personal.xls hace que al iniciar Excel nos salga un mensaje saludndonos. Nombrar Hoja desde una celda Esta macro permite asignar el nombre que pongamos en la celda A1 como nombre de la Hoja actual.

Blog

Sub NombreHoja() ActiveSheet.Name = Range("A1").Value End Sub Exportar un mdulo 4


1. Pase al editor de visual basic y active el mdulo a exportar. 2. Seleccione Archivo/ Exportar archivo. Aparece un cuadro de dilogo. 3. En cuadro de edicin Nombre de Archivo, teclee el nombre para el archivo donde se guardar el mdulo, por ejemplo "General.Bas", observe que .BAS es la extensin de estos archivos. 4. Pulse sobre el botn Guardar.

Importar un mdulo 5
1. Active el editor Visual Basic. 2. Seleccione Archivo/ Importar Archivo. Aparece un cuadro de dilogo. 3. Seleccione en la lista Buscar en: la carpeta donde tiene ubicado el archivo a importar. 4. Una vez localizada la carpeta, seleccione el archivo a importar (General.Bas en el ejemplo) y pulse sobre Abrir.

La clusula Private 6
Puede anteponer la clusula private a todos los procedimientos y funciones que sean llamados slo desde el mismo mdulo, es una forma de ahorrar memoria y hacer que el programa corra un poco ms rpido. Si necesita llamar un procedimiento o funcin desde otro mdulo, nunca debe precederlo por la clusula private, recuerde que esta clusula restringe el mbito de utilizacin de un procedimiento a su propio mdulo.

Inspeccin rpida de variables Cuando ejecuta un programa paso a paso, si sita el puntero de ratn sobre una variable, se muestra el valor de
la misma.

Modificar el valor de una variable en tiempo de ejecucin 8


A veces resulta interesante cambiar el valor de alguna variable cuando se est ejecutando el programa, para ver que ocurre si coge determinados valores, para terminar un bucle, etc. Para ello agregue a la ventana de inspeccin la variable que desee cambiar, cambie su valor sobre la propia ventana de inspeccin y contine la ejecucin del programa.

10

Ventana Inmediato Puedes inspeccionar variables desde esta ventana anteponiendo la palabra print antes de la variable, o el signo ?. Debug.Print Esta expresin permite efectuar la depuracin del programa de forma ms cmoda. Se introduce en un programa antecediendo a una variable que se desea comprobar en la ventana Inmediato. De esta forma conseguiremos ver todos los valores que toma la variable cada vez que el programa pasa por este comando. Se ven en la Ventana Inmediato [Ctr+G]. . Ejemplo: Sub Dos_a_la_diez() Dim i As Integer Dim t As Integer t=1 For i = 1 To 10 t=t*2

11

12

13

14

15

Debug.Print "Dos a la " & i & " = " & t Next MsgBox t End Sub Despus de efectuada la depuracin se quita la lnea que contiene el comando Debug.Print. Propiedad ListFillRange del ComboBox Con esta propiedad deberemos definir los elementos que debe mostrar la lista, debe especificarse el rango que contiene los elementos a mostrar, el rango debe ser una columna (o dos , o tres, etc.). Propiedad LinKedCell del ComboBox En esta propiedad debe especificar en que celda debe copiarse el elemento seleccionado de la lista. Cuidado con esta propiedad, tenga en cuenta que los elementos de la lista son tratados como datos de tipo String aunque contenga nmeros o fechas, por lo que en estos casos, a veces ser necesario aplicar funciones de conversin de datos antes que el dato se copie en la hoja. Por ejemplo, si alguna vez construye una lista con nmeros ver que el dato seleccionado se alinea a la derecha, si son fechas, no se muestra con el formato correspondiente. Propiedad ListIndex del ComboBox Mediante esta propiedad podremos saber que elemento de la lista es el seleccionado por su nmero de orden. Es decir, si est seleccionado el primero, ListIndex valdr 0, si est seleccionado el segundo valdr 1, etc. Si no hay ningn elemento seleccionado valdr -1. Tenga en cuenta que esta propiedad slo est disponible en tiempo de ejecucin, es decir la podremos leer mientras est funcionando el programa, no se puede establecer en modo diseo, observe que no aparece en la ventana propiedades del cuadro combinado. Cambiar el nombre de un Mludo Al insertar mdulos en el Editor de Visual Basic, se utilizan los nombres: Mdulo 1, Mdulo 2, etc. Podemos cambiar el nombre el un mdulo en sus propiedades (F4). La nica propiedad de un Mdulo es 'name'. Nombre de usuario: UserName Vamos a crear una funcin que proporcione el nombre de usuario. Primero utilizando la Grabadora de Macros. Haga lo siguiente. Active la Grabadora y luego seleccione Herramientas, Opciones, pestaa General. Realice un cambio en el nombre de usuario. Cerrar la ventana de Opciones pulsando en Aceptar. Y detener la Grabadora. La macro obtenida ser la siguiente:

Sub Macro1() ' ' Macro1 Macro ' Macro grabada el 06/08/2004 por Adolfo ' ' With Application .UserName = "Adolfo Aparicio" .StandardFont = "Arial" .StandardFontSize = "10" .DefaultFilePath = "C:\Documents and Settings\Adolfo\Mis documentos" .EnableSound = False .RollZoom = False End With End Sub Ahora vamos a crear la funcin =Usuario siguiendo el procedimiento inverso. Funcition Usuario() Usuario = Application.UserName End Function Puede probarla. La encontrar en la categora de Funciones Definidas por el usuario. Extensiones de los nombres de macro - Mdulos de clase. Extensin .cls. - Formularios. Extensin .frm. - Mdulos estandar. Extensin .bas. Exit Sub, Exit Function Se usan eventualmente para salir de un procedimiento o funcin. Macro que pregunta si se desea salir de la aplicacin Sub SalirAplic() If MsgBox("Quiere salir de la aplicacin", vbQuestion + vbYesNo, "Ultima pregunta") = vbYes Then Application.Quit End If End Sub Llamada a un procedimiento [Call] NombreProc [(lista de argumentos)] La palabra clave Call es opcional para llamar a un procedimiento, salvo que existan argumentos, en cuyo caso es obligatoria. Los argumentos deben ir entre parntesis y pueden ser valores o variables. Sub Suma(a As Byte, b As Byte) MsgBox "La suma es " & a + b

16

17

18

19

End Sub Sub sumar() Call Suma(3, 4) End Sub Para llamar a un procedimiento de otro mdulo NombreDelMdulo.NombreDelProcedimiento Ejemplo: ThisWorkbook.SalirAplic Para llamar a un procedimiento de otro libro Application.Run "NombreDelLibro!NombreDelMdulo.NombreDelProcedimiento" Ejemplo: Application.Run "Informe.xls!ThisWorkbook.SalirAplic.xls" Al ejecutar este comando, el libro Informe.xls debe estar abierto. Proteger con contrasea las macros 20
Alt + F11 Herramientas => Propiedades de VBAProject => Proteccin => Bloquear proyecto para visualizacin => Contrasea

21

Convertir una funcin en un Complemento Podemos hacer que una funcin creada por el usuario este disponible en todos los Libros. Para ello, hemos de convertir el Libro que contiene la funcin en un Complemento. Los Complementos disponibles se ven haciendo: Herramientas => Complementos. Excel carga los complementos guardados en el directorio donde tengis instalado MsOffice y luego en una carpeta que vara con la versin que tengas instalada. Para XP puede ser: C:\Documents and Settings\Adolfo\Datos de programa\Microsoft\AddIns\ Para convertir el libro que contiene nuestra Funcin en un Complemento, bastara ir al Men Archivo/Guardar como y elegir el formato Complemento de Microsoft Excel (*.xla). Si lo guardis en el directorio que tiene tu versin asignado estar siempre disponible. Un aspecto a tener en cuenta es que los Complementos no son editables, es decir no podrsmodificar o aadir mas Funciones. Por eso es recomendable guardar primero el Libro en formato *.xls y luego como *.xla. Para localizar la ltima celda de una lista Sub Final() While ActiveCell.Value <> "" ActiveCell.Offset(1, 0).Select Wend End Sub Abrir un libro existente: Sub AbrirLibro() Workbooks.Open ("C:\Mis documentos\Ejemplo.xls")

22

23

End Sub Activar un libro ya abierto: Sub ACtivarLibro() Workbooks("Ejemplo.xls").Activate End Sub Crear un libro nuevo: Sub NuevoLibro() Workbooks.Add End Sub Borrar un registro de una tabla que contenga un dato concreto Sub BorrarFilas() While ActiveCell.Value <> "" If ActiveCell.Value <> "Cadiz" Then ActiveCell.Offset(1, 0).Range("A1").Select Else Selection.EntireRow.Delete End If Wend End Sub Creacin de una Frmula personalizada Clculo del trmino amortizativo de un prstamo tipo francs (de pagos constantes). Similar a la frmula =PAGO pero en este caso usando tipo nominal y con fraccionamiento. Function Termino(Principal@, Aos As Byte, tipo_nominal!, fraccionamiento As Byte) Dim im! 'Tipo efectivo del subperiodo im = tipo_nominal / fraccionamiento / 100 Termino = Principal * im / (1 - (1 + im) ^ (-Aos * fraccionamiento)) End Function Pongamos un ejemplo para un principal de 100.000 , 10 aos, tipo nominal anual del 6%, con fraccionamiento mensual. En este caso, al ser el fraccionamiento mensual el trmino obtenido es la mensualidad. Sub ejemplo() End Sub Macro que cierra Excel Se puede asociar a un botn o a un icono. Sub Auto_Close() Application.Quit End Sub Macro que elimina las barras de desplazamiento

24

25

26

27

Sub Desbarra() With ActiveWindow .DisplayHorizontalScrollBar = False .DisplayVerticalScrollBar = False End With End Sub Macro que protege el libro y la hoja 28 Sub Blindaje() ActiveWorkbook.Protect Password:="1234" Sheets("Hoja1").Protect Password:="1234" End Sub Macro que borra los ceros de un rango Sub BorrarCeros() For Each Celda In Range("C11:G24") If Celda.Value = 0 Then Celda.ClearContents Next End Sub Si slo se quieren ocultar los ceros se ha de poner formato de celda personalizado de #.### Macro que reemplaza una palabra por otra Sub RemplazarPalabra() Dim Palabra As String Dim Hoja As Long Palabra = Trim(InputBox("Introduzca la palabra a buscar: ")) For Hoja = 1 To Sheets.Count Sheets(Hoja).Activate Cells.Replace What:=Palabra, Replacement:="", LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False Next Hoja End Sub En este caso reemplazamos por "", lo que supone borrar la palabra buscada. Calculo del NIF Esta funcin calcula el NIF (Nmero de Identificacin Fiscal) utilizado en Espaa. Function nif(dni As Long) As String nif = Mid("TRWAGMYFPDXBNJZSQVHLCKE", (dni Mod 23) + 1, 1) End Function Funcin que calcula la fila que ocupa cierto valor en una tabla Est pensado para que la matriz se ponga comenzando en la celda A1, sin encabezado y sin que se repitan los elementos. Function DimeFila(Rango As Range, Valor_a_buscar) As Integer For Each c In Rango

29

30

31

32

If c.Value = Valor_a_buscar Then DimeFila = c.Row End If Next End Function Funcin que muestra la frmula de una celda Devuelve la frmula que contiene una celda en lenguaje local 33 Function DisplayCellFormula(InputCell As Range) As String DisplayCellFormula = InputCell.FormulaLocal End Function Si se quita la palabra 'Local' devuelve la frmula en ingls. Determinacin de si un nmero es primo o no es primo Sub primo() Dim primo As Boolean Dim n As Long Dim d As Long n = Val(InputBox("Introduce un nmero natural", "Entrada de Datos")) d=2 primo = True Do While primo And d < n If n Mod d = 0 Then primo = False End If d=d+1 Loop If primo Then MsgBox (n & " es primo") Else MsgBox (n & " no es primo") End If End Sub Factorial Function facto(n) Dim i As Integer facto = 1 i=0 Do i=i+1 facto = facto * i Loop While i <> n End Function

34

35

36

Inicializar una matriz Se inicializa con ERASE 'En este caso se ponen todos los valores a Empty Sub test() Dim c(1 To 20, 1 To 10) As Variant For i = 1 To 20 For j = 1 To 10 c(i, j) = RND Next j Next i MsgBox c(1,1) Erase c MsgBox c(1,1) End Sub 'En este caso se pone la variable c a su estado inicial 'Borrandose los valores, las dimensiones y recuperandose 'la memoria usada. Sub test1() Dim c As Variant c = ActiveSheet.Range("A1:J20").Value MsgBox c(1, 1) Erase c 'Esto dara error ya que no hay ninguna matriz MsgBox c(1, 1) End Sub Evitar los movimientos de pantalla mientras se ejecuta una macro Para evitar que durante la ejecucin de una macro se vean todos los movimientos y cambios del cursor, para evitar las "chirivitas" que se ven al ejecutar una macro: Al principio de la macro escribe

37 Application.ScreenUpdating = False y al final Application.ScreenUpdating = True Evitar que al ejecutar una macro nos haga preguntas Al principio de la macro escribe 38 Application.DisplayAlerts= False y al final Application.DisplayAlerts=True

While...Wend Esta estructura permite ejecutar las instrucciones contenidas mientras la condicin sea verdadera. La siguiente macro posiciona el cursor en la ltima celda llena de la columna A de la Hoja1.
Sub final1() i=1 While Worksheets("Hoja1").Cells(i, 1).Value <> "" Worksheets("Hoja1").Cells(i, 1).Select i=i+1 Wend End Sub

39

Otra variante: Sub final2() While ActiveCell.Value <> "" ActiveCell.Offset(1, 0).Select Wend ActiveCell.Offset(-1, 0).Select End Sub La segunda macro requiere posicionar inicialmente el cursor en la primera celda llena. Manejo de Rangos Para sealar una tabla se hace con CurrentRegion. Un ejemplo: 40 Dim R As Range Dim filas As Long Set R = Range("A1").CurrentRegion filas = R.Rows.Count Ocultar Hojas Podemos ocultar o mostrar Hojas de un libro. En el ejemplo siguiente, la Hoja2 esta inicialmente oculta, y para poder trabajar con ella la macro la mustra, y al finalizar la vuelve a ocultar. 41 Sub oculta() Sheets("Hoja2").Visible = True ActiveWorkbook.Sheets("Hoja2").Activate '... ... Sheets("Hoja2").Visible = False End Sub Determinar la fila hasta la que llega un rango Podemos determinar facilmente la fila hasta la que llega un rango. Supongamos el rango B5:B100, del que sabemos en que fila acaba (la 100), pero no sabemos en que fila comienza. Ejecutando la macro la variable n tomar el valor 5, que es la fila de comienzo del rango.

42

Dim n As Long Range("B100").End(xlUp).Select n = Selection.Row 43 Retardar el tiempo de ejecucin de una Macro Application.Wait Now + TimeValue("00:00:3") Utilizacin de un Array Sub ColumnaArray() Dim i As Byte Dim uso uso = Array("AS", "AT", "BC", "BM", "BV", "BB", "BO", "DI", "EN", "FB") Worksheets("Hoja1").Activate Range("B4").Select For i = 1 To 10 ActiveCell.Value = i ActiveCell.Offset(0, 1).Value = uso(i - 1) ActiveCell.Offset(1, 0).Activate Next i End Sub Dejar una frmula en una celda Lo mejor de las Macros es que pueden interactuar con la hoja de clculo. Todas las funciones de Excel estan disponibles para ser utilizadas en las macros. Por ejemplo, podemos hacer la media del valor de dos celdas y dejar el clculo en otra celda.
Range("I3") =Application.WorksheetFunction.Average(Range("H3"), Range("J3"))

44

Pero si lo que queremos es dejar no el valor del clculo sino la propia frmula se debera hacer de esta forma:
Range("I3").Formula ="=average(H3,J3)"

45

Si queremos introducir la frmula de la TIR para toda una columna, podemos escribir el siguiente cdigo:
Range("I7").Formula ="=IRR(C:C)"

Si lo que deseamos es introducir en una celda, no la frmula, sino el clculo de la TIR aplicada a toda una columna, el cdigo ser el siguiente:
Range("I7") = Application.WorksheetFunction.IRR(Columns("C:C").EntireColumn)

Y si de paso queremos poner formato lo hacemos as:


Range("H3:J3").NumberFormat ="##.#0%"

mircoles, febrero 13
David pregunta "Quiero preguntarle algo al usuario, y ejecutar un macro si selecciona SI o no hacer nada si selecciona NO" Use un MsgBox If MsgBox("La pregunta", vbYesNo,"Pregunta") = vbYes Then 'Haga algo aqu Else

'Seleccion NO, no haga nada End If


posted by Juan Pablo at 8:36:10 AM

lunes, febrero 11
Ral pregunta "Necesito identificar mediante cdigo si una celda contiene una ecuacin; algo as como las funciones IsEmpty o IsNumeric pero con ecuaciones. El problema es que las ecuaciones me las identifica como numrico, y no s discriminarlas de las que slo contienen nmeros. He probado hasta con If Left(Celda, 1) <> "=" Then pero claro, una ecuacin no es un string y no funciona. Alguien me puede indicar alguna funcin concreta o solucin alternativa? Gracias" Si un rango tiene o no una frmula lo indica la propiedad HasFormula as: If Cells(1,1).HasFormula then MsgBox "Si tiene" Else MsgBox "No tiene" End If
posted by Juan Pablo at 8:03:56 AM

domingo, febrero 10
Jorge pregunta "Deseo sacar el minimo de un conjunto de valores donde hay 0 pero no quiero que me los tome en cuenta, ya que para mi el minimo es 10 hay alguna funcion de minimo que pueda realizar esto, gracias" Esto se puede hacer con una frmula CSE. {=MIN(SI(A1:A10,A1:A10))} Esta calcula el mnimo de TODOS los nmeros diferentes de 0. Para que sean los MAYORES que 0 toca cambiarla a {MIN(SI(A1:A10>0,A1:A10))}
posted by Juan Pablo at 5:28:49 AM

sbado, febrero 9
Jose pregunta "Quisiera saber como le doy un formato numrico de separador de miles y dos decimales desde una macro de VB.Que funcin he de utilizar? Gracias" La propiedad NumberFormat es la que tiene el texto (Una cadena) del formato de la(s) celda(s). La siguiente linea cambia el formato de la celda A1 Range("A1").NumberFormat = "#,##0.00"
posted by Juan Pablo at 6:27:54 AM

viernes, febrero 8
Meredith pregunta "Estoy haciendo un macro que ponga una marca en la celda activa. Estoy usando el siguiente cdigo: ActiveCell.FormulaR1C1 = "x" Quiero saber cmo cambiar la fuente de Arial a Wingdings en la macro." Los Rangos (Y otros objetos) incluyen un objeto para la Fuente, que controla, por ejemplo, si est en Negrilla, Cursiva, el tipo de letra utilizado. Para cambiar el tipo de letra, hay que usar la propiedad name as: ActiveCell.Font.Name = "Wingdings"

tamao, y el

posted by Juan Pablo at 6:08:23 AM

jueves, febrero 7
Rolando pregunta "Buenos das, tengo una hoja de calculo con funciones en espaol. como puedo hacer que un excel en ingls reconozca las funciones en espaol? Gracias de antemano por su atencin." Si las frmulas usadas son "internas", como BUSCARV, SUMA, PROMEDIO, etc., Excel las traduce sin problema, es decir, se pueden pasar de Excel en espaol a Excel en Ingls. Si hay frmulas usadas de algn complemento, stas estn creadas en el idioma original, y no son "multilingues", por lo que s habra necesidad de traducir una por una.
posted by Juan Pablo at 12:09:33 PM

mircoles, febrero 6
Jen pregunta "Hay alguna forma de maximizar Excel cuando abro un libro ?" Para hacer esto, hay que hacer click derecho en el icono del libro (Al lado del menu Archivo), y seleccionar Ver Cdigo Debera aparecer lo siguiente, y el cursor en la mitad de las dos lineas. Private Sub Workbook_Open() End Sub Ah, hay que poner este cdigo Application.WindowState =xlMaximized y Listo !
posted by Juan Pablo at 7:59:24 AM

martes, febrero 5
Mike pregunta "Hay alguna forma de remover ciertos caracteres de una cadena de texto?. Por ejemplo, tengo el cdigo BN19 4GX y quiero quitar todos los caracteres numricos, dejando como resultado BN GX" Esto se puede hacer fcilmente en VBA. Primero, hay que entrar al editor de VB (Alt + F11), ir a Insertar y seleccionar Mdulo. Ah, se puede copiar este cdigo: Function QuitarNumeros(Rng As String) As String Dim Tmp As String Dim i As Integer Tmp = Rng For i = 0 To 9 Tmp = Application.Substitute(Tmp, i, "") Next i QuitarNumeros = Tmp End Function Ahora, otra vez en Excel, se puede usar esta frmula, asumiendo que el texto inicial estaba en A1. =QuitarNumeros(A1) y se tendr como resultado 'BN GX'
posted by Juan Pablo at 4:51:19 AM

lunes, febrero 4
Matthew pregunta "Hay alguna tecla rpida para cambiar de una hoja a otra ?" Hay varias, dependiendo de lo que necesito. Las dos que ms utilizo son:

Control Tab o Control Shift Tab: Cambia entre ventanas (O libros) Control Pg Down o Control Pg Up: Cambia entre hojas de un mismo libro.

posted by Juan Pablo at 6:58:54 AM

viernes, febrero 1
Murray pregunta "Quiero tener un total acumulado de los nmeros que tengo en una columna. Por ejemplo, si en la columna A tengo 12 15 12 16 22 14 y 11, en la columa B quisiera ver 12+15, 12+15+12, 12+15+12+16 y as. Trat de usar la funcin de AutoSuma, pero tengo que cambiar los rangos. Cmo se puede hacer esto ?" Para hacer esto hay que usar las referencias ABSOLUTAS ("$A$2"), RELATIVAS (A2) y MIXTAS ($A2, A$2) Si los datos comienzan en la fila 2, en la celda B2 hay que poner la siguiente frmula y arrastrar hacia abajo: =SUMA($A$2:$A2)
posted by Juan Pablo at 12:08:00 PM

jueves, enero 31
Kristie pregunta "Quiero convertir una columna que tiene el apellido y el nombre as (Appellido, Nombre) en dos columnas, una que tenga el apellido y la otra con el nombre. Hay alguna forma de hacer esto?" Primero, seleccione el rango de los nombres, despus ir a Datos, Texto en Columnas. En el primer paso seleccionar Delimitado, en el segundo paso hay que asegurarse que la 'coma' este seleccionada, y en el tercero hay que seleccionar una nueva celda de destino, para no borrar los datos existentes. Finalmente, presionar Terminar y listo !
posted by Juan Pablo at 7:16:25 AM

mircoles, enero 30
Daniel pregunta "Estoy tratando de encontrar cmo adicionar un 50% a cada uno de los nmeros en un rango seleccionado. Necesito incrementar cada nmero en 50%, o multiplicarlo por 1.5" Esto ayuda a mostrar una opcin de Pegado Especial que no es muy utilizada. En una celda desocupada poner 1.5 o 150%. Copiarla (Control C), ahora hay que seleccionar el rango de nmeros, ir a Edicin, Pegado Especial, seleccionarValores or Frmulas (Eso depende de qu se necesite hacer...), y seleccionar en el segundo cuadro Multiplicar. Listo, hacer click en Aceptar y LISTO ! as de fcil !!
posted by Juan Pablo at 9:38:06 AM

martes, enero 29
El Inputbox que viene con VBA es bastante til, pero tambin muy limitado, porque no permite seleccionar desde ah una celda de una hoja de clculo. Para esto toca usar el Inputbox de Excel, as: Application.Inputbox(Prompt:="Seleccione una celda",Title:="Seleccionar",Type:=8) Esto devuelve Falso si se cancela, o una referencia a la celda/rango seleccionado. De esta forma, se podra utilizar una variable para el rango seleccionado, as Set MiRango = Application.Inputbox(.....) Hay ms tipos, que permiten hacer ms cosas, las que se pueden encontrar en la ayuda.
posted by Juan Pablo at 7:57:50 AM

lunes, enero 28
Mike pregunta "Es posible cambiar el color de fondo de una celda con un macro ?" La propiedad Interior de las celdas maneja, entre otras cosas, el color de fondo de las celdas. Para modificarlo toca usar o ColorIndex (Para usar uno de los 56 colores prestablecidos en Excel) or Color, as

ActiveCell.Interior.ColorIndex = 36 'Amarillo claro or Range("A1:A6").Interior.Color = RGB(200,160,35) 'Naranja claro


posted by Juan Pablo at 8:35:25 AM

sbado, enero 26
A veces es necesario vincular dos listas, para que el usuario pueda seleccionar los datos dependiendo de sus selecciones anteriores. Un ejemplo de esto es el siguiente. John pregunta "Tengo una lista de pases (USA, Australia, Inglaterra), y un listado de ciudades de estos pases. Cmo puedo hacer para que cuando el usuario seleccione USA, en la otra lista aparezcan nicamente ciudades de USA (Nueva York, Los Angeles, Washington), o seleccione Australia y aparezcan Camberra, Perth y Sidney ?" Lo primero que hay que hacer es darle nombre a los rangos. Primero, seleccione el rango de pases, y nmbrelo PAISES. Ahora, seleccione todas las ciudades (Sin el ttulo) de USA y nmbrelo USA. Repita este proceso para cada pas. Suponiendo que la lista de pases se encuentra en A1, hay que ir a Datos, Validacin, seleccionar Lista, y en "Origen" poner: =PAISES (Asegrese de que "Celda con lista desplegable" est activada) Ahora, si la segunda lista aparece en B1, seleccinela, vaya a Datos, Validacin, seleccione Lista, y ahora en "Origen" ponga =INDIRECTO(A1) Ahora, cada vez que seleccione un pas en A1, las ciudades correspondientes a este pas aparecern en B1.
posted by Juan Pablo at 10:16:24 AM

viernes, enero 25
Esta es una sugerencia para los usuarios de MrExcel.com en espaol (Aunque les sirve a todos los usuarios internacionales). El Message Board y otras pginas de MrExcel.com funcionan principalmente en Ingls, por lo que la respuesta a las preguntas, funciones, sugerencias sern recibidas en este idioma. Para "traducir" facilmente una frmula de Excel en Ingls a Excel en Espaol (Por ejemplo, =FLOOR(A1,5)), se puede hacer lo siguiente. Seleccionar la celda en la que se quiere insertar la frmula. Presionar Alt + F11, para ingresar al editor de Visual Basic. Si no hay un panel abajo visible que se llama inmediato, presionar Ctrl + G. En este cuadro se escribe lo siguiente: ActiveCell.Formula = "<< la frmula aqu >>" y presionar [Enter] para el ejemplo anterior, se hara as ActiveCell.Formula = "=FLOOR(A1,5)" Al volver a Excel se puede ver que la celda seleccionada tiene la frmula "traducida", as : =MULTIPLO.INFERIOR(A1,5)

posted by Juan Pablo at 8:11:38 AM

jueves, enero 24
Jenny pregunta "Hay un mtodo fcil para sumar cada dos celdas ?, tengo una columna con 250 celdas, y tengo que seleccionarlas manualmente usando Ctrl. Hay algo que pueda hacer?" Cada dos celdas es equivalente a sumar todas las celdas pares o todas las impares. Para saber si una celda es de fila impar o par hay que usar la funcin RESIDUO as =RESIDUO(A1,2) devolver 0 si A1 es impar y 1 si es par. Traduciendo esto a la frmula quedara as:

=SUMA((RESIDUO(FILA(A1:A250)-FILA(A1),2)=0)*(A1:A250)) Esta es una frmula matricial, para entrarla hay que presionar Control Shift Enter al tiempo. O usar la siguiente frmula No-matricial: =SUMAPRODUCTO((RESIDUO(FILA(A1:A250)-FILA(A1),2)=0)*(A1:A250))
posted by Juan Pablo at 6:35:31 AM

mircoles, enero 23
PPD pregunta "Como se tendra que dar formato a una celda para presentar el contenido (que est en segundos) y mostrarlo como "horas:minutos:segundos"? Por ejemplo si el contenido es 16548 (segundos) que pusiera: 4:35:48 (horas:minutos:segundos)" Para hacer esto hay que recordar que Excel guarda la informacin de fechas (y horas) como fracciones de da. Por lo tanto, para tomar un valor en segundos hay que convertirlo a das as: Dividir el valor en segundos (16548) en (60 s / min * 60 min/hr * 24 hr/dia) para que de un total de =16548/(24*60*60) o =A1/(24*60*60) Y este resultado se puede presentar como hh:mm:ss
posted by Juan Pablo at 8:51:46 AM

martes, enero 22
Aqu hay un truco para los programadores de VBA que utilicen Office 2000 o Office XP. Jose Luis pregunta "Cuando llamo al Help sin emplear el Asistente (F1, asistente inhabilitado) la pantalla de Excel se me hace ms estrecha para que en pantalla est la hoja de clculo actual y la ventana de ayuda. Hay alguna forma de evitar este comportamiento.Lo que quiero es que Excel se quede en su tamao y la ayuda se me muestre maximizada. Aunque cambie el tamao de Excel tan pronto pulso sobre la ventana de ayuda se me vuelve al tamao de mitad de pantalla, y cuando cierro la ayuda se vuelve al tamao maximizado o anterior tamao que lo tuviese." Para modificar este comportamiento hay que entrar a modificar el Registro. Es importante hacer un BackUp del Registro antes de realizar cambios sobre l. Si no sabe hacer esto, por favor no intente realizar los cambios propuestos. MrExcel.com no asume ninguna responsabilidad por las consecuencias de los cambios realizados. Entrar al Regedit, buscar la llave HKEY_CURRENT_USER\Software\Microsoft\Office\9.0\Common\HelpViewer Si ah no aparece una variable que se llama 'IsFloating' hay que crearla, como DWORD, y asignarle el valor de 1. Para hacer el cambio en Office XP, hay que buscar la llave HKEY_CURRENT_USER\Software\Microsoft\Office\10.0\Common\HelpViewer
posted by Juan Pablo at 12:08:28 PM

lunes, enero 21
Jorge en Buenos Aires pregunta "Cmo puedo llenar una columna con el ltimo da del mes, comenzando a partir del ltimo da de un mes en particular?. He tratado usando rellenar series, pero si comienzo por ejemplo el 30 de junio de 2002, la siguiente celda ser el 30 de julio de 2002, y no el 31 de julio, que es lo que necesito." Para poder hacer esto se requiere una frmula. Si la fecha inicial (Junio 30, 2002) est en A2, se puede poner esta frmula en A3 y arrastrar hacia abajo. =FECHA(AO(A2),MES(A2)+2,0)
posted by Juan Pablo at 6:44:53 AM

sbado, enero 19
John Munoz pregunta "Estoy tratando de calcular la mediana de los salarios usando un cdigo de trabajo especfico usando una gran cantidad de datos...algo parecido a SUMAR.SI pero que calcule la Mediana. Hay alguna forma de hacerlo?"

Para resolver este problema se debe usar una de las caractersitcas ms podersas de Excel: Las frmulas matriciales (O frmulas CSE, como nos referimos a ellas aqu en MrExcel.com, para aprender ms acerca de estas frmulas, visiteeste tip). Asumiendo que los cdigos de trabajo estn en A2:A100 y los Salarios en B2:B100 la siguiente frmula calculara el resultado esperado: =MEDIANA(SI(A2:A100="Cdigo",B2:B100)) Es importante recordar que esta es una frmula CSE, para ingresarla se debe presionar al tiempo Control Shift Enter, en vez de slo Enter como con las dems frmulas.
posted by Juan Pablo at 9:31:11 AM

viernes, enero 18
Kate pregunta "Hay alguna forma de redondear los nmeros a la prxima decena ?" Esta funcin redondea el nmero que haya en A2 a la prxima decena. =MULTIPLO.SUPERIOR(A2,10)
posted by Juan Pablo at 6:16:49 AM

jueves, enero 17
Una pregunta comn es "Cmo puedo hacer para que BUSCARV devuelva 0 o "" en vez de #N/A! ?" Asumiendo que la frmula actual es =BUSCARV(A1,$B$2:$D$100,3,Falso) o ms corto =BUSCARV(A1,$B$2:$D$100,3,0) el mtodo usual es: =IF(ESNOD(BUSCARV(A1,$B$2:$D$100,3,0)),, BUSCARV(A1,$B$2:$D$100,3,0)) pero esto obliga a Excel a calcular DOBLEMENTE el BUSCARV, que es una frmula "costosa" en trminos de eficiencia. Una solucin mejorada es: =SI(CONTAR.SI($B$2:$B$100,A1), BUSCARV(A1,$B$2:$D$100,3,0),) De esta forma el BUSCARV slo se calcula si el valor de A1 existe en B2:B100, y por lo tanto BUSCARV no devolver #N/A!
posted by Juan Pablo at 6:24:20 AM

mircoles, enero 16
Buenos das, a partir de hoy encontrarn aqu trucos, frmulas, funciones, o soluciones a preguntas especficas usando Excel. Javi pregunta "Hola. Tengo una macro que abre un archivo, copia datos y le cierra. Que le pongo para que no se vean las cosas que hace la macro?, es decir como se desactiva el eco?? Saludos y gracias." Al principio del macro (O antes de realizar las operaciones a "ocultar") se pone Application.ScreenUpdating = False y al final, para restaurar el valor: Application.ScreenUpdating = True
posted by Juan Pablo at 11:21:17 AM

S-ar putea să vă placă și