2016-10-05 11 views
1

数値をテキスト値に置き換えるツールを作成するように要求されました。検索値はワークシート( "この質問の目的のために別のワークシート(この質問のために "replaceSheet")の数値を置き換えることを意図しています。したがって、0 = dog、1 = cat、2 = cow、3 =羊そして、私の元の列は次のようになります。ヘッダー名で列を検索し、列の値を配列項目に置き換えます。

NewCol 
Dog 
Cat 
Cow 
Sheep 
Cat 
Dog 

NewCol 
0 
1 
2 
3 
1 
0 

その後、検索範囲で実行した後に、のようになります。

ルックアップ値は常に対応する番号の順番になっているため、これを配列に渡すのは簡単です。しかし、1つの問題は、列ヘッダーが同じままであるが、別のワークシート内でその位置が変わる可能性があるためです。そのため、コード名をヘッダーとして最初に検索するようにしました( "NewCol"この質問の目的)、列参照を取得し、ループを適用してこれに値を変更します。しかし、私のコードでループに入るたびに、私はアプリケーション定義またはオブジェクト定義エラーを取得し、私はそれが間違っているのか分かりません。私は、 "lRow ="行にブレークポイントを置き、エラーが発生した後です。

Sub ChangeCol() 

Dim strArray As Variant 
Dim TotalRows As Long 
Dim replaceSheet As Worksheet 
Dim lookupSheet As Worksheet 
Dim I As Long 
Dim lRow As Long 
Dim aCell As Long 

    'Set worksheets 
    Set lookupSheet = ThisWorkbook.Sheets(1) 
    Set replaceSheet = ThisWorkbook.Sheets(2) 

    'Load lookupArray 
    TotalRows = lookupSheet.Rows(Rows.Count).End(xlUp).Row 
    strArray = lookupSheet.Range(Cells(2, 2), Cells(TotalRows, 2)).Value 
    MsgBox "Loaded " & UBound(strArray) & " items!" 

    'Find column to replace values 
    aCell = replaceSheet.Range("A1:DD1").Find(What:="NewCol", LookIn:=xlValues, LookAt:=xlWhole, _ 
    MatchCase:=False, SearchFormat:=False).Column 

    lRow = replaceSheet.Cells(Rows.Count, aCell).End(x1Up).Row 

    'Loop through lookup array and replace values 
    For I = 1 To UBound(strArray) 
     replaceSheet.Columns(aCell).replace What:=(I - 1), Replacement:=strArray(I, 1), LookAt:=xlWhole, MatchCase:=True 
    Next I 

End Sub 

私はそれと間違って何が起こっているかわからないんだか、この周りのより良い方法がある場合、私は間違って行くよどこに任意のヘルプははるかに高く評価されます。

+0

あなたはそこにタイプミスを持っていますl' – R3uK

+1

ああ、神様、私はそんなに馬鹿だと感じています、それを指摘してくれてありがとう、私は今、あなたは答えにあなたのコメントを得ることができますので、私はそれを受け入れることができます。私はExcelがこれらのことをより良く指摘したいと願っています! – Clusks

答えて

2

としては、あなたがそこにタイプミスがあり、コメントで指摘:lRow = replaceSheet.Cells(Rows.Count, aCell).End(x1Up).Rowそれはあなたがすでに持っているように範囲を使用すると、単純に値を置くために、アレイに置き換える使用しないようにするxLUp変更1

lにいくつかの変更ですそれらの良い順に:それは `` 1 ''に変更をxLUp`だ.Row` `lRow = replaceSheet.Cells(Rows.Count、aCell).END(x1Up):

Sub ChangeCol() 

Dim strArray As Variant 
Dim TotalRows As Long 
Dim replaceSheet As Worksheet 
Dim lookupSheet As Worksheet 
Dim I As Long 
Dim lRow As Long 
Dim ColToCopy As Long 
Dim MatchedHeader As Range 
Dim ZoneToFill As Range 

    'Set worksheets 
    Set lookupSheet = ThisWorkbook.Sheets(1) 
    Set replaceSheet = ThisWorkbook.Sheets(2) 

    'Load lookupArray 
    ColToCopy = 2 
    TotalRows = lookupSheet.Cells(lookupSheet.Rows.Count, ColToCopy).End(xlUp).Row 
    strArray = lookupSheet.Range(Cells(2, ColToCopy), Cells(TotalRows, ColToCopy)).Value 
    MsgBox "Loaded " & UBound(strArray) & " items!" 

    'Find column to replace values 
    Set MatchedHeader = replaceSheet.Range("A1:DD1").Find(What:="NewCol", LookIn:=xlValues, LookAt:=xlWhole, _ 
         MatchCase:=False, SearchFormat:=False) 

    lRow = replaceSheet.Cells(replaceSheet.Rows.Count, MatchedHeader.Column).End(xlUp).Row 

    'Resize the range to fit the array and send the values in 
    MatchedHeader.Offset(1, 0).Resize(UBound(strArray, 1), UBound(strArray, 2)).Value = strArray 

End Sub 
+1

これは何が間違っているのかという質問に答えましたが、replaceループは各ルックアップ項目を取得し、列内で検索し、その中の各項目を置き換えることを指摘します。順番に新しい列に追加します。 – Clusks

関連する問題