Excel: как создать число в столбце по текстовому значению в другом столбце? - PullRequest
2 голосов
/ 19 января 2009

У меня есть текстовый столбец с повторяющимися значениями, например:

   |    A    | 
---|---------|
 1 | emails  |
 2 |  foo    |
 3 |  foo    |
 4 |  bar    |
 5 |  bar    |
 6 |  stuff  |
 7 |  stuff  |
 8 |  stuff  |

Я хотел бы иметь еще один столбец с числами, чтобы каждое число соответствовало значению в первом столбце, например:

   |    A    |    B    | 
---|---------|---------|
 1 | emails  | number  |
 2 |  foo    |    1    |
 3 |  foo    |    1    |
 4 |  bar    |    2    |
 5 |  bar    |    2    |
 6 |  stuff  |    3    |
 7 |  stuff  |    3    |
 8 |  stuff  |    3    |

Ответы [ 7 ]

2 голосов
/ 19 января 2009

Предполагая, что повторяющиеся значения всегда смежны (нет «foo, bar, foo»), вы можете использовать это:

  A B
1 X 0
2 a 1
3 a 1
4 b 2
5 b 2
6 c 3
7 d 4
8 d 4
9 d 4

B2 равно "= IF (A2 = A1, B1, B1 + 1)", затем заполнено до B9

2 голосов
/ 19 января 2009

Сначала поместите число 1 в ячейку B2, затем поместите следующую формулу в B3 и заполните:

=IF(A3=A2,B1,B1+1)

Предполагается, что строки в столбце "электронные письма" уже отсортированы (т. Е. Дубликаты все рядом друг с другом).

1 голос
/ 19 января 2009

В зависимости от того, что вы подразумеваете под значением -

Если вы имеете в виду «повторяющаяся группа», то такой макрос может сработать -

<code>
Sub Check()
    Dim start As Integer
    start = 1
    For Row = 2 To 12
        Cells.Item(Row, 2) = start
        If Cells.Item(Row, 1) <> Cells.Item(Row + 1, 1) Then
            start = start + 1
        End If
    Next
End Sub

Если вы имеете в виду «взять число в конце каждого значения в столбце А», то это может сработать -

<code>
Sub Check()
    Dim i As Integer
    Dim value As String
    Dim number As String
    Dim c As String
    For Row = 2 To 12
        number = ""
        value = Cells.Item(Row, 1)
        For i = 1 To Len(value)
            c = Mid(value, i, 1)
            If IsNumeric(c) Then
                number = number & c
            End If
        Next
        Cells.Item(Row, 2) = number
    Next
End Sub

Редактировать - Согласно комментарию ОП, я предполагаю, что они означают «повторяющаяся группа», но я оставлю здесь оба примера кода.

Редактировать - Скопируйте и вставьте код в Excel Visual Basic Editor и нажмите кнопку воспроизведения. Замените константы 2 и 12 значениями вашей начальной и конечной строк.

0 голосов
/ 12 февраля 2009

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

foo 1 бар 2 бар 2 фу 1 материал 3 материал 3

Если это так, то существует простое решение не VBA:

Поместите значение 1 в ячейку b2. Поместите формулу = IFERROR (VLOOKUP (A3, A $ 2: B2,2, FALSE), MAX (B $ 2: B2) +1) в ячейку b3. Скопируйте формулу из ячейки b3 в конец списка данных.

Для этого решения я предполагаю, что заголовки столбцов находятся в строке 1.

0 голосов
/ 19 января 2009

Если я правильно понимаю ваш вопрос, данные могут быть отсортированы и должны быть пронумерованы различными значениями в столбце A, поэтому «foo» равен 1, а «bar» равен 2 и т. Д. Для уникальных значений в столбце A.

Я бы использовал VBA и словарь для построения списка:

Public Sub UpdateMapValues()
    Dim MappedValues As New Scripting.Dictionary
    Dim oSheet As Worksheet
    Dim Name As String
    Dim Index As Long
    Dim Number As Long
    Dim LastNumber As Long
    Set oSheet = ActiveSheet
    LastNumber = 0
    For Index = 2 To oSheet.UsedRange.Rows.Count
        Name = oSheet.Cells(Index, 1).Text
        If Not MappedValues.Exists(Name) Then
            LastNumber = LastNumber + 1
            Number = LastNumber
            Call MappedValues.Add(Name, Number)
        Else
            Number = MappedValues(Name)
        End If
        oSheet.Cells(Index, 2).Value = CStr(Number)
    Next Index
End Sub

Это обновит число в столбце B. Вы также можете сделать такие вещи, как помещение ссылки на ячейку (например, «A2» или «A5») в столбец B, которую можно использовать для других функций Excel.

Чтобы использовать Scripting.Dictionary, просто добавьте ссылку в Инструменты \ Ссылки и выберите Microsoft Scripting Runtime.

0 голосов
/ 19 января 2009

Вы отредактировали свой вопрос, чтобы убрать цифры из текста в A, поэтому MID и RIGHT больше не работают, функция, которую вы, вероятно, собираетесь использовать нужно LOOKUP () . По сути, вам нужно настроить другую таблицу, содержащую только уникальные значения A и значения, на которые они должны отображаться.

0 голосов
/ 19 января 2009

Есть несколько способов сделать это, в зависимости от точного характера вашей таблицы данных.

Если повторяющиеся значения в вашем текстовом столбце ограничены, например, меньше 10, тогда вы можете просто жестко закодировать некоторые вложенные операторы if.

If(A1="mail1", 1, If(A1="mail2", 2, If(... etc.

Я не рекомендую это, поскольку это немного неуклюже, вы можете иметь только до 7 (?) Вложенных операторов IF и не очень многократно использоваться, если вы хотите использовать код в другом листе для других значений.

Если вы знаете, что основа текста всегда одинаковой длины, например в вашем примере «mail» всегда является префиксом и имеет длину 4 символа, тогда вы можете использовать следующую формулу:

RIGHT(A1,LEN(A2)-4) 'The "4" denotes the length of the string "mail"

Надеюсь, это поможет.

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