2017-03-05 9 views
-2

こんにちは、私はVBAプログラミングの初心者です。私は日付を入力して、コードがエクセルの日付を見つけますが、イムは、この問題に行われ、ここに私のコードです生成]ボタンをクリックした後..VBA - 次の空の行を見つける

 Dim Rng As Range 
     Dim FindDate As Date 

     FindDate = txtDate.Value 

     If Trim(FindDate) <> "" Then 
      With Sheets("Sheet2").Range("B:B") 
       Set Rng = .Find(What:=FindDate, After:=.Cells(.Cells.Count), LookIn:=xlValues, LookAt:=xlWhole, _ 
           SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=True) 

        If Not Rng Is Nothing Then 
         Application.Goto Rng, True 
        Else 
         MsgBox "Nothing found" 
        End If 
      End With 
     End If 
を専門家:)

からいくつかの助けが必要

私の次の問題があり、私はここで、画面があなたの特定の質問に答えるために

+0

日付が見つかると、一致するセルに「Rng」が設定されます。値を表示したい場合は 'rng.Row'と 'rng.Column'を参照するか、Cells(rsg.row、rng.column).value = "左を見る"のようなものを使用します。または、 'オフセット'を使用して 'rng'を使用することもできます。 –

答えて

0

ショット..です日付の隣に空のセルを選択する必要があり、最も簡単な方法は次のようになります。

Rng.Offset(, 1).Select 

ただし、日付を使用するときにFind()関数が少し信頼性が低い可能性があることに注意する必要があります。詳細情報とリンクについては、この記事を参照してください:VBA, goto cell with a certain value (type: date)。あなたのケースは、日付がTextBoxで入力されると、特にリスクにさらされます。

あなたのコードは、その投稿のOPと非常によく似ています。あなたが本当にあなたがそれを自分で書いていない場合は、コードソースを信用するべきです。私があなただったら、私はLongにあなたのテキストボックスの値を変換して、ロングマッチングのための(ロングスとして日付値を提供.Value2プロパティを使用して)セルの値を検索したい

。コードははるかに長いものではなく、次のようになります。

Dim src As Range 
Dim findDate As Date 
Dim findVal As Long 
Dim cell As Range 

'Define the source data range 
With Sheet2 
    Set src = .Range(.Cells(1, "B"), .Cells(.Rows.Count, "B").End(xlUp)) 
End With 

'Acquire search date and convert to long 
findDate = CDate(UserForm1.txtDate.Value) 
findVal = CLng(findDate) 

'Search for date 
For Each cell In src.Cells 
    If cell.Value2 = findVal Then 
     Application.Goto cell, True 
     'Select the next cell to the right 
     cell.Offset(, 1).Select 
    End If 
Next 
0

あなたは可能性があり

  • 希望範囲に

    Function SetRange(FindDate As Date) As Range 
        If Trim(FindDate) <> "" And IsDate(FindDate) Then 
         With Sheets("Sheet2") '<--| reference wanted sheet 
          With .Range("B1", .cells(.Rows.Count, 2).End(xlUp)) '<--| reference its column "B" range from row 1 down to last not empty row 
           On Error Resume Next '<--| if subsequent 'Find()' avoid possible subsequent statement error to stop the Function 
           Set SetRange = .Find(What:=FindDate, After:=.cells(.cells.Count), LookIn:=xlValues, LookAt:=xlWhole, _ 
              SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=True).Offset(, 1) '<--| try finding the passed 'FindDate' in referenced range and offset 1 column to the right 
          End With 
         End With 
        End If 
    End Function 
    
  • を返す試してみて、あなたの「メインを持っているFunctionを使用します"使用する前にNothingと照合して確認してください。

    Option Explicit 
    
    Sub Main() 
        Dim Rng As Range 
    
        Set Rng = SetRange(txtDate.Text) 
        If Not Rng Is Nothing Then Rng.Select 
    End Sub 
    
+0

@BartD、私の答えがあなたの質問を解決したら、回答の横にあるチェックマークをクリックしてそれを受け入れて、灰色で塗りつぶされたものにします。 – user3598756

+0

@BartD、あなたからのフィードバックを得る機会はありますか? – user3598756