如何在给定条件下在 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您可以将每个季度偏移 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