2017-06-15 8 views
2

私は数時間のうちにGoogleの答えを探していたので、あなたには分かりそうな場合は本当に私には謝っています。VBAの結果を使って作業するExcelで検索する

私は1つのブックから別のセルの値を取得しようとしています。その結果、検索結果の行の一部のデータを選択し、元のブックの検索語の行にあるセルにコピーして貼り付けます。

Sub AutoCableSize() 
' 
' AutoCableSize Macro 
Dim Row As Integer 
Dim CableRef As String 
Dim Rng As Integer 

Rng = 0 
Row = 1 
CableRef = "" 
Windows("170615-Submains Cable Schedule.xlsx").Activate 

For Each Cell In Range("F3:F303"): 
On Error Resume Next 
    If CableRef = "Finish" Then 
    GoTo Finish: 
    End If 
    CableRef = Range("F" & Row).Value 
    Windows("170601-B2-3-HL_BAS_SCH_61_0001.xlsx").Activate 
    Columns("A:A").Select 
Selection.Find(What:=CableRef, LookIn:=xlValues _ 
     , LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ 
     MatchCase:=False, SearchFormat:=False).Select 
     Rng = ActiveCell.Row 
      If Rng = 1 Then 
       GoTo Continue 
      End If 
     Range("C" & Rng, "D" & Rng).Copy 
    Windows("170615-Submains Cable Schedule.xlsx").Activate 
    Range("J" & Row).Select 
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
     :=False, Transpose:=False 

Continue: 
    Row = Row + 1 
Next Cell 
Finish: 
End Sub 

私は、正確な結果を検索するための検索変数に何を置く必要があります。ここでは

は、私が書いたものです。私はxlWholeを使用しましたが、問題があります:

エントリが存在しない場合、次のエントリに正しくスキップします。 エントリが存在する場合、検索シリーズの最初の空白セルが選択され、検索結果として扱われます。なぜ私は分かりません!

答えて

1

は、代わりにこれを試してみてください:

Option Explicit 

Sub AutoCableSize() 
    Dim r As Range, findRng As Range 
    Dim ws1 As Worksheet, ws2 As Worksheet 

    Set ws1 = Workbooks("170615-Submains Cable Schedule").Worksheets("Sheet1") 
    Set ws2 = Workbooks("170601-B2-3-HL_BAS_SCH_61_0001").Worksheets("Sheet1") 

    For Each r In ws1.Range("F3:F303") 
     Set findRng = ws2.Columns("A:A").Find(What:=r.Value, LookIn:=xlFormulas _ 
      , LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ 
      MatchCase:=False, SearchFormat:=False) 

     If Not findRng Is Nothing Then 
      findRng.Copy 
      ws1.Range("J" & r.Row).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
      :=False, Transpose:=False 
     End If 
    Next r 
End Sub 

を私はあなたのコードたくさんを変更しました。注目すべきは、ActivateまたはSelectをどこにも使用していないことです。ワークブック/ワークシート/セルを直接アクティブにするのではなく、選択を使って直接参照する方がはるかに優れたスタイルです。エラーのないコードを書く場合は、まず学習する必要があります。ここ

より:How to avoid using Select in Excel VBA macros

+0

私は取得しています「オブジェクトはこのプロパティまたはメソッドをサポートしていません」。上記の私の編集したコードを使ってこの小さな問題を解決しました。しかしそれはまだ十分にうまく機能していません。以前は正確な検索結果が見つかりませんでした。 –

+0

ああ、はい - あなたもワークシート名を含める必要があります! – CallumDA

+0

@PhilipDay Updated - – CallumDA

関連する問題