【问题标题】:Excel VBA format a series of months with commas and a "and" at the endExcel VBA 格式化一系列月份,以逗号和“and”结尾
【发布时间】:2014-11-16 08:50:22
【问题描述】:

所以我在 excel 中有几个非连续的行,它们有一个特定的月份(即 C3 =“一月”,F3 =“十月”和 H3 =“十二月”)。我无法弄清楚如何用VBA将所有这些字符串移动到一个单元格中,并将它们转换为以下字符串

“一月、十月和十二月”

在它们之间添加一个逗号是可行的,但是将 final 转换为“and”是个问题。

单元格 b3:m3 中填充的月份数根据不同的公式随机填充,范围为 1 到 4 个不同的月份,具体取决于另一行的值。

感谢任何帮助!

【问题讨论】:

  • 您在寻找比=CONCATENATE(C3,", ",F3,", and ",H3)=C3&", "&F3&", and "&H3 更复杂的东西
  • 是的,如果我不是更清楚,对不起。需要订购的月份数量从 1 到 4 个月不等,单元格/月份位置会根据另一个单元格的值而变化(月份名称在一行中,包含所有 12 个月,例如 B3:M3,如果/当满足某个条件时,我在此之前的 vba 代码会打印出月份名称)。
  • 因此,如果只绘制一个月,我只需要输出“January”,但如果前面的 B3:M3 行有四个值,则需要类似于“January, February, September和十二月”

标签: vba excel


【解决方案1】:

从这样的数据开始:

运行此代码:

Sub months()
    Dim wks As Worksheet
    Dim rng As Range

    Set wks = Worksheets("Sheet4")
    Set rng = wks.Range("B3:M3")

    Dim count As Integer
    count = WorksheetFunction.CountA(rng)
    If count < 1 Then Exit Sub

    Dim result As String

    For Each cell In rng
        If Not IsEmpty(cell) Then
            result = result & cell.Value

            Select Case UBound(Split(result, ","))
                Case count - 2
                    result = result & ", and "
                Case count - 1
                Case Else
                    result = result & ", "
            End Select
        End If
    Next cell

    MsgBox result
End Sub

结果:


注意:您仍然可以通过编辑原始帖子并包括您在 cmets 中列出的其他要求来挽救您的问题(防止它被关闭)。此外,还应添加任何有助于定义所有要求的屏幕截图等。

【讨论】:

  • 还想指出,这可以通过将所有非空单元格(或按一个月填充的单元格)左移,计算具有值的月份数,并基于 if 语句关闭这将连接结果,并最终清除使用的范围
猜你喜欢
  • 2015-05-25
  • 1970-01-01
  • 2017-07-18
  • 2011-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-16
  • 1970-01-01
相关资源
最近更新 更多