2017-09-13 8 views
0

私はブックを手動で入力するか、リストから1つを選択し、アカウントコードをC列(C7:C446)に配置します。 「JE」と呼ばれるシート。アカウントコードは次のようになります。####### - ### - ## - ######。シート「JE」の列D(D7:D446)には、勘定コードの最後の6桁を取得する式があります。 "required_refs"というシートには、A列に6桁のコードのリストがあります。 "JE"シートのD列の値が "required_refs"シートのA列の値と等しい場合は、 D列のセル​​の値を「参照」と呼ばれる別のシートのセルD1に上書きすることができます(ご迷惑をおかけしている可能性があります)。赤い色のF25セルをダブルクリックし、D25(シート "JE")の値を入れ、それをシート "参照"のセルD1に入れます。Excel VBA別のシートに値をリストアップして上書きするセルの値を比較する

私が知っている最高の方法で亀裂を起こしました。私はシートJEにこのコードを配置した。これを完了する方法上の任意の提案を事前に

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) 

    Dim project As Range: Set project = Range("D7:D446") 
    Dim param As Range: Set param = Worksheets("references").Range("D1").Value 


    For Each cell In project 
     If project.Value = Worksheets("required_refs").Range("A:A").Value Then 
     Call gotoRef_ 'macro that simply selects/navigates to the required_ref sheet 
     project.Value = param 
     End If 

End Sub 

本当にありがとうございました。私はこれをさらに必要に応じて詳述することができます。

+0

私は答えとして別の方法を提案しましたが、VBAを使用する必要がある場合は、正確に問題がありますか?これを実行するとどうなりますか? –

答えて

1

VLOOKUP hereため

説明これは、あなたがやりたいだろう最初の行の範囲。そうしないと、正しく動作しないか、スプレッドシートの処理が遅くなる可能性があります。

は、あなたのJEシートの列D値とrequired_refsシート列がA値がすべてテキストまたは数値のいずれかであることを確認してください。そうしないと、値が正しく比較されません。

WorksheetFunction.Match()の代わりにApplication.Match()を使用して、ワークシート機能にアクセスすることに注意してください。これは、Variant型の変数の使用と相まって、一致が失敗した場合に発生するエラーをトラップできます。

0

これはいつでもシート上で行うことができます。 MATCH関数を考えてみましょう。 MATCHの使用方法については、hereを参照してください。

別の列の値に関連付けられているテーブルで何かを検索している場合は、別の優れたツールです(私の考えではありません) - VLOOKUPの式。 。あなたはVLOOKUPで数字を配置するシートのDセルにこの数式を置き、次の形式になります。

=vlookup(lookup value,table_array,column index number, [range lookup]) 
  1. ルックアップ値は、あなたが探している6桁のコード(オンになっています
  2. table_arrayは、検索する値を選択するだけです(required_refsシート)
  3. テーブルには1列しかないため、列インデックス番号は1になります。これは基本的にあなたが探している価値の列番号です。
  4. 範囲の検索は、一致する場所が複数ある可能性がある場合に使用します。あなたのケースでは

は、私はそれが次のようになりますと思う:

=vlookup('JE'!D1,'required_refs'!A1:A,1,FALSE) 

それからちょうどあなたが維持し、クリックして下にドラッグする値をロックします。

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) 

    If Intersect(Target, Range("F7:F446")) Is Nothing Then Exit Sub 

    Dim varReference As Variant 

    varReference = Columns("D").Cells(Target.Row).Value2 
    If Not IsError(Application.Match(varReference, Worksheets("required_refs").Columns("A"), 0)) Then 
    Worksheets("references").Range("D1").Value = varReference 
    End If 

End Sub 

重要ポイント:

イベントハンドラで作業するたびに、常に制限対象の範囲を

関連する問題