【问题标题】:How do I insert multiple date columns in order to meet a specific date?如何插入多个日期列以满足特定日期?
【发布时间】:2017-02-10 08:22:00
【问题描述】:

我对代码和 Excel VBA 非常陌生,希望你们能帮助我解决我的问题。非常感谢任何提示、反馈和 cmets!

在工作簿中,我想确保工作表 (Sheet1) 的单元格 (I1) 具有写在不同工作表(即菜单)中的特定日期。我希望 I1 成为起点,随后的日期将通过行(I1、J1、K1 等)发生。在这种情况下,如果我需要的具体日期是 16 年 8 月 15 日,并且我的一张表(表 1)的单元格 I1 写为 2016 年 8 月 20 日,我想知道如何以这样的方式构造我的代码,

如果 Sheet 1 中的 I1 当前位于 15/8/16,则什么也不做。但是,如果工作表 1 中的 I1 与 15/8/16 的日期不同,则 I1 现在将从 15/8/16 开始,并添加后续日期,直到达到最初在 I1 的默认日期(现在20/8/16 位于单元格 N1)。

我目前的代码如下:-

If ActiveSheet.Range("I1") <> MainSht.Range("D6") Then
ActiveSheet.Range("I1") = MainSht.Range("D6")
End If

Do
If Cells(1,z+1)>Cells(1,z+1) Then
Cells(1,z+1) = Cells(1,z)+1
End If
z = z+1
Loop Until Cells(1,z+1) = MainSht.Range("D7")

*Mainsht (D6) 是我的开始日期,(D7) 是我的结束日期。

我的代码目前没有插入列部分,因为我在同时应用插入列和日期增量代码时遇到问题。使用我当前的代码,我的日期范围从未扩展,因为它仍在相同的较早日期范围内(与以前相同的最后一列,因此日期列的最后一个单元格保持原样)。如何构造这样一种方式,即添加中间缺失的日期,并通过在重复过程中插入列来添加?

如果有人可以帮助我,请提前感谢。也感谢您的理解。

【问题讨论】:

  • 你先说“添加后续日期”然后“插入列”:你需要简单地在单元格中写日期还是添加列?
  • 如果单元格 I1 没有写入具体日期(即 20/8/16),我想在 I1 之前添加更多列,以容纳需要写入的 5 个日期(15 /8/16-19/8/16) 在 I1 到 M1 之间。现在我的 N1 变成了 2016 年 8 月 20 日。我只是不知道如何与代码混合。它不必是插入列,也可以只是将 I1 更改为特定日期,然后添加直到到达结束日期 (D7)。说得通?简而言之,日期列的范围扩大了 5 列。

标签: vba excel date


【解决方案1】:

请检查以下代码以添加列

Dim start_date, end_date As Date

start_date = ThisWorkbook.Sheets("Sheet1").Range("L1").Value
end_date = ThisWorkbook.Sheets("main").Range("D7").Value

If start_date < end_date Then

    Do Until start_date = end_date
    ThisWorkbook.Sheets("Sheet1").Activate
    Range("L:L").Insert (xlRight)
    start_date = start_date + 1
    Range("L1").Value = start_date
    Loop

End If

【讨论】:

  • 非常感谢您的意见!真的很感激。 ;)
  • 养成并保持避免激活/激活/选择/选择的习惯,并接受完全限定的范围参考religion!!
【解决方案2】:

你可以试试这个:

Option Explicit

Sub main()
    Dim diff As Long

    With Worksheets("Work").Range("I1") '<--| reference working sheet range "I1" (change "Work" to your actual working worksheet)
        diff = .Value - Worksheets("Menu").Range("D6") ' <--| evaluate the difference between referenced range value and worksheet "Menu" cell "D6" (change "Menu" to your actual "main" sheet)
        If diff > 0 Then
            With .Resize(, diff) '<-- reference referenced range resized to the necessary columns number
                .EntireColumn.Insert xlRight '<-- insert columns
                With .Offset(, -diff).Resize(1) '<--| reference referenced range first row
                    .FormulaR1C1 = "=RC[1]-1" ' <--|  insert formulas that substracts one from the value of next cell on the right
                    .Value = .Value '<-- get rid of formulas
                    .NumberFormat = .Offset(, diff).Resize(, 1).NumberFormat '<--| format cells as the passed range
                    .EntireColumn.AutoFit '<--| adjust columns width
                End With
            End With
        End If
    End With
End Sub

只需将“工作”和“菜单”更改为您的实际工作表名称

【讨论】:

  • 我没有意识到我也可以这样做。我从这里学到了一些新东西。谢谢! :)
  • 不客气。请记住,“With-End With”结构与范围参考安全性和代码速度有关
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-22
  • 2018-06-27
  • 1970-01-01
  • 2017-04-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多