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

Posted

技术标签:

【中文标题】Excel VBA/Formula 用于根据 2 个其他单元格的值填充 3 个特定单元格【英文标题】:Excel VBA/Formula for populating 3 specific cells based on the value of 2 other cells 【发布时间】:2014-07-02 10:49:11 【问题描述】:

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

 A B C D E
1 2012 年报告年度
2 第三季度报告季度
3 Jul-12 Aug-12 Sep-12
4
5

我正在尝试根据在 B1 和 B2 中选择的内容自动填充单元格 C3、D3 和 E3。例如,如果 B1 = 2012,B2 = Q3,我希望单元格 C3、D3 和 E3 以表格中显示的格式填充该季度的月份。例如C3 = Jul-12,D3 = Aug-12 和 E3 = Sep-12

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

【问题讨论】:

【参考方案1】:

一个(许多!)替代方案:

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

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

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

【讨论】:

谢谢各位。这正是我所需要的,而且效果很好。很容易弄清楚你是如何做到的,并针对不同的情况进行编辑。非常感谢。【参考方案2】:

这很容易用三个简单的公式来完成:

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)

【讨论】:

【参考方案3】:

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

【讨论】:

以上是关于Excel VBA/Formula 用于根据 2 个其他单元格的值填充 3 个特定单元格的主要内容,如果未能解决你的问题,请参考以下文章

根据Excel中的逻辑从2列中检索最大数据

如何使用 VBA 根据值和组合框选择填充 excel 中的行?

OfficeOpenXml.Entends 根据模板导出Excel

在excel中怎样根据多个条件进行求和

根据 Excel 使用宏在 Word 中创建条件格式

excel中countif函数显示的结果为啥不对?