Excel VBA /公式,用于根据其他两个单元格的值填充3个特定的单元格

在一本工作手册中,我有一个报告,内容如下:

  ABCDE
 1报告年份2012
 2报告季度Q3
 7月3日 -  8月12日 -  9月12日
 4
五

我试图根据B1和B2中select的内容自动化C3,D3和E3的细胞群。 例如,如果B1 = 2012,B2 = Q3,我希望单元格C3,D3和E3以该表格中显示的格式填充该季度的月份。 例如C3 = Jul-12,D3 = Aug-12和E3 = Sep-12

提前致谢! 我试图通过命名范围来做一些事情,但是它变得非常笨拙,我相信有一个更简单的方法!

一个(很多!)替代品:

=DATE($B1,SUBSTITUTE($B2,"Q",)*3+COLUMN()-5,1) 

在C3中复制到E3,格式化以适应。

可以简化B2格式的"Q"#

用三个简单的公式很容易:

 C3: =DATE(B1, (VALUE(RIGHT(B2, 1)) - 1) * 3 + 1, 1) D3: =DATE(B1, (VALUE(RIGHT(B2, 1)) - 1) * 3 + 2, 1) E3: =DATE(B1, (VALUE(RIGHT(B2, 1)) - 1) * 3 + 3, 1) 

然后适当地格式化date或使用TEXT(C3, "MMM-YY")function。

替代scheme:

 C3: =DATE(B1, VALUE(RIGHT(B2, 1)) * 3 - 2, 1) D3: =DATE(B1, VALUE(RIGHT(B2, 1)) * 3 - 1, 1) E3: =DATE(B1, VALUE(RIGHT(B2, 1)) * 3 - 0, 1) 

在VBA表单模块中添加以下内容:

 Private Sub Worksheet_Change(ByVal Target As Range) Dim IntersectRng As Range Dim Year As String, Quarter As String Dim monthStart As Integer Dim Months() As Variant Set IntersectRng = Application.Intersect(Target, Range("B1:B2")) Months = Array("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec") If (Not IntersectRng Is Nothing) Then Year = Range("B1") Quarter = Range("B2") Select Case Quarter Case "Q1" monthStart = 0 Case "Q2" monthStart = 3 Case "Q3" monthStart = 6 Case "Q4" monthStart = 9 Case Else End Select Range("C3").Value = Months(monthStart) & "-" & Year Range("D3").Value = Months(monthStart + 1) & "-" & Year Range("E3").Value = Months(monthStart + 2) & "-" & Year End If