2016-11-28 21 views
-1

私はこのVBAコードを実際に理解していませんが、このステートメントで "find"の意味は何ですか?VBAコードの説明が必要

rngOutput = ActiveWorkbook.Sheets(p_objReportActual.Reportname) _ 
      .Range(Range("A2"), Range("A2").End(xlToRight)).Offset(-1, 0) _ 
      .Find(objEachAnalysis.Analysis, , , xlWhole).Offset(2, 0) 
+4

「Range」オブジェクトの[Findメソッド](https://msdn.microsoft.com/en-us/library/office/ff839746.aspx)のドキュメントをお読みください。 – YowE3K

答えて

0

コードの前にdebug.print objEachAnalysis.Analysisを書きます。

コードでは、rngOutputが見つかった値よりも2行低く設定され、コンソール(イミディエイトウィンドウ)に表示されます。

コードの後に​​同じイミディエイトウィンドウのアドレスを表示するdebug.print rngOutput.addressを書き込みます。

イミディエイトウィンドウを表示するには、ExcelのVisual Basic Editorに入ったらctrl+Gを押します。式は一見非常に複雑に見えるかもしれ

0

、あなたは物事をより簡単にするために、それを分割することができ、ここでコメントと例です。

' get target sheet name 
    sTargetSheet = p_objReportActual.Reportname 
    ' get the value which need to be found 
    vToFind = objEachAnalysis.Analysis 
    ' get the sheet object 
    Set oSheet = ActiveWorkbook.Sheets(sTargetSheet) 
    ' get actually all cells within row 2 as init range 
    Set oInitRange = oSheet.Range(Range("A2"), Range("A2").End(xlToRight)) 
    ' get the range to search in as init range shifted by 1 row up 
    Set oSearchRange = oInitRange.Offset(-1, 0) 
    ' get the first cell where the value found 
    Set oFoundCell = oSearchRange.Find(vToFind, , , xlWhole) 
    ' get result cell shifted by 2 row down 
    Set oResultCell = oFoundCell.Offset(2, 0) 
    ' show the cell on the sheet 
    oResultRange.Select 

今では.Find()範囲オブジェクトのちょうど方法であることは明らかですコメントで指摘されているように、この方法のMSDNでヘルプトピックを簡単に見つけることができます。

+0

これはどのようにしてユーザーが質問に答えるのに役立ちますか? –

0

rngOutputが

上方「p_objReportActual.Reportname」2行「objEachAnalysis.Analysis」の値は、ワークシート内の連続範囲の右側の最後のセルの範囲A2に見出される場合についてセルであり、1行

したがって、A2:Z2にデータがある場合、この関数はA2:Z1の範囲内でobjEachAnalysis.Analysisと完全に一致するかどうかを調べます。 C1で見つかったとすると、rngOutputは2つのセルになります。つまり、C3を返します