2017-11-03 5 views
0

私は公式の値の正確なセルを選択することに問題があります。私は本当にVBAに新しいと私は貴重な答えを少なくとも2日間インターネットを検索しました。ここでは、私がコードに入れようとしているコードを示して、それが後で何をするかを説明しましょう。Excel VBAで変数の場所を選択する(セルとして)

Dim r As Range 
    MinTime = WorksheetFunction.Min(Range("C5:L14")) 
Set r = ActiveSheet.Cells.Find(MinTime) 
r.Select 
MinRow = ActiveCell.Row 
MinCol = ActiveCell.Column 

ですから、私がしようとしているのは、worksheetfunction.minで範囲の最小値を見つけ、今見つかったセルを選択することです。その後、行と列の情報を他の2つの変数に転送します。しかし、このコードは常に動作していません。時には時々それはうまく動作し、それは時々それdoesntと私は現時点では無責任です。どんな種類の助けにも感謝します。すでにありがとうございます。

+0

貧弱な検索ユーザー... https://stackoverflow.com/questions/5215616/vba-cell-address-of-max – Gadziu

+0

いくつかのことがあります。 ThisWorkbook.Worksheets( "Sheet1")。Range ........... rが何もないので、値が見つからない場合は処理する必要があります。シート全体を検索していますが、1つの一致しか期待していません。 – QHarr

+0

問題はMinTimeで見つかった番号に無益な数字が見つかることがあります。 Mintimeが正確に(11として)番号を見つけますが、Set r = activesheet.cells.find(MinTime)を使うと(142.1254371)見つけられます。そして私はそれを手に入れません。 –

答えて

1

あなたの範囲は実際に時間を含んでいると思われます。以下のコードは、最も早い時刻(範囲内で最も低い値)を見つけます。

Private Sub MinTime() 

    Dim Rng As Range 
    Dim Mini As Range 
    Dim MiniValue As Double 
    Dim MinRow As Long, MinClm As Long 

    Set Rng = ActiveSheet.Range("C5:L14") 

    MiniValue = Application.Min(Rng) 
    With Rng 
     Set Mini = .Find(What:=MiniValue, _ 
         After:=.Cells(1), _ 
         LookIn:=xlFormulas, _ 
         LookAt:=xlWhole, _ 
         SearchOrder:=xlByRows, _ 
         SearchDirection:=xlNext, _ 
         MatchCase:=False, _ 
         MatchByte:=False) 
    End With 

    With Mini 
     MinRow = .Row 
     MinClm = .Column 
    End With 
End Sub 

トリックではなく、デフォルトxlValuesLookIn:=xlFormulasにあります。 12:00と入力できますが、セルの数式は0.5です。範囲内の最小値であると仮定すると、このコンテキストのセルの「値」(マイクロソフトによる混乱、私のやりかたの混乱)が「12:00」であるため、値を0.5で探すと見つからないでしょう。したがって、見つかった最小値を "12:00"のような文字列に変換するか、数式で0.5を探します。

+0

チャームのように働いた。あなたは私の永遠の感謝の男を持っています。問題は、私のテキストが時間だったときにxlvaluesを探していました。 yorヘルプのためにもう一度、ありがとうございました。 –

0

これは、WorksheetFunctionまたはFind関数を使用せずに行うこともできます。配列を作成してそれをループすることは、あなたが探しているものを見つけるためのかなり簡単な方法です。これを試してください

Sub findMin(ByVal minRange As Range) 
Dim searchArr() As Range 
ReDim searchArr(1 To minRange.Rows.Count * minRange.Columns.Count) As Range 
Dim minVal As Double 
Dim i As Integer, i2 As Integer, outputRow As Integer, outputColumn As Integer 
For i2 = 0 To minRange.Columns.Count 
    For i = 0 To minRange.Rows.Count 
     searchArr(i + 1) = Cells(minRange.Row + i, minRange.Column + i2).Value 
    Next i 
Next i2 

    minVal = searchArr(1).Value 
    For i = 1 To UBound(searchArr) 
     If searchArr(i).Value < minVal Then 
      minVal = searchArr(i).Value 
      outputRow = searchArr(i).Row 
      outputColumn = searchArr(i).Column 
     End If 
    Next i 
End Sub 
+0

アイデアとあなたの努力を感謝します。うん、それはそのように動作するかもしれませんが、私はspesific方法でそれをやらなければならないので、割り当て。そして、私は本当に私のものの問題を見ていない、それは私を夢中にさせます。私はここで与えられたすべての答えを試してみました。しかし、もう一度それをありがとう。 –

0

質問のコードでは、すべてのワークシートのセルでFindメソッドを使用しています。 @ Garyの生徒の答えが示すように、あなたがMinを見つけたものと同じ範囲でFindメソッドを呼び出す必要があります。

また、Findメソッドには、値全体を検索するかどうか、式内で検索する、特定の形式を検索するなど、いくつかの違いがあります。ネット上のFindメソッドに関する情報を簡単に見つけることができます。

ここにあなたのコードが私の感想です:

Sub MyAssignment() 
    Dim searchRange As Range 
    Dim minCell As Range 
    Dim minTime As Double 
    Dim minRow As Long 
    Dim minCol As Long 

    Set searchRange = ActiveSheet.Range("C5:L14") 
    minTime = WorksheetFunction.Min(searchRange) 

    Set minCell = searchRange.Find(minTime, searchRange.Cells(1), XlFindLookIn.xlValues, XlLookAt.xlWhole, MatchCase:=False, SearchFormat:=False) 
    minCell.Select 

    minRow = minCell.Row 
    minCol = minCell.Column 
End Sub 

エクセル(Ctrlキー+ F)から分かるようにVBAからFindメソッドを呼び出すときに使用するパラメータは、検索ダイアログにミラーリングされます。逆に、Excelの[検索]ダイアログのオプションを変更すると、次のVBAの検索呼び出しに影響します。これは、検索メソッドに指定しなかったパラメータは、最後にダイアログで使用された値を使用するためです。

どのように判明しましたか?

+0

これは、オブジェクト変数またはブロック変数が設定されていないことを示します。私はあなたのポイントを得ました。あなたがエラーで何が間違っているかを見つけたら教えてください:)もしあなたがちょうどfacebookから友情を送ることができたら、私は完全なコードを表示することができます。 –

+0

あなたのコードをそのままコピー&ペーストしましたか?私はここでそれを実行し、それは正常に動作します。また、常に_where_と言ってください。 – Excelosaurus

+0

ええ、私はそれをコピーして貼り付け、自分自身に合うように変数名を変更しました。 minCell.Selectでエラーになります。上のコードが終了すると、minCellは0に等しいためです。 –

関連する問題