miércoles, 31 de agosto de 2016

Cells.Find

El único parámetro obligatorio es el que establece lo que queremos buscar, y que es:
what:=”valor a buscar”
Tan solo con esto, la instrucción nos devolverá la celda en la que se encuentre el valor buscado o nothing, en caso de que no lo halle.
After:=celda
Le podemos indicar a partir de que celda queremos empezar a buscar
lookIn:=donde buscar
Con dos opciones: buscar en valores (xlValues) y buscar en formulas (xlFormula)
LookAt:=como buscar
con xlWhole para búsquedas de palabra exacta, o xlPart para búsquedas con parte de la palabra
SearchOrder:= orden de busqueda
para indicarle si queremos realizar la busqueda por filas(xlRows) o por columnas(xlColumns)
SearchDirection:= direccion de la busqueda
Pensado para continuar con la busqueda con dos posibles opciones:
§  xlNext – Continuar con siguiente
§  xlPrevious-Continuar con anterior
MatchCase:=true/false

Para indicar si ha de detectar mayúsculas y minúsculas

lunes, 29 de agosto de 2016

domingo, 28 de agosto de 2016

Condicionales y Ciclos

Acceso a las Propiedades de los objetos



Obtener el nombre de una hoja de trabajo

(Propiedad Name)

Sub Propiedades()
'Nombre de la primera hoja de trabajo
'
    MsgBox Worksheets(1).Name
    
End Sub


Obtener el tamaño de la letra de una celda

(Propiedad Font.Size)

Sub Propiedades1()
'Tamaño de letra
'
    MsgBox Worksheets(1).Cells(1).Font.Size

End Sub


Obtener la dirección de la celda activa

(Propiead Address)

Sub Propiedades2()
' Dirección de la celda activa
'
    MsgBox ActiveCell.Address

End Sub


Cambiar el tipo de letra de una celda

(Propiedad Font.Name)

Sub Propiedades3()
' Cambiando el tipo de letra
'
    Worksheets(1).Cells(1).Font.Name = "Georgia"

End Sub


Cambiar el estilo de letra de una celda

(Propiedad Font.Bold)

Sub CambiarTipoLetra()
  Range("A2").Font.Bold = True
End Sub

Contar el número de hojas de un libro de trabajo

(Propiedad Count)

Sub ContarHojas()
'Contar el número de hojas de un libro de trabajo
'
Dim numHojas As Integer
    numHojas = Application.Sheets.Count
    MsgBox numHojas
End Sub



Acceso a los Métodos de los Objetos

Los métodos en VBA normalmente hacen algo o realizan ciertas operaciones sobre los objetos.

Seleccionar celdas

Sub SeleccionarCeldas()
'Seleccionar la celda A1
    Range("A1").Select
End Sub

Sub SeleccionarRangoCeldas()
'Seleccionar un rango de celdas
    Range("A1:A5").Select
End Sub

Limpiar el contenido de un rango de celdas

Sub LimpiarContenidos()
' Limpiar el contenido del rango A1:A5
    Range("A1:A5").ClearContents
End Sub

Activar una hoja de trabajo

Sub Metodos()
' Activa la hoja de trabajo "Hoja2"´
'
    Sheets("Hoja2").Activate
End Sub

Impresión previa de una hoja de trabajo

Sub Metodos2()
' Impresión previa de la hoja de trabajo número 1
'
    Sheets(1).PrintPreview (True)
End Sub

Copiar rangos

Sub CopiarRangos1()
'Copia el contenido de la celda A1 a la celda B1
    Range("A1").Copy Range("B1")
End Sub

Sub CopiarRangos2()
'Copia el contenido del rango A1:A5 a B1
    Range("A1:A5").Copy Range("B1")
End Sub

Cortar rangos

Sub CortarRangos()
'Corta el contenido de la celda A1:A5 y lo pega en la celda B1
    Range("A1:A5").Cut Range("B1")
End Sub



Ciclo For...Next

Ciclo For...Next


For contador = inicio To final [STEP incremento]
   [instrucciones]
Next [contador]



Sub Ciclos()
Dim i As Integer

    For i = 1 To 10
        Cells(i, 1).Value = i
    Next i
    
End Sub



Sub Ciclos2()
Dim i As Integer

    For i = 1 To 10
        Cells(i, 1).Value = i
        Cells(i, 2).Value = i ^ (1 / 2)
        Cells(i, 3).Value = i ^ 2
        Cells(i, 4).Value = i ^ 3
    Next i
    
End Sub



Cambiar el incremento en el ciclo

Sub Ciclos4()
Dim i As Integer
Dim UltimaFila As Long

    UltimaFila = Cells(Rows.Count, 1).End(xlUp).Row

    For i = 2 To UltimaFila Step 2
     Cells(i, 1).Resize(1, 4).Interior.ColorIndex = 36
    Next i
    
End Sub


Sub Ciclos5()
'Escribe el texto "Mayor que cero" a la derecha
'de la columna de trabajo
'
Dim UltimaFila As Integer
Dim ColumnaTrabajo
Dim i As Integer

    ColumnaTrabajo = 3
    UltimaFila = Cells(Rows.Count, ColumnaTrabajo).End(xlUp).Row
    
    For i = 1 To UltimaFila
    
        If Cells(i, ColumnaTrabajo).Value > 0 Then
            Cells(i, ColumnaTrabajo + 1).Value = "Mayor que cero"
        End If
        
    Next i
    
End Sub


Ciclos dentro de ciclos

Sub Ciclos()
Dim i As Integer
Dim j As Integer

    For i = 1 To 10
        For j = 1 To 5
            Cells(i + 1, j + 1).Value = i * j
        Next j
    Next i
    
End Sub


Ciclo Do While...Loop

Repetir el ciclo hasta que se cumpla alguna condición


 Do {While | Until} condición
       'código
  Loop



Sub Ciclos()
Dim fila As Integer
    fila = 1

    Do While Cells(fila, 1) <> ""
         Cells(fila, 2).Value = fila
         fila = fila + 1
    Loop
End Sub


Repetir el ciclo hasta que se encuentre una celda vacía

Sub Ciclos()
Dim i As Integer

    i = 1
    
    Do While Not IsEmpty(Cells(i, 1))
      i = i + 1
    Loop
    
   Cells(i, 1).Select
End Sub

Ciclo Do...Loop Until

Repetir el ciclo hasta que se cumpla alguna condición


Do
       'código
    Loop {While | Until} condición


Sub Ciclos()
Dim fila As Integer

    fila = 1
    Do
        Cells(fila, 2) = fila
        fila = fila + 1
    Loop Until Cells(fila, 1).Value = ""

End Sub

Repetir el ciclo hasta que se encuentre una celda vacía

Sub Ciclos()
Dim i As Integer

    i = 0
    
    Do
      i = i + 1
    Loop Until IsEmpty(Cells(i, 1))
    
   Cells(i, 1).Select
End Sub

Cambiar los colores del fondo de una celda

Cambiar el color del fondo de una celda

Propiedad rango.Interior.ColorIndex 

Muestra los primeros 21 colores de fondo que pueden obtener con la propiedad ColorIndex del objeto Interior.

Sub IndiceColor()
Dim i As Integer

Cells(1, 1).Value = "Índice de color"
Cells(1, 2).Value = "Color"

For i = 0 To 20
    Cells(i + 2, 1).Value = i
    Cells(i + 2, 2).Interior.ColorIndex = i
Next i

End Sub


Excel índice de colores


Cambiar el color del fondo de una celda

Tabla antes de la macro

Excel tabla ventas

Cambia el color de las filas que contienen en la segunda columna la palabra "Ventas"
Sub CambiaFondoCelda()
Dim i As Integer

For i = 2 To 11
    If Cells(i, 2).Value = "Ventas" Then
        Cells(i, 1).Resize(1, 4).Interior.ColorIndex = 6
    End If
Next i

End Sub


Tabla después de la macro


Excel Cambiar color de fondo de la celda

Ciclos que muestran el uso de contadores y acumuladores

El siguiente procedimiento muestra el uso de contadores y 
acumuladores en un ciclo.
Calcula la suma y el promedio de un conjunto de números en un 
rango dado.


Calcular sumas y promedios de un rango dado


Sub Promedios()
Dim suma As Double
Dim promedio As Double
Dim n As Double
Dim celda As Range

    suma = 0 'acumula los valores
    n = 0    'cuenta los valores
    
    For Each celda In Selection
        n = n + 1
        suma = suma + celda.Value
    Next celda
    
    promedio = suma / n
    MsgBox "Valores leídos = " & n & vbCrLf & _
           "Suma = " & suma & vbCrLf & _
           "Promedio = " & promedio
End Sub



Cuenta el número de valores mayores, menores o iguales al promedio 
de un conjunto de numero en un rango dado,




Ejemplo del uso de contadores en VBA


Sub Contadores()
Dim suma As Double
Dim promedio As Double
Dim n As Double
Dim celda As Range
Dim mayor As Double
Dim menor As Double
Dim igual As Double

    suma = 0 'acumula los valores
    n = 0    'cuenta los valores
    
    For Each celda In Selection
        n = n + 1
        suma = suma + celda.Value
    Next celda
    
    promedio = suma / n
    
     mayor = 0 'cuenta los valores mayores al promedio
     menor = 0 'cuenta los valores menores al promedio
     igual = 0 'cuenta los valores mayores al promedio
     
     For Each celda In Selection
        
        If celda.Value > promedio Then
            mayor = mayor + 1
        End If
        
        If celda.Value < promedio Then
            menor = menor + 1
        End If
        
        If celda.Value = promedio Then
            igual = igual + 1
        End If
        
     Next celda
    
     MsgBox "Valores leídos      = " & n & vbCrLf & _
            "Promedio            = " & promedio & vbCrLf & _
            "Mayores al promedio = " & mayor & vbCrLf & _
            "Menores al promedio = " & menor & vbCrLf & _
            "Iguales al promedio = " & igual & vbCrLf

End Sub


sábado, 27 de agosto de 2016

Macros para asignar valores a una celda


Contenidos

1 Asignar un valor a la celda activa

2 Asignar valores a una celda específica

3 Asignar el mismo valor a un conjunto de celdas

4 Asignar valores a una celda en una hoja de trabajo específica

5 Asignar una fórmula a una celda específica

6 Asignar un valor a una hoja y a una celda específica utilizando la propiedad Cells


Asignar un valor a la celda activa


Sub AsignarValores1()

'Asignarle un valor a la celda activa

'

    ActiveCell.Value = "Hola, Mundo"

End Sub


Asignar valores a una celda específica



Sub AsignarValores2()

' Asignar un valor a una celda específica

    Range("B3").Value = 100

End Sub


Asignar el mismo valor a un conjunto de celdas



Sub AsignarValores3()

' Asignar el mismo valor a un conjunto de celdas

    Range("B1:B5").Value = 500

End Sub


Asignar valores a una celda en una hoja de trabajo específica



Sub AsignarValores4()

' Asignar un valor a una celda en una hoja de trabajo específica

    Worksheets("Hoja2").Range("B2").Value = 500

End Sub


Asignar una fórmula a una celda específica



Sub AsignarFormula()

' Asigna una fórmula a una celda específica

    Range("A1").FormulaLocal = Rnd()

End Sub


Asignar un valor a una hoja y a una celda específica utilizando la propiedad Cells



Sub Seleccionar()

' Seleccionar la celda (1, 1)

    Worksheets(1).Cells(1, 1).Value = 100

End Sub


viernes, 26 de agosto de 2016

Macros para buscar palabras en un texto


Contenidos

1 Macro para buscar palabras en un rango de celdas dado

2 Macro para buscar y resaltar palabras dentro de un texto

3 Macro para buscar en un texto una lista de palabras

Macro para buscar palabras en un rango de celdas dado

  • La macro cambia de color el fondo de la celda que contiene la palabra
  • La macro es sensible a las mayúsculas y minúsculas
  • Puede encontrar palabras completas o parte de una palabra
  • Utiliza el operador LIKE para localizar la palabra

Sub BuscarPalabras()
Dim Celda As Range
Dim palabra As String

    palabra = InputBox("Palabra a buscar")
    palabra = "*" & palabra & "*"
    
    For Each Celda In Selection

        If Celda.Value Like palabra Then
            Celda.Interior.ColorIndex = 36
        End If
        
    Next Celda
End Sub

En el siguiente ejemplo, se busca la palabra "José"

Excel buscar palabras operador LIKE 1

Resultado de la búsqueda.

Excel buscar palabras operador like 2

En el siguiente ejemplo, se busca la palabra "ez"

Excel buscar palabras operador like 3


Macro para buscar y resaltar palabras dentro de un texto

  • La macro cambia de color (rojo) la palabra encontrada dentro del texto
  • La macro es sensible a las mayúsculas y minúsculas
  • Puede encontrar palabras completas o parte de una palabra
  • Utiliza la función InStr para localizar la palabra

Sub ResaltarPalabras()
Dim Celda As Range
Dim palabra As String

    palabra = InputBox("Palabra a buscar")
    
    For Each Celda In Selection

        posicion = InStr(Celda.Value, palabra)
        
        If posicion > 0 Then
            Celda.Characters(posicion, Len(palabra)).Font.Color = vbRed
        End If
        
    Next Celda
End Sub

En el siguiente ejemplo, se buscó la palabra "José"

Excel buscar palabras función InStr
La siguiente macro resalta las diferentes ocurrencias de la palabra en el la misma celda.

Sub ResaltarPalabras2()
Dim Celda As Range
Dim palabra As String
Dim posicion As Integer

    palabra = InputBox("Palabra a buscar")
    
    For Each Celda In Selection
        posicion = InStr(1, Celda.Value, palabra)
        
        Do Until posicion = 0
            Celda.Characters(posicion, Len(palabra)).Font.Color = vbRed
            posicion = posicion + 1
            posicion = InStr(posicion, Celda.Value, palabra)
        Loop
        
    Next Celda

End Sub

En el ejemplo que sigue se buscó la palabra "amo"

Ejemplo macro Excel busca palabras en una celda


Macro para buscar en un texto una lista de palabras


La macro trabaja de la siguiente manera:
Solicita el rango donde se encuentra la lista de palabras a buscar (una palabra por cada renglón)
Solicita el rango de las celdas donde se encuentra el texto donde se buscan las palabras
Si encuentra la palabra en el renglón del texto, coloca la palabra encontrada en la columna a la 
derecha del renglón.  Limpia la celda de la derecha del texto en el caso de no encontrar la palabra

Sub buscarPalabras()
Dim palabra As Variant
Dim celda As Variant
Dim direccionCelda As String
Dim rangoPalabras As Range
Dim rangoTexto As Range
Dim contenidoCelda As String
Dim contenidopalabra As String

'Proporcionar el rango de la palabra a buscar
Set rangoPalabras = Application.InputBox(Prompt:="Seleccionar el rango de entrada de las palabras a buscar", _
        Title:="Rango palabras", Type:=8)

'Proporcionar el rango del texto
Set rangoTexto = Application.InputBox(Prompt:="Seleccionar el rango de entrada del texto donde se busca", _
        Title:="Rango texto", Type:=8)

'Buscar en cada celda del texto la palabra
For Each celda In rangoTexto
   
    'Buscar cáda palabra en la celda activa
    For Each palabra In rangoPalabras
        contenidoCelda = LCase(celda.Value)      'convertir a minúscula las celdas del texto
        contenidopalabra = LCase(palabra.Value)  'convertir a minúscula la palabra a buscar
        direccionCelda = celda.Address
       
        If contenidoCelda Like "*" & contenidopalabra & "*" Then
            Range(direccionCelda).Offset(0, 1) = contenidopalabra
            Exit For 'salir del ciclo cuando encuentre la palabra
        Else
           Range(direccionCelda).Offset(0, 1) = ""
        End If
    Next palabra
Next celda
End Sub

En el siguiente ejemplo, la lista de palabras a buscar se encuentra en la columna D. El rango del texto donde se busca la palabra se encuentra en la columna A.  Si se encuentra la palabra se escribe a la derecha de la celda donde se encontró, columna B.