пытаясь сделать совпадение по референции, используя Excel - PullRequest
0 голосов
/ 09 марта 2012

У меня есть действительно плохо отформатированные данные, с которыми мне приходится работать каждую неделю.Вот пример:

Code:     To:     Total:       Description:      
-------------------------------------------------------------
FD987     00001   5            Food/Snack/M&M<br>
FD987     00001   5            Food/Snack/Pretzels<br>
NA654     00001   5            Non-Alc/Soda/Sprite<br>
NA654     00002   2            Non-Alc/Soda/Sprite<br>
NA987     00002   2            Non-Alc/Soda/Lemonde<br>

Я хочу, чтобы данные в конечном итоге сортировались по коду «Кому», а различные данные суммировались для промежуточных итогов в каждой категории и промежуточных итогов для всей записи «Кому».Вот так:

To:     Total:       Description:     
---------------------------------------------------
00001   10           Food Subtotal<br>
00001   5            Non-Alc Subtotal<br>
00001   15           Grand total<br>
00002   0            Food Subtotal<br>
00002   4            Non-Alc Subtotal<br>
00002   4            Grand total

Я написал код, который получает "00001" и "00002".Но я не знаю, что делать оттуда.Должен ли я пройти через использование комбинации если и для?

пример:

pseudo code:

for all i in UniqueToCodes
    if (cell.value = i) then
        Descriptions = {"Food", "Non-Alc"} 
        tempsum = 0
        for all j in Descriptions 
            q = total for item j belonging to Descriptions belonging to UniqueToCodes
            tempSum = tempSum + q
        next j
    end if
next i 

или цикличность в обратном направлении будет более эффективной?

например, как это:

pseudo-code:

for i = lastOccurenceOf(ToCode) to firstOccurenceOf(ToCode) -1
    Descriptions = {"Food", "Non-Alc"}
    for all j in Descriptions
        q = total for item j belonging to Descriptions belonging to UniqueToCodes
        tempSum = tempSum + q
    next j
next i

(я знаю, что коды «Кому» всегда отображаются в виде блоков и никогда не с междометиями других кодов, то есть всегда так:

00001
00001
00002

никогда так:

00001
00001
00003
00001
)

и как мне хранить все эти временные суммы?то есть tempSum для "Food" и tempSum для "Non-Alc" для "To" с кодом "00001"?Я знаю, что объекты словаря сопоставляют только одно свойство с ключом.Но мне нужно сопоставить промежуточный итог с описанием и итоговой суммой с кодом «Кому».Что бы вы сказали, это лучший подход к этой проблеме?Любая помощь будет принята с благодарностью!Спасибо!

1 Ответ

2 голосов
/ 10 марта 2012

Как говорили люди в комментариях, сводная таблица, вероятно, будет самым простым способом суммировать ваши данные. Однако для того, чтобы подвести итоги, как вы хотите, вам нужно разбить столбец Описание.

В Excel 2007 вы можете использовать Text to Columns следующим образом:

  1. Выберите столбец описания.
  2. Нажмите Data -> Text to Columns.
  3. На Convert Text to Columns Wizard убедитесь, что для параметра Тип данных оригинала установлено значение Delimited, и нажмите Next.
  4. Выберите Delimiters до Other с помощью / и затем нажмите Finish.
  5. Переименуйте новые столбцы как хотите.

Using Text to Columns Wizard Renamed Columns

Если текст в столбцы недоступен, просто создайте формулу, чтобы вытащить первый тип пищи из описания. Например, используя первое изображение выше, поместите эту формулу в ячейку E2. =LEFT(D2,FIND("/",D2)-1)

Теперь вы можете создать сводную таблицу.

  1. Убедитесь, что активная ячейка находится в таблице данных, и нажмите Insert -> PivotTable. Когда появится диалоговое окно Create PivotTable, нажмите OK.
  2. Перетащите To и Type в Row Lables область и Total в Values область.
  3. Готово. Вот ваш основной сводный стол. Вы можете изменить базовый формат через Параметры сводной таблицы и Параметры поля.

basic pivot table

...