Saltar al contenido

Contar Días


Ir a la solución Solucionado por JSDJSD,

Recommended Posts

publicado (editado)

Buenas noches estimados espero estén bien

Dentro del Formulario VTL (frmvtl) estan los TextBox 16, 17, 18, 19, 20, 21, 22 los cuales necesito que cuando contengan un valor cualquiera la macro los tome como 1 (TextBox<>””=1) y cuando los TextBox estén vacíos la macro los tome como 0 (TextBox=””=0) seria como usar la Función Contar de Excel, siendo así y conforme al funcionamiento de la Macro Calculo en el TextBox23 en la medida que se van introduciendo los datos el conteo o suma debe reflejarse de manera automática y simultánea en los Textbox 25, 27, 28, 29, de la siguiente manera:

TextBox25 = TextBox16 +TextBox17+TextBox18+TextBox19+TextBox20+TextBox21+TextBox22

TextBox27 = TextBox16 +TextBox17+TextBox18+TextBox19+TextBox20+TextBox21+TextBox22

TextBox28 = TextBox27

TextBox29 = TextBox21+TextBox22

Por último, necesito que el resultado de la siguiente formula:

SUMPRODUCT(('USUARIOS & PRIVILEGIOS'!$BS27:BS56>=EOMONTH(TODAY(),-1)+1)*('USUARIOS & PRIVILEGIOS'!$BS27:BS56<=EOMONTH(TODAY(),0)))

Se refleje en el TextBox31 está formula ya la he utilizado en otras partes de mi proyecto dentro de un Funcion Select Case en conjunto con la Función Evaluate pero en este caso que es una única fórmula no sé cómo hacerla funcionar, el resultado esperado para el mes de Octubre es TextBox31 = 1

HHE PRUEBA.xlsm

Editado el por jues
publicado (editado)
En 12/10/2024 at 13:16 , JSDJSD dijo:

Si te explicas mejor y pones un ejemplo visual de lo que quieres conseguir, lo intentamos.

Saludos @JSDJSD  espero estes bien haciendo el ejemplo visual que me pidió me percate que tenia un error en el planteamiento el cual procedo a corregir en este post, tengo dos casos en los cuales necesito que los TextBox vacios y llenos se cuenten de diferentes formas:

Caso 1 (Imagen 01): Para los resultados de los TextBox 25, 27, 28 necesito que cuando los TextBox 16, 17, 18, 19, 20, 21, 22 estén llenos se cuenten como “1” (TextBox<>”” = 1) mientras que cuando los TextBox 16, 17, 18, 19, 20, 21, 22 estén vacíos se cuenten como “0” (TextBox =”” = 0) como si fuera la Función CONTAR de Excel finalmente los resultados deben mostrarse de manera automática y simultánea en los TexBox 25, 27, 28.

TextBox25 = (TextBox16 +TextBox17+TextBox18+TextBox19+TextBox20+TextBox21+TextBox22)

TextBox27 = (TextBox16 +TextBox17+TextBox18+TextBox19+TextBox20+TextBox21+TextBox22)

TextBox28 = TextBox27

Caso 2 (Imagen 02): Para el resultado del TextBox 30 necesito que cuando los TextBox 21, 22 estén llenos se cuenten como “0” (TextBox<>”” = 0) mientras cuando que los TextBox 21, 22 estén vacíos se cuenten como “1” (TextBox =”” = 1) como si fuera la Función CONTAR.BLANCO de Excel finalmente el resultado debe mostrarse de manera automática y simultánea en el TextBox30.

TextBox30 = (TextBox21+TextBox22)

Por último, el TextBox29 pasa a a asumir un valor fijo = 2 (TextBox29 = 2)

Entre tanto con esta fórmula:

SUMPRODUCT(('USUARIOS & PRIVILEGIOS'!$BS27:BS56>=EOMONTH(TODAY(),-1)+1)*('USUARIOS & PRIVILEGIOS'!$BS27:BS56<=EOMONTH(TODAY(),0)))

Necesito que se ejecute de manera automática en la macro que corresponda y que el valor resultante se refleje en el TextBox31

 

 

 

 

 

 

 

Imagen 02.jpg

 

HHE PRUEBA.xlsm

Imagen 01.jpg

Editado el por jues
publicado
hace 21 horas, jues dijo:

Entre tanto con esta fórmula:

SUMPRODUCT(('USUARIOS & PRIVILEGIOS'!$BS27:BS56>=EOMONTH(TODAY(),-1)+1)*('USUARIOS & PRIVILEGIOS'!$BS27:BS56<=EOMONTH(TODAY(),0)))

Necesito que se ejecute de manera automática en la macro que corresponda y que el valor resultante se refleje en el TextBox31

sube archivo con datos en dichas columnas para hacer pruebas

publicado
hace 7 horas, JSDJSD dijo:

Es esto lo que buscas ?

image.gif

Exacto eso es el resultado que busco.

hace 7 horas, JSDJSD dijo:

sube archivo con datos en dichas columnas para hacer pruebas

En la única pestaña del archivo (USUARIOS & PRIVILEGIOS) hay una pequeña tabla que es el rango de búsqueda 'USUARIOS & PRIVILEGIOS'!$BS27:BS56 como la que se muestra en la Imagen adjunta de todos modos adjunto el archivo nuevamente 

USUARIOS Y PRIVILEGIOS.jpg

HHE PRUEBA.xlsm

publicado

El propósito de tu formula que es saber los días feriados que se encuentran en la tabla correspondientes al mes actual?

 

publicado

En formulario: 

Private Sub TextBox16_Change(): ContarTextBoxes: End Sub
Private Sub TextBox17_Change(): ContarTextBoxes: End Sub
Private Sub TextBox18_Change(): ContarTextBoxes: End Sub
Private Sub TextBox19_Change(): ContarTextBoxes: End Sub
Private Sub TextBox20_Change(): ContarTextBoxes: End Sub
Private Sub TextBox21_Change(): ContarTextBoxes: End Sub
Private Sub TextBox22_Change(): ContarTextBoxes: End Sub

En módulo: 

Sub ContarTextBoxes()
    Dim Control As Control
    Dim contador As Integer
    Dim contador2 As Integer
    Dim i As Integer
    
    ' Inicializar contadores
    contador = 0
    contador2 = 0

    ' Recorrer los TextBox desde TextBox16 hasta TextBox22
    For i = 16 To 22
        Set Control = frmvtl.Controls("TextBox" & i)
        
        If Trim(Control.Value) <> "" Then
            ' Incrementar contador si hay datos
            contador = contador + 1
            Control.BackColor = RGB(0, 255, 0) ' Verde si hay datos
        Else
            Control.BackColor = RGB(255, 255, 255) ' Blanco si no hay datos
        End If
    Next i

    ' Evaluar TextBox21 y TextBox22 para contador2
    If Trim(frmvtl.Controls("TextBox21").Value) = "" Then
        contador2 = contador2 + 1 ' TextBox21 vacío
    End If
    
    If Trim(frmvtl.Controls("TextBox22").Value) = "" Then
        contador2 = contador2 + 1 ' TextBox22 vacío
    End If

    ' Mostrar resultados en los TextBox correspondientes
    frmvtl.Controls("TextBox25").Value = contador
    frmvtl.Controls("TextBox27").Value = contador
    frmvtl.Controls("TextBox28").Value = contador
    frmvtl.Controls("TextBox30").Value = contador2 ' Mostrar contador2
    
    ActualizarTextBox
End Sub
Private Sub ActualizarTextBox()
    Dim rangoFechas As Range
    Dim fechaInicio As Date
    Dim fechaFin As Date
    Dim resultado As Long
    Dim i As Long
    Dim fechaActual As Date
    Dim mesActual As Long
    
    ' Define la hoja de trabajo
    With Sheets("USUARIOS & PRIVILEGIOS")
        ' Define el rango de fechas
        Set rangoFechas = .Range("BS27:BS56")
    
        ' Calcula el primer y último día del mes actual
        fechaInicio = WorksheetFunction.EoMonth(Date, -1) + 1 ' Primer día del mes actual
        fechaFin = WorksheetFunction.EoMonth(Date, 0) ' Último día del mes actual
        
        ' Inicializa el resultado
        resultado = 0
    
        ' Obtiene el mes actual
        mesActual = Month(Date)
    
        ' Recorre las celdas para contar los días feriados del mes actual
        For i = 1 To rangoFechas.Rows.Count
            fechaActual = rangoFechas.Cells(i).Value
    
            ' Verifica si la fecha está dentro del mes actual
            If fechaActual >= fechaInicio And fechaActual <= fechaFin Then
                ' Cuenta el día si es un feriado (suponiendo que los feriados están en formato de fecha)
                resultado = resultado + 1
            End If
        Next i
    End With
    ' Asigna el resultado al TextBox31
    frmvtl.TextBox31.Value = resultado
End Sub

 

publicado
hace 13 horas, JSDJSD dijo:

El propósito de tu formula que es saber los días feriados que se encuentran en la tabla correspondientes al mes actual?

 

Saludos @JSDJSD espero estés bien excelente su solución funciona conforme a lo esperado salvo por un detalle con el que contestare su interrogante anterior respecto al mes.

 En la Hoja Excel donde ejecuto originalmente la formula:

SUMPRODUCT(('USUARIOS & PRIVILEGIOS'!$BS27:BS56>=EOMONTH(TODAY(),-1)+1)*( 'USUARIOS & PRIVILEGIOS'!$BS27:BS56<=EOMONTH(TODAY(),0)))

Es un Reporte Mensual y por lo tanto es indiferente el día o la semana donde este ubicado el feriado sin embargo con su pregunta me percate que en este caso como es un Reporte Semanal si influye el día y la semana donde se ubique el feriado ya que hay semanas que son mixtas es decir se comparten entre dos meses y/o años diferentes como es el caso de las semanas donde se encuentran los días feriados correspondientes al 01/05/2024, 28/05/2024 y 31/12/2024 siendo así la macro solo debería contar el día feriado contenido en rango 'USUARIOS & PRIVILEGIOS'!$BS27:BS56 y reflejar un resultado en el TextBox31 si y solo si este feriado se encuentra en la semana comprendida entre los TextBox4 y TextBox5.

Adjunto la versión funcional y casi definitiva de formulario.

HHE PRUEBA.xlsm

Conéctate para comentar

Podrás dejar un comentario después de conectarte



Conéctate ahora
×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.