Excel VBA, чтобы заменить значения столбца с другим значением? - PullRequest
2 голосов
/ 09 марта 2011

У меня есть лист с примерно 3000 строк. Один из этих столбцов содержит данные об этнической принадлежности, но в числовом, а не в текстовом формате, например ::100100.

  • 1 = индейцы или аляскинцы
  • 2 = азиат, американец азиатского происхождения или жители островов Тихого океана
  • 3 = афроамериканец или черный
  • 4 = мексиканец или мексиканец

Я хотел бы написать модуль в VBA, который использует Select Case (или ...?), Чтобы поменять значения в этом столбце с целого на текст. Может кто-нибудь показать мне, как это сделать?

Ответы [ 3 ]

6 голосов
/ 09 марта 2011

Не VBA (на мой взгляд, более простой) подход в Excel заключается в создании таблицы подстановки с этими данными - целым числом в первом столбце и текстом во втором, а затем в столбце рядом с вашими данными., используйте VLOOKUP, чтобы найти соответствующий текст.

5 голосов
/ 09 марта 2011

Вот быстрый VBA-мэшап, который заменит значения текущего выделения на подстановки:

Option Explicit
Option Base 1

Public Sub ReplaceData()

    Dim RangeCells As Range

    Dim LookupArray(4) As String, RangeCell As Range

    LookupArray(1) = "Test A"
    LookupArray(2) = "Test B"
    LookupArray(3) = "Test C"
    LookupArray(4) = "Test D"

    For Each RangeCell In Selection

        If IsNumeric(RangeCell.Value) And RangeCell.Value <= UBound(LookupArray) And RangeCell.Value >= LBound(LookupArray) Then
            RangeCell.Value = LookupArray(Val(RangeCell.Value))
        End If

    Next RangeCell

End Sub

Допущения: все возможные значения ячеек включены в индекс массива.В противном случае выберите регистр, вероятно, вы хотите переключиться.Дайте мне знать, если вы не можете понять, как переключиться на это.

Надеюсь, это решит вашу проблему.

0 голосов
/ 05 сентября 2013

Чтобы сделать что-то вроде VLOOKUP, но с заменой вы можете попробовать следующее

Option Explicit
Sub ReplaceData()

Dim i As Integer
Dim ABCArray() As Variant, DEFArray As Variant

    ABCArray = Array("A", "b", "C")
    DEFArray = Array("D", "E", "F")

    With ActiveSheet.Range("A:A")

        For i = LBound(ABCArray) To UBound(ABCArray)

            .Replace What:=ABCArray(i), _
            Replacement:=DEFArray(i), _
            LookAt:=xlWhole, _
            SearchOrder:=xlByColumns, _
            MatchCase:=False

        Next i

    End With
End Sub

Я не могу согласиться с тем, что VLOOKUP лучше по одной простой причине: мы делаем макросы для автоматизации повторяющихся действий, и я предполагаю, что кто-тов большинстве случаев ищет решение для макроса.

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