sumar rangos por iguales hacia esquematizar esquemas desagrupar datos crear como arriba agrupar excel excel-vba excel-formula

rangos - ¿Cómo agrupar los elementos de Excel según las reglas personalizadas?



esquematizar en excel (3)

Esta pequeña macro asume que sus datos están en la Hoja1 y sus reglas están en las reglas de la hoja de trabajo en las columnas A y B:

Sub catagorize() Dim s1 As Worksheet, s2 As Worksheet Dim N1 As Long, N2 As Long Set s1 = Sheets("Sheet1") Set s2 = Sheets("rules") N1 = s1.Cells(Rows.Count, "A").End(xlUp).Row N2 = s2.Cells(Rows.Count, "A").End(xlUp).Row For i = 2 To N1 v = s1.Cells(i, 1).Value For j = 1 To N2 If InStr(1, v, s2.Cells(j, 1).Value) > 0 Then s1.Cells(i, "D").Value = s2.Cells(j, "B").Value End If Next j Next i End Sub

Tengo un conjunto de datos (consultas de búsqueda de herramientas del webmaster) que está en Excel con el siguiente encabezado:

Query | Impressions | Clicks | Date

Muestra la hoja de cálculo de google aquí .

Deseo agregar una columna adicional llamada Category y categorizar todas las consultas según las reglas personalizadas que buscarán una cadena en la columna A. Ejemplo:

if A2 contains the string ''laptop'' then write ''laptop'' on the category next to it

Hasta ahora he intentado con una fórmula para hacer esto, pero no estoy seguro de que sea la manera más fácil. Además, si hay muchas reglas de categorización, la fórmula es muy larga e inmanejable.

=IF(ISNUMBER(SEARCH("laptop",A2)),"laptop", IF(ISNUMBER(SEARCH("notebook",A2)),"laptop", IF(ISNUMBER(SEARCH("iphone",A2)),"phone", IF(ISNUMBER(SEARCH("galaxy s",A2)),"phone", "other")))

¿Puede sugerir una forma mejor de hacer esto donde puedo tener las reglas en una hoja en este formato?

Query_contains | Category_is

donde Query_contains sería la cadena que debe coincidir en la columna A de la hoja inicial, y Category sería el valor que debe rellenarse en la columna D.


Ok, cambié tu hoja un poco ...

Suponiendo que todos sus datos estuvieran en las celdas A1: C9, entonces tenía la siguiente tabla en las celdas F1: G5

Search_For: Category: laptop Laptop iphone Phone galaxy Phone notebook Laptop

Ahora, en la celda D2, ingrese la siguiente fórmula:

=IFERROR(INDEX(G$2:G$5,MATCH(TRUE,ISNUMBER(SEARCH(F$2:F$5,A2)),0)),"other")

E introdúzcalo como una fórmula de matriz. Significado, una vez que lo ingrese, presione CTRL + MAYÚS + INTRO .

A continuación, puede arrastrar la fórmula desde la celda D2 hacia abajo y le dará los resultados deseados (y puede, por supuesto, aumentar la lista en las columnas F y G según sea necesario).

Espero que este haga el truco !!


Y para una tercera opción, puede usar una fórmula personalizada.

Creé una tabla solo para categorías en una hoja separada, luego inserté el siguiente código en un módulo estándar.

Option Explicit Function CategoryLookup(s_Query As String, Keyword_tbl As Range) Dim rngKeywords As Range Dim s_foundCategory As String Dim b_CategoryExists As Boolean b_CategoryExists = False For Each rngKeywords In Keyword_tbl If InStr(s_Query, rngKeywords.Value) <> 0 Then s_foundCategory = rngKeywords.Offset(0, 1).Value b_CategoryExists = True Exit For End If Next rngKeywords If b_CategoryExists = True Then CategoryLookup = s_foundCategory Else CategoryLookup = "Other" End If End Function

Luego, en D2 (columna de categoría), inserte la siguiente fórmula (que luego puede arrastrarse hacia abajo)

=CategoryLookup(A2,categories!$A$2:$A$5)