2014-09-26 66 views
-6

我試圖自動完成一個報告,對於一個客戶,我有點卡住了需要克服的障礙之一,我有一些想法,但對VB編程來說是新的。Excel - 有條件的宏/ VBA腳本

要求是將一個單元格範圍從一個工作表複製到另一個工作表,但目標需要根據當前日期進行更改。使用一個通用示例,我試圖達到以下目的:

如果日期是月份的第一個,則目標範圍是B2:F3,如果它是第二個,則目標範圍是B4:F5,if然後第三個目標是B6:F7 .......如果第31個目標是B62:F63,則源範圍是靜態的。

我想我可以通過編寫一個巨大的腳本,其中包含一個月的每一天的IF語句,但我希望我可以有點聰明,並使用變量來分配行引用在該腳本然後將它們分回到select/copy語句中。

回答

0

絕對可以。

Dim x as Integer 
Dim daymonth as Integer 
Dim rw as String 
daymonth = CInt(Format(date, "d")) 
x = daymonth * 2 
rw = CStr(x) 

現在你可以使用範圍,如:

Range("D" & rw & ":F" & CStr(x + 1)) 

只是一個例子。然後,由於數字在兩個範圍之間不變,只需將該數字添加到x並在該範圍內使用它。

+0

很好的反饋意見,這兩個答案几乎擊中了頭部。我不確定如何將變量集成到單元格引用中,以及如何使用NOW()方法而不是使用單元格來保存此信息。這是我的第一個VBA項目,對於新手問題感到抱歉。 – Jason 2014-10-03 08:30:56

0

你可能想要下面的子程序。

Sub copyDataDependOnDatte() 
    Dim today As Date, dayOfToday As Integer 
    Dim sWS As Worksheet, dWS As Worksheet 

    'set two worksheets to variables 
    Set sWS = Worksheets("source") 'Worksheet which has data to be copied 
    Set dWS = Worksheets("destination") 'Worksheet which is used to record data of days. 

    ' get day of today 
    today = Now() 'get date of today 
    dayOfToday = Day(today) ' get day of today 

    Range(sWS.Cells(2, 2), sWS.Cells(3, 6)).Copy 'copy B2:F3 of worksheet "source" 
    dWS.Cells(dayOfToday * 2, 2).PasteSpecial ' paste to worksheet "destination" at place determined by day of today 

End Sub 

在這段代碼中,我假定以下代碼是用來編寫代碼的。

  1. 「源」是包含的數據將被複制的工作表的名稱
  2. 「目的地」是記錄從「源」工作表
  3. 數據複製是存在於複製THA數據的工作表的名稱工作表「源」的「B2:F3」

請將工作表名稱更改爲您的數據的真實姓名。

要複製的數據的位置在代碼中被描述爲「Range(sWS.Cells(2,2),sWS.Cells(3,6))」。 (2,2)表示第2行第2列的單元格,即「B2」。 (3,6)表示第3行第6列的單元格,即「F3」。

請放正確的地方以適合您的數據。