0

わかりました、質問はかなり曖昧に聞こえますが、説明しようとします。

特定のセル値をあるシートから別のシートにコピーしようとしています。コピー先は、同じシート内の別の値によって決まります。例えば:

シート1

4040-5056 ----- 4040-5056v1.7

3409-5793 ----- 3409-5793v4.3

シート 2

4040-5056

3409-5793

表示される最初の値に基づいて、シート 1 の 2 列目の値をシート 2 の対応するセルにコピーする必要があります。

これを行う方法がわかりません。助けていただければ幸いです。

前もって感謝します

編集:

Sheet1 には、他のシートの対応する nvalues にコピーする必要があるすべての値が含まれています。対応する必要がある値は 30 枚ほどのシートにまたがっていますが、すべて同じドキュメント内にあります。すべてのシートで、コードが検索する必要がある値はすべて同じ列にあるため、すべてのシートで値が列 A で同じかどうかを確認する必要があります。 36.000 行。コードが行うべきことは、列 A の値が他のシートの列 A の値と一致する場合、列 B の値を他のシートの 1 つにコピーすることです。

この説明を理解していただけると幸いです。

4

2 に答える 2

0

機能を使用できますVLOOKUP。これには VBA を使用する必要はありません。

シート 1 :

       A          B         C
1      4040-5056  4040-5056v1.7
2      3409-5793  3409-5793V4.3
3

シート 2:

       A          B         C
1      4040-5056  =VLOOKUP(A1;Sheet1!$A$1:$B$2;2;FALSE)
2      3409-5793  =VLOOKUP(A2;Sheet1!$A$1:$B$2;2;FALSE)
3

セル B1 には「4040-5056v1.7」が表示され、セル B2 には「3409-5793V4.3」が表示されます。

データがソートされていないため、VLOOKUP(here )への最後の引数が重要であることに注意してください。FALSE

于 2013-09-05T12:06:31.150 に答える
0

純粋な VBA を使用した別のソリューション:

パフォーマンスに対する強いニーズがあるため、この SO questionで示唆されているように、dict オブジェクトを使用することをお勧めします。ディクショナリを使用する利点は、一度作成すると非常に高速に検索できることです。したがって、私のコードはルックアップで非常に高速であると期待しています。一方、(ループを介して) 個々のセルにアクセスする場合は、組み込みのVLOOKUP.

30,000 エントリのリファレンス シートと、それぞれ 30,000 行の 3 つのルックアップ シートを使用した比較パフォーマンス:

  • VLOOKUP : 600 秒
  • VBA / 辞書 : 3 秒

したがって、このコンテキストで VBA 辞書を使用すると、パフォーマンスが 200 倍向上します。

:「Microsoft Scripting Runtime」への参照を追加する必要があります(VBAウィンドウのツール->参照メニューから)

: 参照シートのデータが連続していない場合、または重複がある場合、この解決策は機能しません。

Sub FillReferences()

  Dim dict As New Scripting.Dictionary
  Dim myRow As Range
  Dim mySheet As Worksheet

  Const RefSheetName As String = "sheet1"
  ' 1. Build a dictionnary
  Set mySheet = Worksheets(RefSheetName)
  For Each myRow In mySheet.Range(mySheet.Range("A1").End(xlDown), mySheet.Range("A" & mySheet.Rows.Count).End(xlUp))
    ' Append A : B to dictionnary
    dict.Add myRow.Value, myRow.Offset(0, 1).Value
  Next myRow

  ' 2. Use it over all sheets
  For Each mySheet In Worksheets
    If mySheet.Name <> RefSheetName Then
      ' Check all cells in col A
      For Each myRow In mySheet.Range(mySheet.Range("A1").End(xlDown), mySheet.Range("A" & mySheet.Rows.Count).End(xlUp))
        ' Value exists in ref sheet ?
        If dict.exists(myRow.Value) Then
          ' Put value in col B
          myRow.Offset(0, 1).Value = dict(myRow.Value)
         End If
      Next myRow
    End If
  Next mySheet

End Sub
于 2013-09-06T07:50:53.743 に答える