2016-11-29 3 views
-2

誰かが助けてくれることを願っています。動的変数を設定して、正しい変数に対して計算を行うループ関数を設定する必要があります。私が検索したい上記の例のためのコスト範囲ベースのコンテンツの位置を設定する

ボブ

テッド

フレッド

- ラウンドカウント -

は、たとえば、私は、ヘッダーのリスト

オペレータ名を持っています(xlToRight)& End(xlDown)、次に現在のコードlすべてのオペレータ名(Bob、Ted & Fred)を通して計算された値に、Round CountとCostbaseの値を入力します。

問題は、最初のセルが常に同じ場所にあるとは限りません。 1枚のシートの演算子名は、セルF100と次のF134にある可能性があります。私はFindを実行し、開始セルとしてオペレータ名がシート全体に何度も現れることを考えていました。

誰もが解決した同様の問題を抱えているか、誰かが何か提案できますか?

+1

オペレータ名がどのように何回も表示されません?正しいものがどのように分かっていますか? – bobajob

+0

4回、私はそれの隣の他のヘッダーの基盤だけを知っています.1つはコストの要約です.1つは生産性の要約であり、もう1つはデータを保持しています。 –

答えて

0

をループ次の意志のループを通過することができます右側の2つのセル:

Sub test3() 
    Dim found As Boolean 
    found = False 
    Dim testRange As Range 
    Set testRange = ActiveSheet.Range("A1") 
    Do While Not found 
     Set testRange = ActiveSheet.UsedRange.Find(What:="Operator Name", After:=testRange, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlRows, SearchDirection:=xlNext) 
     If testRange.Offset(0, 2).Value = "Cost" Then 
      found = True 
     End If 
    Loop 
End Sub 
+0

この式は演算子名を見つけるために働いていますが、ダイナミックレンジの設定を続行するセルアドレスを与えていません。どんな助け? –

+1

あなたが質問したところでは、 'Range(testRange、testRange.End(xlToRight).End(xlDown))。 – bobajob

+0

今、完璧に働いています、ありがとう。 –

-1

findを使用すると、トップダウンまたはボトムアップで検索できます。

このコードは、「オペレータ名」の列Fを一番上から検索し、下に移動します。

Columns("F").Find(what:="Operator Name", LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlRows, SearchDirection:=xlNext).Address 

このコードは、「オペレータ名」の列Fを検索して上に移動します。

Columns("F").Find(what:="Operator Name", LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlRows, SearchDirection:=xlPrevious).Address 

それらの両方がアドレス($ F $ 1)を返し、あなたが代わりにすることを望む場合.Rowに(1).Addressを変更することで、行を返すためにそれを変更することができます。

+0

これはうまくいくかもしれませんが、感謝します。 –

+0

必要に応じて、特定のセルの後に開始するように変更する方法もあります。何も表示されていない場合、エラー処理が必要な場合があります。 – tjb1

-1

あなたはそれが「持つものを見つけるまで、「オペレータ名」のすべてのインスタンスを見つけ、あなたの行の各値に応じて、IFを実行し、例えば

For i = 1 to Sheets(1).Range("A" & Rows.Count).End(xlUp).Row 
    If Cells(i, 1).Value = "Bob" Then 
     'do something with bob 
    Else If Cells(i, 1).Value = "Ted" Then 
     'do something with ted 
    Else If Cells(i, 1).Value = "Fred" Then 
     'do something with fred 
    Else 
     MsgBox "My example on Stackoverflow had incorrect names" 
    End If 
Next i 
+0

サマリーの上のデータにオペレータ名としての機能が数回(約10〜15回)表示される場合、サマリはカウントを行います。私は中心の場所でそれをやりたいだけです。 –

+0

オペレータ名が見つかった各行に特定の計算を入れたかったので、私はその質問を理解しました。 –

-1

この機能を試してください。それはすべてのシートをチェックインし、テキストは列Fまたは他の列に入れることができます。

Public Function subFindText(FindString As String, inSheet As String) As Range 

    Dim rowNb As Integer, ws As Worksheet 

    Set ws = ThisWorkbook.Worksheets(inSheet) 
    rowNb = ws.UsedRange.Rows.Count 

    If Trim(FindString) <> "" Then 
     With Sheets(inSheet).Cells  ''Check in all the sheet 
      Set subFindText = .Find(What:=FindString, _ 
          After:=.Cells(rowNb), _ 
          LookIn:=xlValues, _ 
          LookAt:=xlWhole, _ 
          SearchOrder:=xlByRows, _ 
          SearchDirection:=xlNext, _ 
          MatchCase:=False) 
     End With 
    End If 

End Function 

あなたは、テスト場合:

Sub test() 
    Dim r As Range 
    Set r = subFindText("Operator Name ", "yourSheetName") 
    MsgBox r.Row & " " & r.Column 

End Sub 
-1

ですから、4つの「演算子名」を持って、その後、FindNextメソッドを使用して配列にそれらを得る:

Sub test() 
    Dim r As Range 
    Dim FindRange As Range 
    Dim FirstFound As String 
    Dim ws As Worksheet 
    Dim arrRng(4, 2) As Integer, i As Integer 

    Set ws = ThisWorkbook.Worksheets("yourWorkSheet") 

    Set FindRange = ws.Cells.Find(What:="Operator Name", _ 
      After:=ws.Cells(1, 1), _ 
      LookIn:=xlValues, _ 
      LookAt:=xlPart, _ 
      SearchOrder:=xlByRows, _ 
      SearchDirection:=xlNext, _ 
      MatchCase:=False, _ 
      SearchFormat:=False) 
     If Not FindRange Is Nothing Then 
      FirstFound = FindRange.Address 
      i = 1 
      Do 
       arrRng(i, 1) = FindRange.Row 
       arrRng(i, 2) = FindRange.Column 
       ' find next instance 
       Set FindRange = ws.Cells.FindNext(After:=FindRange) 
       i = i + 1 
       Loop Until FirstFound = FindRange.Address 
     End If 

End Sub