2011-03-09 9 views
1

私は約3,000行のワークシートを持っています。例えば、これらの列の一つは、民族データが含まれていますが、それは数値形式であり、むしろテキスト形式より:ExcelのVBAを使用して列の値を別の値に置き換えますか?

  • 1 =アメリカン・インディアンまたはアラスカネイティブ
  • 2 =アジア、アジア系アメリカ人、または太平洋諸島
  • 3 =アフリカ系アメリカ人や黒人
  • 4 =メキシコまたはメキシコ系アメリカ人

私はこの中で値をスワップアウトするためのSelect Case(または...?)を使用してVBAでモジュールを書きたいのですが整数からテキストへの列。誰かがこれを達成する方法を私に見せてもらえますか?

+0

@ VLookUpに対するMikebのコメントは最良の賭けのように聞こえますが、それが合わない場合は、ADOをご覧になることをお勧めします。 – Fionnuala

答えて

4

HERESに迅速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

ありがとう。私はそれを試みた。これを新しいモジュールに追加したり、Sheet1またはThisWorkbookの下に移動する必要がありますか(VBAでは非常に新しいです)?選択した列に対してこのモジュールをどのくらい正確に実行させるのですか? – davemackey

+0

よく私はこれをモジュールに落として実行した後、シート内に希望する選択肢がある間にマクロ実行ダイアログを使用して実行しました。おそらく最も簡単な方法です。または、 'Set RangeCells = Sheet1.Range(" A1:A4 ")' 'Dim RangeCells as Range'の直後にRangeCells変数の範囲をハードコードすることができます。 – Maverik

+0

ありがとう! RanngeCell.Value = LookupArray(RangeCell.Value)のコードを実行すると、「タイプの不一致」というエラーが表示されます。 – davemackey

6

Excelで非VBA(私の考えではもっと単純です)アプローチは、そのデータを持つルックアップテーブルを作成することです - 最初の列の整数、2番目の列のテキスト、次に隣の列VLOOKUPを使用して対応するテキストを検索します。代替を使用して現在の選択値を置き換えます

+1

右そのためのVBAは不要 –

0

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は1つの単純な理由のためのより良いことに同意することはできません。私たちは、繰り返しのアクションを自動化するマクロを実行すると、私は、誰かが見ていると仮定マクロソリューションの場合は、そのような場合がほとんどです。

関連する問題