Excel: создать сортируемый составной ID - PullRequest
0 голосов
/ 25 мая 2011

Все, я задал вопрос «Excel VBA: сортировка, затем копирование и вставка» и получил два превосходных ответа. Однако из-за того, что я не смог обеспечить достаточные требования пользователей, они не будут работать: я попросил исправить существующее решение, которое я создал, вместо того, чтобы указать фактическую бизнес-потребность и посмотреть, есть ли у кого-то лучший способ.

(вздох) Вот так:

Мой начальник попросил меня создать ss для регистрации проблем. Он хочет составной идентификатор, который объединяет «Назначенную дату» с числом, указывающим, какое число имеет значение для только в этот день . В новый день счет должен быть перезапущен на 1. Например:

<b>Assigned     Issue   Concatenated</b>
  <b>Date    &  Count =      ID</b>

5/11/2011 &    1   =   5112011-1
5/11/2011 &    2   =   5112011-2
5/11/2011 &    3   =   5112011-3
5/<b>12</b>/2011 &    <b>1</b>   =   5<b>12</b>2011-<b>1</b>

Я решил эту проблему с помощью скрытого столбца C, который вычисляет = IF (D2 <> D1,1, C1 + 1), таким образом вычисляя количество проблем, увеличивая количество предыдущих выпусков, если назначенная дата в столбце D совпадает с предыдущая дата, и начинается с 1, когда дата меняется. Другой столбец объединяет назначенную дату и количество ошибок, и у меня есть идентификатор проблемы.

Быстрый, легкий, элегантный, готовый и готовый. Правильно? Но когда я поставил ss, он указал, что если вы (то есть он) сортируете какую-либо часть электронной таблицы, идентификатор проблемы выходит из последовательности. Конечно --- каждая формула не ссылается на предыдущую дату в последовательности, если строки отсортированы в порядке присвоения даты.

Моя немедленная мысль, которая подтолкнула мой предыдущий вопрос, состояла в том, чтобы сначала правильно отсортировать порядок Назначенной даты, затем скопировать и вставить значение рассчитанного количества проблем, чтобы зафиксировать его и, таким образом, сохранить объединенный идентификатор.

Единственный способ увидеть это (в VBA, natch) - это:

  1. оценить все даты в столбце Назначенная дата
  2. оценить все числа в столбце Количество выпусков
  3. рассчитать последний последовательный счетчик выпусков для нового элемента, назначенного на определенную назначенную дату
  4. Назначьте этот последовательный счетчик ошибок новому элементу
  5. Было бы неплохо , чтобы затем поместить курсор в следующую ячейку, в которую обычно будет переходить пользователь, которая будет справа от только что введенной Назначенной даты; однако, это не обязательно

Это позволило бы избежать необходимости пересортировать физические сс. Однако, кроме смутного предположения, что это будет связано с VLOOKUP, я ничего не получил. Я не смог ничего найти с помощью поиска.

Может кто-нибудь помочь? Или предложить место, куда пойти? Спасибо !!!

Ответы [ 3 ]

0 голосов
/ 26 мая 2011

Я думаю, что формула =IF(D2<>D1,1,C1+1) могла бы быть улучшена, так как это зависит от порядка дат.Далее будет сохранен счет для любого отсортированного заказа

Предположим,

     ColA           ColB                   ColC
Row1 Assigned_Date  Issue Count            Concatenate
Row2 05/11/2011     =COUNTIF($A$1:A2,A2)   =TEXT(A2,"ddmmyyyy")&"-"&B2
Row3 05/11/2011     =COUNTIF($A$1:A3,A3)   =TEXT(A3,"ddmmyyyy")&"-"&B3
Row4 05/12/2011     =COUNTIF($A$1:A4,A4)   =TEXT(A4,"ddmmyyyy")&"-"&B4
Row5 05/11/2011     =COUNTIF($A$1:A5,A5)   =TEXT(A5,"ddmmyyyy")&"-"&B5

По существу введите формулы B2 и C2 и перетащите вниз.Возможно, вам придется поменять местами ddmmyyyy на mmddyyyy, так как мы сначала используем даты, а не месяцы:)

Также обратите внимание на блокировку первой части диапазона только с использованием $ - $ A $ 1 Топор

Это отлично работает для вашего текущего вопроса, но не работает, если количество выпусков назначено в порядке времени на дату.

0 голосов
/ 26 мая 2011

Как насчет использования процедуры? Просто нажмите кнопку, чтобы добавить следующую запись.

Я предположил, что записи получат сегодняшнюю дату и что макет листа: Строки: 1 = заголовок / 2 = оставлено пустым / 3 = заголовки блока данных Столбцы: A = Дата / B = Количество выпусков / C = Объединенный идентификатор / D и т. Д. = Другие данные

Sub AddEntry()
Dim iDayRef As Long, iNumRows As Long, n As Long

With Range("A3")
    iNumRows = .CurrentRegion.Rows.Count
    For n = 2 To iNumRows
        If .Cells(n, 1).Value = Date Then
            If .Cells(n, 2).Value > iDayRef Then iDayRef = .Cells(n, 2).Value
        End If
    Next
    .Cells(iNumRows + 1, 1).Value = Date
    .Cells(iNumRows + 1, 2).Value = iDayRef + 1
    .Cells(iNumRows + 1, 3).Value = Format(Date, "mm/dd/yyyy") & " - " & iDayRef + 1
    .Cells(iNumRows + 1, 4).Select
End With
End Sub

А вам действительно нужны три столбца для Date, Count и Combined ID? Если вы пошли с

гггг / мм / дд - хх

Формат идентификатора, один столбец может заменить все три, и вы можете легко отсортировать по нему.

0 голосов
/ 26 мая 2011

Звучит так, будто вы просто хотите автоматизировать действие «Специальная вставка». Следующее заменяет формулы в a1: a100 их вычисленными значениями:

   Set src = ActiveSheet.Range("a1:a100")

    src.Copy
    src.Select

    Selection.PasteSpecial Paste:=xlPasteValues, _
        Operation:=xlNone, _
        SkipBlanks:=False, _
        Transpose:=False
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...