繁体   English   中英

Excel VBA / Formula用于基于其他2个单元格的值填充3个特定单元格

[英]Excel VBA/Formula for populating 3 specific cells based on the value of 2 other cells

在工作簿中,我的报告设置如下:

A              B            C            D            E
1 Reporting Year        2012
2 Reporting Quarter     Q3
3                                 Jul-12        Aug-12       Sep-12
4
5

我正在尝试根据B1和B2中选择的内容来自动化C3,D3和E3细胞的填充。 例如,如果B1 = 2012,B2 = Q3,我希望单元格C3,D3和E3以表中所示的格式填充该季度的月份。 例如C3 = 12月7日,D3 = 12月8日,E3 = 12月9日

提前致谢! 我试图通过命名范围来做某事,但是它变得非常笨拙,我敢肯定有一种更简单的方法!

使用三个简单的公式可以很容易地做到这一点:

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)

然后适当地设置日期格式或使用TEXT(C3, "MMM-YY")函数。

选择:

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)

(很多!)替代方法之一:

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

在C3中复制并复制到E3,并进行格式化以适合。

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

在您的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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM