2014-02-20 36 views
0

我是新來的日期都stackoverflow.com和在Excel中VBA,這樣下去容易對我:-)使用Excel VBA搜索整個一行位於另一小區

我期待有一個按鈕在我單擊的Excel表中,將搜索整個或第1行的日期(位於另一個單元格中)。如果它在第1行的呼叫中找到日期,它將在其下面的單元格中輸入一些文本。如果未找到日期,則會將該日期添加到該行中的下一個空閒單元格,然後將該文本添加到該單元格下方的單元格中。

我知道我已經問了很多,我很高興接受部分答案,因爲我知道如何做這方面的一些方面。例如粘貼文本等。我發現困難的部分是在整個第1行中的發現日期,然後如果沒有找到日期,則找到下一個空白單元格。

任何幫助或指針將不勝感激!

但是,如果我得到回覆,我會更加高興,該人員還解釋了代碼是如何工作的,因爲我非常熱衷於學習VBA並在未來再次使用它,而不僅僅是複製和粘貼。

在此先感謝您的回覆! :-)

回答

1

試試這個。我已經詳細地評論了代碼,但是如果您有問題,請在評論中提問:)

Sub test() 
    Dim ws As Worksheet 
    Dim rng As Range 
    Dim targetDate As Range 

    'change sheet1 to suit 
    Set ws = ThisWorkbook.Worksheets("Sheet1") 

    'change address of your cell with target date 
    Set targetDate = ws.Range("A4") 

    'tries to find target date in first row 
    Set rng = ws.Range("1:1").Find(What:=targetDate, LookAt:=xlWhole, MatchCase:=False) 

    If rng Is Nothing Then 
     'if nothing found - search for last non empty column 
     Set rng = ws.Range("1:1").Find(What:="*", LookAt:=xlWhole, MatchCase:=False, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious)   
     If rng Is Nothing Then 
      'if row 1 is empty 
      Set rng = ws.Range("A1") 
     Else 
      'take next column after last non empty 
      Set rng = rng.Offset(, 1) 
     End If 
     'write target date 
     rng = targetDate 
     rng.NumberFormat = "dd.mm.yyyy" 
     'write something below the date 
     rng.Offset(1) = "test" 
    Else 
     'if date is found - write something below the date 
     rng.Offset(1).Value = "test2" 
    End If 
End Sub 
+0

如果行包含日期和常規文本,以下代碼段是否可以工作? ws.Range(「1:1」)。NumberFormat =「dd.mm.yyyy」 – Petay87

+0

您的日期格式化爲'General'?你爲什麼不喜歡'日期格式'?如果你的日期存儲爲文本,只需刪除這行'ws.Range(「1:1」)。NumberFormat =「dd.mm.yyyy」' - 應該可以工作 –

+0

這不是我的日期存儲爲文本,而是這個行在其中包含日期和一般文本。 – Petay87

相關問題