【问题标题】:How to convert Quarter years to other format如何将季度年转换为其他格式
【发布时间】:2016-07-01 12:06:06
【问题描述】:

我的单元格可以包含这种格式的时间:

1625(2016 年为 16,第 25 周为 25) 或者这种格式

2016-Q2(Q2 表示一年中的第 2 季度)

转换时,我希望季度是季度的周中

2016 年第一季度 = 1608

2016 年第二季度 = 1620

2016 年第三季度 = 1633

2016 年第四季度 = 1646

我不想转换其所在单元格中的时间。我想将其转换为 YYWW 格式,以获取另一个表格中时间线的公式。因此,我将帮助单元格与转换后的值一起使用,并引用这些单元格而不是另一张表中的值。

我已经使用嵌套的 if 函数完成了此操作,从而产生了一英里长的公式,因为时间线需要很长,而且时间很可能是 2025 年第三季度。

=IF('Gulpilspuls NT'!U4="2016-Q1";1608;IF('Gulpilspuls NT'!U4="2016-Q2";1620;IF('Gulpilspuls NT'!U4="2016-Q3";1633;IF('Gulpilspuls NT'!U4="2016-Q4";1646;IF('Gulpilspuls NT'!U4="2017-Q1";1708;IF('Gulpilspuls NT'!U4="2017-Q2";1720;IF('Gulpilspuls NT'!U4="2017-Q3";1733;IF('Gulpilspuls NT'!U4="2017-Q4";1746;IF('Gulpilspuls NT'!U4="2018-Q1";1808;IF('Gulpilspuls NT'!U4="2018-Q2";1820;IF('Gulpilspuls NT'!U4="2018-Q3";1833;IF('Gulpilspuls NT'!U4="2018-Q4";1846;IF('Gulpilspuls NT'!U4="2019-Q1";1908;IF('Gulpilspuls NT'!U4="2019-Q2";1920;IF('Gulpilspuls NT'!U4="2019-Q3";1933;IF('Gulpilspuls NT'!U4="2019-Q4";1946;IF('Gulpilspuls NT'!U4="2020-Q1";2008;IF('Gulpilspuls NT'!U4="2020-Q2";2020;IF('Gulpilspuls NT'!U4="2020-Q3";2033;IF('Gulpilspuls NT'!U4="2020-Q4";2046;IF('Gulpilspuls NT'!U4="2021-Q1";2108;IF('Gulpilspuls NT'!U4="2021-Q2";2120;IF('Gulpilspuls NT'!U4="2021-Q3";2133;IF('Gulpilspuls NT'!U4="2021-Q4";2146;IF('Gulpilspuls NT'!U4="2022-Q1";2208;IF('Gulpilspuls NT'!U4="2022-Q2";2220;IF('Gulpilspuls NT'!U4="2022-Q3";2233;IF('Gulpilspuls NT'!U4="2022-Q4";2246;IF('Gulpilspuls NT'!U4="2023-Q1";2308;IF('Gulpilspuls NT'!U4="2023-Q2";2320;IF('Gulpilspuls NT'!U4="2023-Q3";2333;IF('Gulpilspuls NT'!U4="2023-Q4";2346;IF('Gulpilspuls NT'!U4="2024-Q1";2408;IF('Gulpilspuls NT'!U4="2024-Q2";2420;IF('Gulpilspuls NT'!U4="2024-Q3";2433;IF('Gulpilspuls NT'!U4="2024-Q4";2446;IF('Gulpilspuls NT'!U4="2025-Q1";2508;IF('Gulpilspuls NT'!U4="2025-Q2";2520;IF('Gulpilspuls NT'!U4="2025-Q3";2533;IF('Gulpilspuls NT'!U4="2025-Q4";2546;IF('Gulpilspuls NT'!U4="2026-Q1";2608;IF('Gulpilspuls NT'!U4="2026-Q2";2620;IF('Gulpilspuls NT'!U4="2026-Q3";2633;IF('Gulpilspuls NT'!U4="2026-Q4";2646;IF('Gulpilspuls NT'!U4="2027-Q1";2708;IF('Gulpilspuls NT'!U4="2027-Q2";2720;IF('Gulpilspuls NT'!U4="2027-Q3";2733;IF('Gulpilspuls NT'!U4="2027-Q4";2746;IF('Gulpilspuls NT'!U4="2028-Q1";2808;IF('Gulpilspuls NT'!U4="2028-Q2";2820;IF('Gulpilspuls NT'!U4="2028-Q3";2833;IF('Gulpilspuls NT'!U4="2028-Q4";2846;IF('Gulpilspuls NT'!U4="2029-Q1";2908;IF('Gulpilspuls NT'!U4="2029-Q2";2920;IF('Gulpilspuls NT'!U4="2029-Q3";2933;IF('Gulpilspuls NT'!U4="2029-Q4";2946;IF('Gulpilspuls NT'!U4="2030-Q1";3008;IF('Gulpilspuls NT'!U4="2030-Q2";3020;IF('Gulpilspuls NT'!U4="2030-Q3";3033;IF('Gulpilspuls NT'!U4="2030-Q4";3046;IF('Gulpilspuls NT'!U4="2031-Q1";3108;IF('Gulpilspuls NT'!U4="2031-Q2";3120;IF('Gulpilspuls NT'!U4="2031-Q3";3146;IF('Gulpilspuls NT'!U4="2031-Q4";3146;IF('Gulpilspuls NT'!U4="2032-Q1";3208;IF('Gulpilspuls NT'!U4="2032-Q2";3220;IF('Gulpilspuls NT'!U4="2032-Q3";3233;IF('Gulpilspuls NT'!U4="2032-Q4";3246;IF('Gulpilspuls NT'!U4="2033-Q1";3308;IF('Gulpilspuls NT'!U4="2033-Q2";3320;IF('Gulpilspuls NT'!U4="2033-Q3";3333;IF('Gulpilspuls NT'!U4="2033-Q4";3346;IF('Gulpilspuls NT'!U4="2034-Q1";3408;IF('Gulpilspuls NT'!U4="2034-Q2";3420;IF('Gulpilspuls NT'!U4="2034-Q3";3433;IF('Gulpilspuls NT'!U4="2034-Q4";3446;IF('Gulpilspuls NT'!U4="2035-Q1";3508;IF('Gulpilspuls NT'!U4="2035-Q2";3520;IF('Gulpilspuls NT'!U4="2035-Q3";3533;IF('Gulpilspuls NT'!U4="2035-Q4";3546;IF('Gulpilspuls NT'!U4="2036-Q1";3608;IF('Gulpilspuls NT'!U4="2036-Q2";3620;IF('Gulpilspuls NT'!U4="2036-Q3";3633;IF('Gulpilspuls NT'!U4="2036-Q4";3646;IF('Gulpilspuls NT'!U4="2037-Q1";3708;IF('Gulpilspuls NT'!U4="2037-Q2";3720;IF('Gulpilspuls NT'!U4="2037-Q3";3733;IF('Gulpilspuls NT'!U4="2037-Q4";3746;IF('Gulpilspuls NT'!U4="2038-Q1";3808;IF('Gulpilspuls NT'!U4="2038-Q2";3820;IF('Gulpilspuls NT'!U4="2038-Q3";3833;IF('Gulpilspuls NT'!U4="2038-Q4";3846;'Gulpilspuls NT'!U4))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))

您可以清楚地看到这种方法不是最好的。我不能让它这么长,因为嵌套的 if 函数只能包含 64 级嵌套。各位有没有更好的建议?

该公式必须适用于两种格式的时间输入,我需要它能够以 1:1 的比例转换所有单元格,这意味着日历中的 1 个单元格必须是我可以使用的另一个位置的 1 个转换后的单元格公式。如果日历中的单元格没有 YYYY-Q1234?它应该只显示它​​是什么,而不是你可以在我的公式末尾看到的那样。

【问题讨论】:

  • 我认为我的应该为你工作......也许没有 if 的情况下更容易做到这一点,但我认为它会以你可以理解的方式很好地工作

标签: vba excel


【解决方案1】:

这是你的公式。

=IF(AND(LEN(C6)=4,ISERROR(FIND("-",C6))),C6,MID(C6,3,2)&INDEX({"08",20,33,46},RIGHT(C6,1)))

确保您的数据中没有多余的空间。不像这个“2016-Q1”,而是像这个“2016-Q1”。

【讨论】:

  • 我只是将 C5 更改为时间数据可能位于的位置?如果单元格已经有 1630 方式的数据,这会起作用吗?
  • 不,如果单元格有像 1630 这样的数据,它不会起作用。让我稍微改变一下。
  • 好的,所以如果我们不知道具体的星期,有些单元格的格式为 ex 1715 1635 1652,有些单元格就像 2016-q3 2020-q3 这样的格式。我不希望我的压延机中的任何值发生变化。我在另一个存储新转换时间的位置重新创建了日历的布局。然后,我使用转换为这种格式的单元格(1730 1752 1925 2518 3306 1605)在另一个公式中引用日历的时间线。时间线公式仅适用于 YYWW 格式的值,这就是我这样做的原因。
  • 您能否用一张表格来形象化代码不起作用以及它有什么问题?
【解决方案2】:

编辑:我刚刚意识到,如果原始格式为 YYWW,您确实希望将其更改为季度中的周数。所以我们简化公式:

=IF(ISNUMBER(-A1),A1,MID(A1,3,2) & CHOOSE(RIGHT(A1,1),"08",20,33,46))

如果您希望 YYWW 始终呈现为数字:

=1*IF(ISNUMBER(-A1),A1,MID(A1,3,2) & CHOOSE(RIGHT(A1,1),"08",20,33,46))

以下是各种样本的结果:

编辑:如果您需要检查空格,您可以这样做:

=IF(LEN(A1)=0,"",1*IF(ISNUMBER(-A1),A1,MID(A1,3,2) & CHOOSE(RIGHT(A1,1),"08",20,33,46)))

但是,如果0 不会导致下游问题,您可以使用原始的、较短的公式,并且仅使用自定义格式来抑制零返回:0;;

如果您需要检查您不想处理的其他条件,您可以执行类似的操作。

【讨论】:

  • 这只是一个问题。如果它尝试转换的单元格为空,则返回 0。我可以将其更改为返回“”,即空白吗?
  • @FelixTorssell 我将修改公式以处理“空白单元格”问题。这是一个简单的修改。但请记住,在提出问题时,请始终提出与您的特定问题相关的所有情况。
  • 谢谢!很抱歉,在我用其他公式测试它之前,我没有意识到返回 0 会是一个问题。感谢您的帮助:)
【解决方案3】:

这样的事情应该可以做到,但是,在第一季度中期,即第 6 周,因此如果您的年份不是从 1/1 开始,您需要进行调整

Function get_week(strInput As String) As String

Dim strQ As String
Dim bytQ As Byte
Dim dblMultiplier As Double
Dim intWeekNumber As Integer

strQ = Split(strInput, "-")(0)
bytQ = CByte(Right(strQ, 1))

dblMultiplier = (bytQ - 1) / 4
intWeekNumber = (dblMultiplier * 52)
intWeekNumber = intWeekNumber + (13 / 2)

get_week = Split(strInput, "-")(1) & "-" & CStr(intWeekNumber)

End Function

【讨论】:

  • 我对vb不是很熟悉,这个输出会在哪里输出,如何选择应该输出到哪里?
  • 在 b1 中,=get_week(a1)
【解决方案4】:

让我再试一次

="20"&LEFT(N5,2)&IF(MOD(N5,100)<=8,"-Q1",IF(MOD(N5,100)<=20,"-Q2",IF(MOD(N5,100)<=33,"-Q3",if(MOD(N5,100)<=46,"-Q4","-Q1"))))

应该适用于 2000 年过去的一切;)

【讨论】:

  • 好吧,这与我想要的相反。我希望 YYYY-Q1-4 变成 YYWW 而不是相反
猜你喜欢
  • 2015-09-13
  • 2023-01-22
  • 1970-01-01
  • 2021-07-25
  • 1970-01-01
  • 1970-01-01
  • 2022-01-01
  • 2018-10-02
  • 1970-01-01
相关资源
最近更新 更多