Excel - Makro do skupin podle hodnot sloupců a součtů

Software Microsoft Office se skládá z aplikace Microsoft Excel, která je tabulkovým procesorem, který obsahuje grafické tabulky, výpočty, programovací jazyk pro makro, nazývaný VBA (Visual Basics for Applications) a kontingenční tabulky. Kontingenční tabulka se používá pro výpis dat; rozeznává a sumarizuje tato data, aby získala konkrétní výsledky. Makro představuje seznam příkazů nebo akcí, které umožňují rychlejší nebo opakované úlohy v aplikaci Excel Office Software; toto může být spuštěno, kdykoliv potřebujete provést úkol. Převezme hodnoty, provede požadovanou operaci a odpovídajícím způsobem vrátí hodnotu. Pokud chcete zapsat makro do skupiny podle sloupce a hodnoty součtu, spusťte makro pomocí příslušných příkazů.

Problém

Potřebuji napsat makro pro následující příklad:

 Položka Množství Délka A 1 100 A 1 100 B 2 200 B 1 100 B 5 100 C 4 200 C 2 100 C 1 200 C 3 100 

V podstatě chci seskupit podle sloupce A (tj. Položky) a sloupce C (tj. Délky) a také chcete přidat součet každé změny délek pro položku. V tomto případě bude výsledek na novém listu následující:

 Položka Množství Délka A 2 100 B 2 200 B 6 100 C 5 200 C 5 100 

Doufám, že to dává smysl.

Může mi někdo pomoci napsat Excel makro pro to prosím?

Řešení

Zkuste to

Předpoklad:

  • 1. Když spustíte makro, list, ze kterého mají být data zkopírována, je aktivní list
  • 2. Prázdná buňka ve sloupci A označuje konec dat
  • 3. Chcete vložit do listu 3 (správné v makru, pokud tomu tak není)

 Sub konsolidovatData () Dim lRow As Long Dim ItemRow1, ItemRow2 Jako řetězec Dim lengthRow1, lengthRow2 As String Columns ("A: C") Vyberte Selection.Copy Sheets ("Sheet3") Vyberte rozsah ("A1"). .Paste Cells.Select Selection.Sort _ Key1: = Range ("A2"), Order1: = xlAscending, _ Key2: = Range ("C2"), Order2: = xlDescending, _ Header: = xlYes, OrderCustom: = 1, _ MatchCase: = False, Orientace: = xlTopToBottom, _ DataOption1: = xlSortNormal lRow = 2 Do Zatímco (Buňky (lRow, 1) "") ItemRow1 = Buňky (lRow, "A") ItemRow2 = Buňky (lRow + 1, "A") lengthRow1 = Buňky (lRow, "C") lengthRow2 = Buňky (lRow + 1, "C") If ((ItemRow1 = ItemRow2) A (lengthRow1 = lengthRow2)) Pak buňky (lRow, "B") = Buňky (lRow, "B") + Buňky (lRow + 1, "B") Řádky (lRow + 1) .Vymazat Else lRow = lRow + 1 End If Loop End Sub 

Poznámka

Díky rizvisa1 za tento tip na fóru.

Předchozí Článek Následující Článek

Nejlepší Tipy