2011-09-14 4 views
1

2つの異なるシートに500以上の名前が含まれています。私はあるシート上の名前が他のシート上に存在するかどうかを調べる必要があります。指定された列にyesまたはnoと答えた場合VBAを使用して2つの異なるシートにセルの値が存在するかどうかを確認します

この名前は、1枚のシートにASmithのようになり、別のシートにASMITHのようになり、大文字と小文字の区別が不要になります。

私はVBAの部分で混乱しています。私はjavaでプログラムし、javaでこの種のことをするのは簡単です。しかし、それほど優秀ではない。あなたの助けに感謝します。 TIA

+0

一方のリストと他方のリストのどちらか一方、または両方を比較する必要はありますか? –

+0

VLookUp http://office.microsoft.com/en-us/excel-help/vlookup-HP005209335.aspxとお考えですか? – Fionnuala

+0

には、シートとシートの指定された列について述べる必要がありますか?なぜあなたは仮定をするのではなく、私たちがあなたを助けることよりも簡単な方法を説明しないでください – niko

答えて

1

まず、Visual Basicでは大文字と小文字の区別が重要なので、2枚のシートを比較するときは、VBA.UCaseを使用してすべてを大文字に変換する必要があります。また、単語自体の周囲にスペースがある可能性があるため、トリム関数も含まれています。 2つの比較可能な文字列を作成するために必要なそれ以上のテキスト操作は、調査する必要があります。このexpert guidanceをExcelマクロでテキスト文字列を操作することをお勧めします

したがって、両方のシートが同じブック内にあると仮定すると、Visual Basic Editor内から2つのシートのコードネームを取得するのが最善の出発点ですデフォルトでは、Sheet1/Sheet2など)。以下では、Sheet1がOutputシートであり、Sheet2が検索しているデータであると仮定しています。あなたは罰金のコード名は、あなたは以下のコードでシート(「SheetName1」)とシート(「SheetName2」)を置き換えることができますすることができない場合は、次の

Dim SourceRow as Long 
Dim DestRow as Long 

For DestRow = 1 to 10 
     For SourceRow = 1 to 10 

      If VBA.Trim(VBA.UCase(Sheet1.Cells(DestRow,"DestCol"))) = VBA.Trim(VBA.UCase(Sheet2.Cells(SourceRow,"SourceCol"))) then 
      Sheet1.Cells(DestRow,"OutputCol") = "Yes" 
        Goto NextDestRow 
      End If 
     Next SourceRow 

Sheet1.Cells(DestRow,"OutputCol") = "No" 

NextDestRow: 
Next DestRow 

コードを使用すると、単一の列にデータを探していることを前提としてい"DestCol"と "SourceCol"と書いたところでは、その列の数値を挿入するだけです(A = 1、B = 2など)。 "OutputCol"は、出力先シートに出力を配置する列です。

このループは、各シートの1行目から10行目に興味があるとします。必要に応じて

+0

ありがとう!これは、500のエントリを少し控え目に比較して私の愚かな仕事を作った! :) – Eric

+0

これで問題が完全に解決すれば、それを完全な解決策としてマークできれば良いでしょう。 Cheers –

+1

Edのアプローチを使用したいくつかの提案された改造は、(i)Findループを実行するか、Rangeループではなくvariant配列を使用することで、ランタイム – brettdj

1

を調整し、このような何か試してみてください:

Sub HTH() 

    With Sheet1.Range("B1", Sheet1.Cells(Rows.Count, "B").End(xlUp)) 
     .FormulaR1C1 = "=IF(ISERROR(VLOOKUP(RC[-1],Sheet2!C[-1],1,FALSE)),""NO"",""YES"")" 
     .Value = .Value 
    End With 

End Sub 

NOTES

ルックアップ値は、シート1の列A、ルックアップ列であると想定しSheet2の列Aは、シート1列にはい/いいえ配置しています値が見つかったかどうかを示すB。 Vlookupは大文字と小文字を区別しません。ブックに合わせてR1C1の参照/列を変更する必要があります。

非常に高速です。

関連する問題