我创建了这个公式:
=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
答案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 中您可以找到下一个月份的名称。
注意:
- 根据您的需要调整单元地址。