2014-09-26 65 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”。

请放正确的地方以适合您的数据。