不确定如何缩短公式

不确定如何缩短公式

我创建了这个公式:

=IF(B8="Jan","Feb",IF(B8="Feb","Mar",IF(B8="Mar","Apr",IF(B8="Apr","May",IF(B8="May","Jun",IF(B8="Jun","Jul",IF(B8="Jul","Aug",IF(B8="Aug","Sep",IF(B8="Sep","Oct",IF(B8="Oct","Nov",IF(B8="Nov","Dec",IF(B8="Dec","Jan"))))))))))))

因此,当用户选择月份缩写时,下一个单元格将显示连续的月份,例如:用户输入“Oct”,下一个单元格将显示“Nov”。

然而我发现使用这种类型的公式很笨重、耗时,从长远来看会减慢我的文档速度。

如果您有任何想法或知道如何减少这个公式,我们将非常感激。

答案1

您可以使用 EOMONTH,它允许使用第二个条件进行月份偏移:

=TEXT(EOMONTH(B8 & " 1",1),"mmm")

创建B8 & " 1"一个 Excel 可以解释为日期的字符串。

返回EOMONTH(...,1)下个月的最后一天。

日期格式TEXT(...,"mmm")仅为缩写的月份名称。

在此处输入图片描述

答案2

尝试以下之一:(第一个是我根据 PeterH 的回答改进的答案,第二个是我原来的答案)

=TEXT(DATE(2000, MONTH(1 & B8) + 1, 1), "mmm")
=TEXT(DATE(2000, MONTH(DATEVALUE(B8 & " 1")) + 1, 1), "mmm")

12 + 1 = 13这将自动处理从到1(解释为下一年度的第一个月)的滚动。

一步步


DATEVALUE()函数将获取文本日期,并返回日期的“序列号“在我们的例子中,我们使用DATEVALUE(B8 & " 1")...但是为什么呢?

简单使用DATEVALUE("Jan")将会失败并出现#VALUE!错误。

为了解决这个问题,我们添加了一个" 1"使其成为DATEVALUE("Jan 1"),Excel 很高兴地将其解释为"1 Jan 2001"- 幸运的是我们不关心年份。

YEAR(DATEVALUE("Jan 1")) == 2001

根据PeterH的回答,MONTH(DATEVALUE(B8 & " 1"))可以简化为MONTH(1 & B8),如上所示。

这里1 & B8解析为1Jan,Excel 可以轻松解析。

答案3

另一个选择是使用CHOOSE

=CHOOSE(MATCH(B8,{"JAN","FEB","MAR","APR","MAY","JUN","JUL","AUG","SEP","OCT","NOV","DEC"},0),"FEB","MAR","APR","MAY","JUN","JUL","AUG","SEP","OCT","NOV","DEC","JAN")

或者为了进一步简化,您可以使用MONTH计算 B8 中的月份数字,然后将其用作索引值CHOOSE

=CHOOSE(MONTH(1&LEFT(B8,3)),"FEB","MAR","APR","MAY","JUN","JUL","AUG","SEP","OCT","NOV","DEC","JAN")

答案4

通过不同的方法,我想建议您如何在相邻的单元格中循环月份名称。

检查屏幕截图:

在此处输入图片描述

按着这些次序:

:编辑:

  • 仅使用三个字符创建月份列表,正如我在 A 列中创建的。
  • 选择 A 列中的月份列表 &命名范围,名字是, 月份名称
  • 在单元格 D91 中应用数据验证在“设置选项卡”下选择“列表”,然后在“源”中写入命名范围,月份名称
  • 在单元格 F91 中写入以下公式:
    =TEXT(DATE(2018,MATCH($D$91,MnthName,0)+COLUMNS($F$91:F91),1),"mmm")

  • 从下拉列表中选择月份名称,在单元格 F91 中您可以找到下一个月份的名称。

注意:

  • 根据您的需要调整单元地址。

相关内容