martes

Extraer numeros de cadena alfanumerica (mejorada)

Hola!
Esta vez aportare una formula la cual sirve para extraer solo numeros de una cadena de texto (o sea de una celda), pues bien la he mojorado, ya que con un colega en otro foro, la referenciamos y me pico lo adicto y la mejore para que sea utilizada en diferentes idiomas de Excel

Mejoras
1- Modifique esto a =COINCIDIR(VERDADERO... por esto =COINCIDIR(1...
2- Modifique esto = FILA($1:$9)... por esto FILA(INDIRECTO(1&":"&LARGO(A2)))...
3- Modifique esto =1*EXTRAE(... por esto =--EXTRAE(... {en toda la formula}

=--EXTRAE(A2,COINCIDIR(1,--ESNUMERO(--EXTRAE(A2,FILA(INDIRECTO(1&":"&LARGO(A2))),1)),),CONTAR(--EXTRAE(A2,FILA(INDIRECTO(1&":"&LARGO(A2))),1)))


Espero sea de utilidad y comprension para todos

La formula original/fuente se encuentra aqui: Extraer numeros de cadena alfanumerica
Proporcionado por Microsoft MVP Ashish Mathur

Saludos desde Honduras

jueves

Sustituir contra Reemplazar (Substitute vrs Replace)

Hola a todos
Como el titulo lo indica, estas dos funciones son muy similares, pero "Replace" tiena ventaja... explico

Ayuda de la funcion Application.WorksheetFunction.Substitute: El método Substitute reemplaza el texto nuevo por el texto original dentro de una cadena de texto. Utilice el método Substitute cuando desee reemplazar texto específico en una cadena de texto; use el método Replace si desea reemplazar cualquier texto que aparezca en una ubicación específica dentro de una cadena de caracteres.

Sintaxis
expresión.Substitute(Arg1, Arg2, Arg3, Arg4)
expresión Variable que representa un objeto WorksheetFunction.

Ayuda de la funcion VBA.Replace: Devuelve una cadena en la que se reemplazó una subcadena especificada con otra subcadena un número especificado de veces.

Sintaxis
Replace(expresión, encontrar, reemplazarCon [, inicio[, Contar[, comparar]]])

Imaginemos una columna con datos, y que a esta en cada celda se debe reemplazar o sustituir algunos caracteres, pues bien he elaborado un archivo en el cual pueden realizar pruebas y notar, que la ventaja de VBA.Replace es que se puede reemplazar los caracteres cuantas ( Contar[ )veces necesite dentro de la cadena de texto, por el contrario Substitute tiene la limitante de poder hacerlo solo una vez

SUBSTITUTE:
Sub sustituir()
Dim texto1 As String
Dim texto2 As String
texto1 = Application.InputBox("Sustituir!", "Texto1", , , , Type:=1 + 2)
texto2 = Application.InputBox("Sustituir!", "Texto2", , , , Type:=1 + 2)
With Application
.ScreenUpdating = False
For x = 2 To Range("A" & Rows.Count).End(xlUp).Row
Cells(x, 1) = .Trim(.Substitute(Cells(x, 1), texto1, "", 1))
Cells(x, 1) = .Trim(.Substitute(Cells(x, 1), texto2, "", 1))
Next x
.ScreenUpdating = True
End With
Range("A1").Select
End Sub


REPLACE
Sub reemplazar()
Dim texto1 As String
Dim texto2 As String
texto1 = Application.InputBox("Reemplazar!", "Texto1", , , , Type:=1 + 2)
texto2 = Application.InputBox("Reemplazar!", "Texto2", , , , Type:=1 + 2)
With Application
.ScreenUpdating = False
For x = 2 To Range("A" & Rows.Count).End(xlUp).Row
Cells(x, 1) = VBA.Trim(Replace(Cells(x, 1), texto1, "", 1, 1))
Cells(x, 1) = VBA.Trim(Replace(Cells(x, 1), texto2, "", 1, 1))
Next x
.ScreenUpdating = True
End With
Range("A1").Select
End Sub


NOTA: no confundir ninguna de las dos funciones arriba con Application.WorksheetFunction.Replace si necesitan ver la diferencia busquen en la ayuda de VBA en Excel

Espero sea de mucha utilidad y experimento jeje

Saludos desde Honduras

miércoles

Cansada de besar sapos

Estas escenas son buenisimas, de esta pelicula, vean este segmento jeje



Saludos

martes

Toy Story 3

Esta tambien esta buenisima amigos



Saludos desde Honduras

Cars 2

Hola
Me encantan estas peliculas jeje asi que se las recomiendo



Saludos

domingo

ComboBox Dinamico (Userform)

Hola amigos!
Se conoce que existe una forma de llenar listas desplegables de modo dinamico, algo relacionado lo vimos en este tema: Listas Desplegables sin Desref y con Indice
Pues aqui un poco similar se trata este post y es llenar ComboBox desde un userform y para los que aun desconecen como hacerlo, aqui les adjunto un ejemplo, en el cual veran dos tipos, como importante, si exitieran espacios en blanco en la lista de datos (es decir celdas vacias) con codigo VBA se supera ese inconveniente, llenando sin espacios el ComboBox, automaticamente...



No es dificil, ni nada complicado, puesto que basta crear un bucle, para marcar el rango usado, condicionarlo y listo

Aqui los dos codigos:

Private Sub ComboBox1_enter()
Me.ComboBox1.Clear
For x = 2 To Range("A" & Rows.Count).End(xlUp).Row
If Cells(x, 1) <> Empty Then ComboBox1.AddItem Range("A" & x).Value
Next
End Sub


Private Sub ComboBox2_enter()
Me.ComboBox2.Clear
For Each celda In Range("A2:A" & Range("A" & Rows.Count).End(xlUp).Row)
If celda <> Empty Then ComboBox2.AddItem celda.Value
Next
End Sub



Y les adjunto el archivo para pruebas/revision/analisis/comentarios

Espero les guste o sea de utilidad

Saludos desde Honduras

lunes

Lorito

Hola
Espero se tiren al suelo de la risa con este curioso y simpatico lorito jejeje yo no me paré de reir

Saludos desde Honduras

Los 10 mejores

Hola
En una consulta alguien solicitaba lo siguiente: necesito mostrar las mejores n_ventas de una BD, pero un formulario y dentro de un listbox y a la vez que se ordenen segun yo lo requiera, en este caso hacerlo por edad

Pues adjunto lo que le llame los 5 mejores... es un formulario, que lo unico que debe hacer el usuario es indicarle de que forma desea ordenarlo y de cuantos desea que sean las mejores ventas

Revisen el archivo para mayor comprension de parte de ustedes

Codigo y una breve explicacion del mismo:
Private Sub TextBox2_Change()

'Declarar la variable uf
Dim uf

'Desactivar el como la macro trabaja
Application.ScreenUpdating = False

'Saltar cualquier error
On Error Resume Next

'Seleccionar la hoja para filtrar
With Sheets("Filtro")

'Mostrar cualquier fila escondida
Cells.Rows.Hidden = False

'Limpiar el listbox
ListBox1.RowSource = Empty

'Desactivar si el filtro esta modo activo y mostrar los registros
If ActiveSheet.FilterMode Then
ActiveSheet.ShowAllData
End If

'Marcar el rango desde A32 hasta donde existan datos (hacia la derecha y hacia abajo) _
o sea el rango usado, limpiar y quitar color de celdas
With Range("A32").CurrentRegion
.Clear
.Interior.ColorIndex = xlNone
End With

'Si el textbox es menor o igual a cero, que proceda...
If Me.TextBox2.Value <= 0 Then
MsgBox "Indique el Top porfavor... debe ser mayor a 0 {cero}"
Cells.Rows.Hidden = False
ListBox1.RowSource = Empty
If ActiveSheet.FilterMode Then
ActiveSheet.ShowAllData
End If
With Range("A32").CurrentRegion
.Clear
.Interior.ColorIndex = xlNone
End With
'Limpiar el textbox y activar cursor en el mismo
Me.TextBox2 = ""
Me.TextBox2.SetFocus
Exit Sub
End If

'Si el textbox es diferente a campo vacio
If Me.TextBox2.Value <> "" Then
With Range("A1").CurrentRegion
'Filtrar por la columna C, segun el Top/Mejor numero
.AutoFilter 3, Me.TextBox2.Value, xlTop10Items
.Copy
'Pegar solo los datos visibles, desde A32
With .SpecialCells(xlCellTypeVisible)
Range("A32").Select
ActiveSheet.Paste
Application.CutCopyMode = False
'Ordenar los datos pegados, segun el orden ingresado
With Range("A32").CurrentRegion
.Sort Range("C33"), Me.TextBox1.Value, Header:=xlGuess
End With
Range("A1").Select
End With
End With
End If

'Mostrar los datos en el listbox
ListBox1.RowSource = "A32:C100"

'Crear el siclo o bucle para ocultar las filas que se muestran en listbox (para estetica)
uf = Cells(65536, 1).End(xlUp).Row
For g = 32 To uf
If Cells(g, 1) <> "" Then Rows(g).Hidden = True
Next

End With

'Anular o desactivar cualquier error inniciado
On Error GoTo 0
'Activar la pantalla
Application.ScreenUpdating = True

End Sub

Private Sub CommandButton1_Click()
'Limpiar el formulario
Application.ScreenUpdating = False
ListBox1.RowSource = Empty
Cells.Rows.Hidden = False
If ActiveSheet.FilterMode Then
ActiveSheet.ShowAllData
End If
With Range("A32").CurrentRegion
.Clear
.Interior.ColorIndex = xlNone
End With
Me.TextBox1 = ""
Me.TextBox2 = ""
Me.TextBox1.SetFocus
Exit Sub
Application.ScreenUpdating = True
End Sub

Private Sub UserForm_Activate()
'Al iniciar el fornulario, activar el cursor en el textbox
Me.TextBox1 = ""
Me.TextBox2 = ""
Me.TextBox1.SetFocus
End Sub

Private Sub TextBox1_Change()
'Si el numero para ordenar los datos es mayor a 2, que proceda...
If Me.TextBox1.Value > 2 And Me.TextBox1.Value <> "" Then
MsgBox "Ingrese solamente: el # 1 (orden ascendente) o # 2 (orden descendente)", , "Error de ingreso"
Me.TextBox1 = ""
Me.TextBox2 = ""
Me.TextBox1.SetFocus
Exit Sub
End If
End Sub


Saludos desde Honduras


Copiar y pegar datos a otra hoja

Hola
Un colega necesitaba crear una macro que copiara los datos de una BD a otra hoja del mismo libro, pero pegarlos como valores [ya que algunas celdas contendrían formulas] eso si solo tenia que copiar exactamente la BD [no filas completas, en otras palabras marcar automáticamente el rango de la BD e ir a la otra hoja y pegarlos] pero con la nota que cada vez que pegara datos estos se fueran copiando debajo de los datos ya copiados, una y otra vez...

Lo que adapte no es la gran macro ni tan compleja que se diga pero lo que si trate que la macro sea lo mas rápida posible, mejor vean el código y el archivo para mejor entendimiento y esperando sea de utilidad a mas de alguno

Sub copiar_pegar()
    Dim col, ulf
    Application.ScreenUpdating = False
    col = Cells(6, Columns.Count).End(xlToLeft).Column
    ulf = Range("M" & Rows.Count).End(xlUp).Row
    ActiveSheet.Range(Cells(6, 1), Cells(ulf, col)).Copy _
 
    With Sheets("Hoja2").Range("H" & Rows.Count).End(xlUp).Offset(1)
        .PasteSpecial Paste:=xlPasteValues
        Application.CutCopyMode = False
    End With
    Application.ScreenUpdating = True
End Sub


Saludos desde Honduras


Mostrar con formula los resultados de filtros

Hace unos dias consultaba un usuario que porque no le aparecian los resultados [en la barra de estado] del autofiltro en Excel 2003, es decir cada vez que utilizaba el autofiltro no se reflejaban cuantos datos del total se habian filtrado... antes de todo mencionarles que en Excel 2003 esta la curiosidad o desventaja que cuando una tabla contiene formulas y si filtra los resultados no son mostrados, pero en Excel 2007 hayan o no formulas en las BD este problema no existe

La formula la podran ver en la celda F1 que es lo mismo que Excel muestra en la barra de estado, espero sea de utilidad

Saludos desde Honduras

Indexar numeros ignorando espacios

Hola
Un miembro de uno foro, requeria que se ordenara en una columna los datos que tenia en otra columna, pero se encontraban salteados es decir entre ellos habian espacios {celdas de por medio} y lo que este necesitaba que en esa columna se indexaran ordenadamente segun su aparicion... pero viene lo bueno, este amigo solicitaba una respuesta sin INDICE y sin MACROS hummm que raro no jeje

A este ejercicio le aplique una de las funciones mas comunes en Excel llamada BUSCARV y con una sola columna auxiliar, revisen el archivo para que se entiendan un poco mas de lo que les menciono arriba

Nota: encontraran dos formulas mas y vean tambien la hoja dos

Saludos desde Honduras

Buscar mayor y menor [condicionado]

Hola
En una consulta un usuario preguntaba: Encontrar el almacén que venda el producto más caro y más barato, con los datos de la Tabla... No se deben añadir ni filas ni columnas, a más de las existentes en la tabla

Pues bien para aclarar un poco mas la pregunta de este amigo, se trataba de encontrar el almacen que vende mas caro y mas barato un producto, los nombres de los productos estan de forma vertical y los almacenes en horizontal

Debajo de la tabla hay dos tablas con las formulas, una de ellas se puede elegir de una lista desplegable el producto para luego mostrar el almacen mas caro o barato

Espero sea de utilidad

Saludos desde Honduras

jueves

Turbo Filtro [Mas que un filtro]

Hola nuevamente, esta vez les mencionare que hay una excelente alternativa de filtros de datos de modo avanzado y a la cual se le denomina Turbo Filtro, hasta donde se los creditos pertenecen a Torsten Harden asi que espero sea de utilidad y cualquier comentario pues lo hacen porfavor

Saludos desde Honduras

domingo

El Heroe de Todos

Hola
Es una pelicula infantil muy buena, ademas es entretenida, recomiendo la vean y que la disfruten como yo (y mis nenes jeje)




Saludos a todos

sábado

Imprimir segun filtro de fecha desde formulario

Hola
Hace un par de dias, un amigo consultaba lo siguiente: " Hola, soy algo nuevo en esto de excel y necesito que alguien me pueda ayudar con una macro he estado realizando.
La macro consiste en lo siguiente:
Tengo el formulario que contiene un cuadro de texto y un boton de comando, en el cuadro de texto se introduce la fecha y al dar un click sobre el boton, que me imprima solo los registros de la fecha indicada
"

Lo que se me ocurrio fue realizar un filtro avanzado, en el mismo lugar, es decir en la misma hoja... una vez se filtra por la fecha ingresada desde el formulario, se manda a la impresora inmediatamente y luego se muestran los datos, quedando completamente visible la BD

Ver codigo:

Private Sub CommandButton1_Click()

Application.ScreenUpdating = False
With ActiveSheet
With Range("A2")
.Value = Format(Me.TextBox1, "0")
.NumberFormat = "m/d/yyyy"
End With
Cells.Rows.AutoFit
Cells.Columns.AutoFit
With Range("A4").CurrentRegion
.AdvancedFilter 1, Range("A1").CurrentRegion 'Range("A1:A2")
.PrintOut
End With
If ActiveSheet.FilterMode Then ActiveSheet.ShowAllData
Unload Me
End With
Application.ScreenUpdating = True

End Sub

Private Sub CommandButton2_Click()
Unload Me
End Sub


Revisen el adjunto y espero sea de utilidad a ustedes

Saludos desde Honduras

Extraer Unicos (Formula no matricial)

Hola
Hay varias formas de extraer unicos (datos no repetidos) de una lista, pero esta vez les anexo un archivo con formula no matricial, pues en su mayoria que se han desarrollado son matriciales (ya se han tocado temas sobre cual es la diferencia, pues para mi la respuesta mas sencilla es que las matriciales se confirman con ctrl+mayus+enter y las otras solo con enter... aunque en el fondo la formula trabaje con matrices)



Saludos desde Honduras

El poso de los deseos

Jajajaja espero lo disfruten, como yo!

Saludos

Min y Max con Indice

Hola a todos!
Pensemos por un momento que tenemos una lista de numeros desordenados en una columna, y que requerimos indentifcar el Minimo y Maximo, pues bien esto fue solicitado por un usuario en uno de los foros que frecuento y le di la respuesta que a continuacion les adjunto

Incluye: formula no matricial para buscar el Min y Max, aplique un formato condicional para identificar rapidamente que rango se esta tratando y la suma de este, tambien incluí una validacion dinamica (con rango nombrado) pero con Indice, esta rango dinamico es muy bueno ya que no afecta al recalculo de la hoja


{Por cierto me he dado cuenta que es muy fructifero y retroalimentador postear lo que aporto en otros foros, por tal hecho tratare de ir creando todos esos temas aqui}

Saludos y espero les sirva amigos!

jueves

Bibiana no sólo es árbitro, también es ¡policía!

Hola
Esta preciosa arbitro es Alemana... chequen el video jeje



Saludos desde Honduras

lunes

INDICE utilizando "AREA"

Una de las funciones mas conocidas y utilizadas se llama INDICE, esta es muy poderosa y valiosa como Buscarv, y combinada con la funcion COINCIDIR es sencillamente estupenda

Pues bien en esta ocasion, adjunto un ejemplo, donde precisamente utilizo esas dos funciones, pero con la novedad, que hago uso de el argumento "AREA", si? area!, que muy poco uso le damos (o se le da jeje)

Sintaxis desde la misma ayuda de EXCEL

Devuelve la referencia de la celda ubicada en la intersección de una fila y de una columna determinadas. Si el argumento ref es una selección múltiple, se podrá elegir la selección en la que se buscará la referencia.

INDICE(ref;núm_fila;núm_columna;núm_área)

Ref es una referencia a uno o varios rangos de celdas.

Si especifica un rango no adyacente como argumento ref, escríbalo entre paréntesis.
Si cada área del argumento ref contiene una sola fila o columna, el argumento núm_fila o núm_columna respectivamente, es opcional. Por ejemplo, utilice INDICE(ref;;núm_columna) para un argumento ref con una sola fila.
Núm_fila es el número de la fila en el argumento ref desde la que se devolverá una referencia.

Núm_columna es el número de la columna en el argumento ref desde la que se devolverá una referencia.

Núm_área selecciona un rango en el argumento ref desde el cual se devolverá la intersección de núm_fila y núm_columna. La primera área seleccionada o especificada se numera con 1, la segunda con 2 y así sucesivamente. Si se omite núm_área, INDICE usa área 1.

Por ejemplo, si ref describe las celdas (A1:B4;D1:E4;G1:H4), entonces núm_área 1 es el rango A1:B4, núm_área 2 será el rango D1:E4, y núm_área 3 es el rango G1:H4.

Bueno ya no los enredo mas... y espero sirva de mucho, abajo pueden bajar el archivo para mejor referencia



Saludos desde Honduras

domingo

Encontrar color y escribir "OK" (macro)

Una macro que cumple, cuando un color especifico se encuentra y escribe una frase en otra columna, no es la gran macro, pero ayuda mucho cuando disponemos de versiones anteriores a 2007, ya que estas no tienen la opcion de ver o fltrar por color y mucho menos hacer algo automatizado con colores, como el ejemplo que adjunto

Espero a mas de uno le sirva



Saludos y que esten bien

Buscar(v) Multiple

Si, Buscar(v) Multiple "columna", es una forma de usar varias funciones y se vuelve muy valiosa para busquedas de datos dentro de una tabla o BD

Mejor revisen el archivo y si tienen comentarios pues bienvenidos sean

Saludos!

Devolver datos no coincidentes

Hola!
Aqui un archivo, donde se busca encontrar datos que no coinciden entre una columna y otra (en este caso A y B) una vez se logra esto, entonces deben mostrarce en la columna C (he utilizado funciones como: Kesimomenor, Indice, Contarsi y la logica SI)



Espero sea de utilidad, la formula es {matricial}

Saludos desde Honduras

sábado

España vrs Honduras (Mundial de 1982)

Pues como mi blog es relacionado no solo a Excel jeje miren este video (muy bueno por cierto, los españoles como siempre con su gran cariño hacia nosotros)



Espero les guste...

domingo

Listas desplegables dinamicas sin Desref y con Indice

Hola amigos
Pues bien se sabe que las listas desplegables dinamicas se han elaborado con la funcion DESREF y otras como CONTAR, he logrado una forma de hacerlas sin estas funciones, ya que DESREF es volatil (ralentiza la PC cuando la utilizamos mucho), y una de nuestras aliadas para lograrlo se llama INDICE, con esto evitaremos el recalculo y ganamos mas recurso en nuestra PC

Adjunto el archivo para que se den una idea y a lo mejor lo necesitan en un futuro

Cualquier mejora o aporte es bienvenido

Visiten este tema en ayudaexcel para que despejen aun mas alguna duda: Validacion dinamica sin DESREF

Ahh este ejemplo que veran no es unico, ya que se pueden armar las formulas segun la necesidad del caso



Saludos y que esten bien

Copiar hoja con INPUTBOX

Hola de nuevo!
En una ocacion en un foro, de los cuales frecuento, me encontre con un tema, en el cual un usuario necesitaba ir creando hojas de acuerdo a los meses del año, y que este a su vez eliminara de la hoja a copiar, ciertas filas con frases especificas.

Pues bien le subi una macro sencilla, pero lo que llama la atencion es como se vuelve util el cuadro de dialogo o Application.InputBox, ya que con este no necesitamos ninguna celda o algun espacio dentro de una hoja para darle informacion a nuestras macros, tambien se vuelve util cuando queremos referenciar un rango, ingresar texto o numeros...etc

Pegarla en un modulo y luego crear un boton para la misma

Sub copiarh()
    
    Dim hj As Worksheet, ulfi As Integer
    
    Application.ScreenUpdating = False
    
    hoj = Application.InputBox("Nombre de la hoja", "Copiar hoja", Type:=2)
    
    ActiveSheet.Copy After:=Sheets(Sheets.Count)
    With ActiveSheet
        .Name = hoj
        .Shapes(1).Delete
    End With
    
    ulfi = Cells(Rows.Count, 1).End(xlUp).Row
    For x = ulfi To 18 Step -1
        If Cells(x, 2) = "B" Then Rows(x).Delete
        If Cells(x, 2) = "M/S" Then Rows(x).Delete
    Next
    
    Range(Cells(18, 2), Cells(ulfi, 2)).ClearContents
    Range("A1").Select
    
    Application.ScreenUpdating = True
        
End Sub


Adjunto tambien el archivo para pruebas

Espero le sirva a mas de uno y cualquier comentario hacerlo saber


Saludos desde Honduras

miércoles

Unicos (Aun despues de filtrar tabla)

Hola amigos!

En esta oportunidad adjunto un archivo en Excel, que cuenta unicos, aun despues de filtrar una tabla

Existe una formula con SUMAPRODUCTO que logra contar los unicos pero queda fija ante el autofiltro, es por eso que me parece muy interesante la que les mencione primero

A ver que tal les parece! y si hay comentarios o mas propuestas, ojala las hagan llegar




Saludos!!!