Columnas SumIF & Merge basadas en otros criterios de columna VBA

Por favor encuentre a continuación muestras, donde quiero hacer codificación para el resto de mi conjunto de datos,

ColumnA tiene nombre de varios estados, ColumnB tiene valores únicos, y columnC queremos un sumif de columnB " Merging cells resultados basados en el nombre de los estados (columnA).

Dim ColumnA as long
Dim ColumnC as long

ColumnsC = 0
ColumnA = Worksheets("Sheet1").Cells(2, 1).value

Lastrow = Worksheets("sheet1").cells(Rows.Count, 1).End(xlUp).Row

For i = 2 to lastrow 
    IF Worksheets("Sheet1").Cells(i, 1).value = ColumnA Then    
        ColumnC = ColumnC + Worksheets("Sheet1").cells(i, 3).value   
    End if
Next

worksheets("sheet1").cells(2, 3).value = ColumnC

Pregunta hecha hace 3 años, 4 meses, 28 días - Por techwizkid


3 Respuestas:

  • Una tabla de pivotes hace esto sin la necesidad de fórmulas y células fusionadas (que yo abono que nunca hace en sus conjuntos de datos fuente).


    Pivot Table

    1. Agregar campos State & City a Rows
    2. Agregar valor de campo a Values
    3. Pivot Table Report Layout = Tabular
    4. Subtotal

    enter image description here

    Fuente de datos brutos sobre la salida de tabla izquierda y pivote a la derecha

    Respondida el Dec 18, 2020 a las 14:23 - por quantumcoderd26d

    Votos positivos: 0 | Votos negativos: 0

  • Parece que tienes un pequeño error en tu código. En lugar de usar ColumnA y ColumnC como variables de tipo Long, deberías usarlas como variables de tipo String, ya que contienen valores de texto (nombre de estados). Además, tu código actual solo está sumando los valores de la columna C para un estado específico en la celda A2, en lugar de hacerlo para cada estado y combinar los resultados en una sola celda.

    Aquí te dejo un código modificado que realiza correctamente la suma de valores en la columna C para cada estado en la columna A y combina los resultados en una sola celda:

    vba
    Dim statesDict As Object
    Dim cell As Range
    Dim state As String
    
    Set statesDict = CreateObject("Scripting.Dictionary")
    
    For Each cell In Worksheets("Sheet1").Range("A2:A" & Cells(Rows.Count, 1).End(xlUp).Row)
        state = cell.Value
    
        If Not statesDict.exists(state) Then
            statesDict.Add state, cell.Offset(0, 2).Value
        Else
            statesDict(state) = statesDict(state) + cell.Offset(0, 2).Value
        End If
    Next cell
    
    Worksheets("Sheet1").Range("C2").Value = Join(statesDict.Items, ", ")
    

    Este código crea un diccionario para almacenar la suma de los valores de la columna C para cada estado. Luego, recorre cada celda de la columna A, suma los valores correspondientes en la columna C y los almacena en el diccionario. Finalmente, combina los valores del diccionario separados por comas y los coloca en la celda C2.

    Espero que esta solución te sea de ayuda. Si tienes alguna otra pregunta, ¡no dudes en decírmelo!

    Respondida el Dec 19, 2020 a las 14:22 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • Aquí tienes el código VBA corregido para realizar la suma condicional y combinar celdas según los criterios de otra columna:

    vba
    Dim ColumnA As Long
    Dim ColumnC As Long
    
    ColumnA = Worksheets("Sheet1").Cells(2, 1).Value
    
    LastRow = Worksheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row
    
    For i = 2 To LastRow
        If Worksheets("Sheet1").Cells(i, 1).Value = ColumnA Then
            ColumnC = ColumnC + Worksheets("Sheet1").Cells(i, 3).Value
        End If
    Next
    
    Worksheets("Sheet1").Cells(2, 3).Value = ColumnC
    
    ' Combinar celdas
    Range(Worksheets("Sheet1").Cells(2, 3), Worksheets("Sheet1").Cells(LastRow, 3)).Merge
    

    Explicación:

    La variable ColumnA almacena el valor de la primera celda de la columna A. La variable LastRow almacena el número de la última fila con datos en la columna A. El bucle itera sobre todas las filas de la columna A y suma los valores de la columna C solo para las filas que coinciden con ColumnA. El resultado de la suma se almacena en la celda C2. Finalmente, se combinan todas las celdas de la columna C para crear una sola celda que contenga el total.

    Nota:

    He corregido el error de ortografía en la variable ColumnC. He cambiado SumIf por la suma manual para mejorar la eficiencia. He agregado el paso para combinar celdas en la columna C.

    Respondida el Dec 19, 2020 a las 14:32 - por Gemini

    Votos positivos: 0 | Votos negativos: 0