вернуть отдельные значения для нескольких записей - PullRequest
0 голосов
/ 15 декабря 2011

Есть ли способ объединить несколько записей, а затем отобразить только самое высокое значение для каждого столбца?Пример: A2: A25 = имена, B2 = класс1, C2 = класс2 ... и т. Д.Сначала я удалил дубликаты на случай, если есть точные дубликаты.Затем я сортирую по имени.Можно ли что-то добавить в этот код, основываясь на именах столбцов A, чтобы отображать каждое имя с наибольшим значением из каждого столбца?= ЕСЛИ (В2 = "", "Пустой", ЕСЛИ (В2 = "высокий", "Высокий", ЕСЛИ (В2 = "Med", "Med", ЕСЛИ (В2 = "низкий", "низкий", ""))))

Пример данных

A1:name B1:Grade1 C1:Grade2...etc
A2:Joe B2:High C3:Low
A3:Joe B3:Med C3:High
A4:Dan B4:Low C4:Med
A5:Dan B5:Low C5:Low

_ _Результаты: Джо класс1 = высокий класс2 = высокий, Дан: класс1 = низкий класс2= Med

Ответы [ 2 ]

0 голосов
/ 16 декабря 2011

Решил попробовать VBA код для этого.Это немного глупо, но выполняет свою работу.

Взял ярлык и сделал номера столбцов b и c, а не строки.Вы можете сделать функцию поиска в электронной таблице, чтобы выполнить это преобразование, или добавить дополнительную проверку в коде.

Sub find_high_values()
' subroutine to find max values of columns b and c against names
' assumes for simplicity that there are no more than 10 rows
' assumes values being checked to be numbers, if they are strings, additional loops would need to be done
Dim sName(10) As String, lBval(10) As Long, lCval(10) As Long 'arrays for original list
Dim iCountN As Integer, iUnique As Integer, iUniqueCount As Integer 'counters
Dim bUnique As Boolean
Dim rStart As Range, rOutput As Range 'ranges on worksheet
Dim lBmax(10) As Long, lCmax(10) As Long, sUniqueName(10) As String 'output arrays

Set rStart = ActiveSheet.Range("d6") 'Cell immediately above the first name in list
Set rOutput = ActiveSheet.Range("j6") 'cell reference for max value list
iUniqueCount = 1
For iCountN = 1 To 10 'set max counters to a min value
    lBmax(iCountN) = 0
    lCmax(iCountN) = 0
Next

For iCountN = 1 To 10 'step through each original row
    sName(iCountN) = rStart.Offset(iCountN, 0).Value
    lBval(iCountN) = rStart.Offset(iCountN, 1).Value
    lCval(iCountN) = rStart.Offset(iCountN, 2).Value
    bUnique = True 'Starter value, assume the name to be unique, changes to false if already in list
    For iUnique = 1 To iCountN 'loop to check if it is a new name
        If sUniqueName(iUnique) = sName(iCountN) Then bUnique = False
    Next
    If bUnique Then 'if new name, add to list of names
        sUniqueName(iUniqueCount) = sName(iCountN)
        iUniqueCount = iUniqueCount + 1
    End If
Next
iUniqueCount = iUniqueCount - 1 'make the count back to total number of names found
For iUnique = 1 To iUniqueCount 'loop through names
    For iCountN = 1 To 10 'loop through all values
        If sName(iCountN) = sUniqueName(iUnique) Then
            If lBval(iCountN) > lBmax(iUnique) Then lBmax(iUnique) = lBval(iCountN)
            If lCval(iCountN) > lCmax(iUnique) Then lCmax(iUnique) = lCval(iCountN)
        End If
    Next
Next

'output section
rStart.Resize(1, 3).Select
Selection.Copy
rOutput.PasteSpecial xlPasteValues

For iUnique = 1 To iUniqueCount
    rOutput.Offset(iUnique, 0).Value = sUniqueName(iUnique)
    rOutput.Offset(iUnique, 1).Value = lBmax(iUnique)
    rOutput.Offset(iUnique, 2).Value = lCmax(iUnique)
 Next

End Sub 
0 голосов
/ 15 декабря 2011

Запись макроса Excel. Выберите первый столбец. Нажмите расширенный фильтр. Выберите копию в местоположение и выберите новый столбец, скажем X. Включите уникальный фильтр. Теперь нажмите Ok. Теперь посмотрите на исходный код vba, чтобы получить код для получения уникальных элементов в столбце. Теперь назначьте Low как 0, Med как 1, High как 2. переберите строки и найдите максимальную оценку 1, максимальную оценку 2 и т. д., соответствующие каждому элементу в столбце X, и заполните столбцы Y, Z и т. д. Как и когда вы найдете новый максимум, замените существующий. Теперь у вас будут необходимые данные в столбцах X, Y, Z. Просмотрите их снова и отобразите в нужном формате.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...