如何在给定条件下在 VBA 中显示月份

Posted

技术标签:

【中文标题】如何在给定条件下在 VBA 中显示月份【英文标题】:How to display a month in VBA given conditions 【发布时间】:2018-11-19 11:09:01 【问题描述】:

目前我正在尝试在 VBA 中显示特定条件下的月份。我有两列名为 Quarter 和 Exact Month in Quarter。基于这两个条件,我想显示一个月。

例如,对于第 1 季度第 1 个月,我希望新列显示一月。

感谢您的帮助。

【问题讨论】:

只是为了澄清,例如第 3 季度第 3 个月会是 9 月吗?这些列是否只有季度编号和月份编号,还是文本 Quarter Month?所需输出的屏幕截图会有所帮助。 如果您有月份编号,为什么还需要 Quarter?您只需要月份的名称,还是完整的日历?你能展示一下你有什么和你需要什么吗?工作表函数将是最简单的,但如果您出于某种原因需要在 VBA 中完成它(我认为是家庭作业),那么请展示您到目前为止所拥有的内容。 请编辑您的问题并发布您迄今为止尝试过的内容。解决方案很简单,一旦你开始写,我确定你可以解决它。 是的。我会尽快发布截图 旁注:你甚至不需要 vba,它可以用公式来完成 【参考方案1】:

您可以将每个季度偏移 3 的值。例如,Q2 将对应 3。当您添加季度序列号时,它将转换为日历序列号 (1-12)。之后,您只需要设置所需的格式。

这只是一个 excel 解决方案,如果需要在 VBA 中,您可以在那里应用类似的逻辑。

您可以通过几种方式做到这一点。下图仅作为示例。如何应用它取决于您的数据结构。您可能需要像这样实现VLOOKUP

G2 = TEXT(日期(2018, E2 + VLOOKUP(D2,$A$2:$B:$5,2,0),"MMM")

【讨论】:

月份的长格式 - 例如"January" 由 MMMM TEXT 参数接收,而不是三重变体仅获得 "Jan" :-)【参考方案2】:

[1] C 列中只有一个 Excel 公式 - 不需要任何辅助列:

这个例子例如对于单元格 C2,如您的帖子中所示 converts 季度 * 3 个月(1 个季度 = 3 个月)减去 1 个加月的季度到 DATE (参数年份可以是任何年份> = 1900) 并通过 TEXT 参数 MMMM 显示月份的长格式;四分之一值通过 RIGHT 从 A 列(此处为 A2)中的最后一个字符串位置提取:

=TEXT(DATE(1900,3*(RIGHT($A2,1)-1)+$B2,1),"MMMM")

[2] 通过 VBA 示例函数的方法

使用与上面相同的逻辑:

Sub Test()
    MsgBox getMonthInQuarter("Quarter 4", 3)
End Sub

Function getMonthInQuarter(ByVal quarter As Variant, ByVal month As Integer) As String
Const MonthsInQuarter As Integer = 3
Dim q As Integer: q = Val(Right(quarter, 1))
' Return function value
  getMonthInQuarter = Format(DateSerial(1900, MonthsInQuarter * (q - 1) + month, 1), "MMMM")
End Function

【讨论】:

以上是关于如何在给定条件下在 VBA 中显示月份的主要内容,如果未能解决你的问题,请参考以下文章

如何在不使用 VBA 的情况下在 Excel 中转换 HEX 和 DEC 之间的大数字?

如何在不同条件下在同一位置的 uitableview 单元格上使用 imageview 和 textfield

如何在不重复代码的情况下在所有控制器中显示警报?

如何在 VBA 中设置因月份而异的文件路径?

如何在仍可以更改工作表中的值的情况下在vba excel中执行Do Event计时器?

使用 VBA 在 Microsoft Access 中创建表单