超有魅力的Excel 自定义数字格式代码
写此博文的灵感来源于一个公历日期转农历日期的一个实例。
| 日期 | 转旧历 |
| 2010-7-26 | 庚寅年六月十五日 |
公式:
=MID(“庚辛壬癸甲乙丙丁戊己”,MOD(TEXT(A2,”[$-130000]e”),10)+1,1)&MID(“申酉戌亥子丑寅卯辰巳午未”,MOD(TEXT(A2,”[$-130000]e”),12)+1,1)&TEXT(A2,”[$-1E130000]年M月”&IF(-TEXT(A2,”[$-130000]d”)<-10,,”初”)&”D日”)
可以看到公式中蓝色字体标注的TEXT()函数第二参数代码[$-130000],这是我第一次见这种写法,好奇心使我不停的搜索数字格式代码相关网页,最后在微软官网发现创建符合国际惯例的自定义数字格式(URL http://office.microsoft.com/zh-cn/excel-help/HA001034635.aspx )
由此了解到[$-130000]其实缩写,写全应该是[$-00130000]。像这类出现在自定义格式代码开始处括号中的代码称之为区域设置规范,其作用是限制输出数字格式的数字形状、输出语言及(日期类型)。
案例分析 (将当前日期转换为农历)
=TEXT(TODAY(),”[$-1E130000]YYYY年M月D日”)
公式输出结果为: 二○一○年六月十五日
在上面公式中 [$-1E130000]由三个格式代码的组件构成:
1、1E 为数字形状 输出简体中文1,中文小写一
2、13 为日期类型 输出蒙古日期
3、0000 为区域语言 Microsoft Excel 输出“控制面板”中设置的系统设置
附:三个格式代码对照表
| 数字格式代码组件 | |
| 十六进制数值 | 数字形状 |
| 01 | 西方语言 |
| 02 | 阿拉伯印度语 |
| 03 | 扩展阿拉伯印度语 |
| 04 | 梵语 |
| 05 | 孟加拉语 |
| 06 | 果鲁穆奇语 |
| 07 | 古吉拉特语 |
| 08 | 奥里雅语 |
| 09 | 泰米尔语 |
| 0A | 泰卢固语 |
| 0B | 卡纳达语 |
| 0C | 马拉雅拉姆语 |
| 0D | 泰语 |
| 0E | 老挝语 |
| 0F | 藏语 |
| 10 | 缅甸语 |
| 11 | 埃塞俄比亚语 |
| 12 | 高棉语 |
| 13 | 蒙古语 |
| 1B | 日语 1 |
| 1C | 日语 2 |
| 1D | 日语 3 |
| 1E | 简体中文 1,中文小写 |
| 1F | 简体中文 2,中文大写 |
| 20 | 简体中文 3 ,全角数字 |
| 21 | 繁体中文 1,繁体小写 |
| 22 | 繁体中文 2,繁体大写 |
| 23 | 繁体中文 3,全角数字 |
| 24 | 朝鲜语 1 |
| 25 | 朝鲜语 2 |
| 26 | 朝鲜语 3 |
| 27 | 朝鲜语 4 |
| 日期类型组件 | |
| 十六进制数值 | 日历 |
| 01 | 公历(本地化) |
| 02 | 公历(美国) |
| 03 | 日本日历(和历) |
| 04 | 台湾日历 |
| 05 | 朝鲜日历(檀纪) |
| 06 | 回历(阿拉伯农历) |
| 07 | 泰语 |
| 09 | 公历(中东法语) |
| 0A | 公历(阿拉伯语) |
| 0B | 公历(转译英语) |
| 区域设置和语言目标组件 | ||
|
|
语言 | LCID |
| 0401 | 阿拉伯语 | 1025 |
| 0402 | 保加利亚语 | 1026 |
| 0403 | 加泰罗尼亚语 | 1027 |
| 0404 | 中文(繁体) | 1028 |
| 0405 | 捷克语 | 1029 |
| 0406 | 丹麦语 | 1030 |
| 0407 | 德语 | 1031 |
| 0408 | 希腊语 | 1032 |
| 0409 | 英语(美国) | 1033 |
| 040B | 芬兰语 | 1035 |
| 040C | 法语 | 1036 |
| 040D | 希伯来语 | 1037 |
| 040E | 匈牙利语 | 1038 |
| 040F | 冰岛语 | 1039 |
| 0410 | 意大利语 | 1040 |
| 0411 | 日语 | 1041 |
| 0412 | 朝鲜语 | 1042 |
| 0413 | 荷兰语 | 1043 |
| 0414 | 挪威语(伯克梅尔) | 1044 |
| 0415 | 波兰语 | 1045 |
| 0416 | 葡萄牙语(巴西) | 1046 |
| 0418 | 罗马尼亚语 | 1048 |
| 0419 | 俄语 | 1049 |
| 041A | 克罗地亚语 | 1050 |
| 041B | 斯洛伐克语 | 1051 |
| 041C | 阿尔巴尼亚语 | 1052 |
| 041D | 瑞典语 | 1053 |
| 041E | 泰语 | 1054 |
| 041F | 土耳其语 | 1055 |
| 0420 | 乌尔都语 | 1056 |
| 0421 | 印度尼西亚语 | 1057 |
| 0422 | 乌克兰语 | 1058 |
| 0423 | 白俄罗斯语 | 1059 |
| 0424 | 斯洛文尼亚语 | 1060 |
| 0425 | 爱沙尼亚语 | 1061 |
| 0426 | 拉脱维亚语 | 1062 |
| 0427 | 立陶宛语 | 1063 |
| 0428 | 塔吉克语 | 1064 |
| 0429 | 波斯语 | 1065 |
| 042A | 越南语 | 1066 |
| 042B | 亚美尼亚语 | 1067 |
| 042C | 阿塞拜疆语(拉丁文) | 1068 |
| 042D | 巴斯克语 | 1069 |
| 042F | 马其顿语 | 1071 |
| 0436 | 南非语 | 1078 |
| 0437 | 格鲁吉亚语 | 1079 |
| 0438 | 法罗语 | 1080 |
| 0439 | 印地语 | 1081 |
| 043A | 马耳他语 | 1082 |
| 043D | 意第绪语 | 1085 |
| 043E | 马来语 | 1086 |
| 043F | 哈萨克语 | 1087 |
| 0440 | 吉尔吉斯语 | 1088 |
| 0441 | 斯瓦希里语 | 1089 |
| 0442 | 土库曼语 | 1090 |
| 0443 | 乌兹别克语(拉丁文) | 1091 |
| 0444 | 鞑靼语 | 1092 |
| 0445 | 孟加拉语 | 1093 |
| 0446 | 旁遮普语 | 1094 |
| 0447 | 古吉拉特语 | 1095 |
| 0448 | 奥里雅语 | 1096 |
| 0449 | 泰米尔语 | 1097 |
| 044A | 泰卢固语 | 1098 |
| 044B | 卡纳达语 | 1099 |
| 044C | 马拉雅拉姆语 | 1100 |
| 044D | 阿萨姆语 | 1101 |
| 044E | 马拉地语 | 1102 |
| 044F | 梵语 | 1103 |
| 0450 | 蒙古语 | 1104 |
| 0456 | 加利西亚语 | 1110 |
| 0457 | 贡根语 | 1111 |
| 0458 | 曼尼普尔语 | 1112 |
| 0459 | 信德语 | 1113 |
| 045A | 叙利亚语 | 1114 |
| 045B | 僧伽罗语 | 1115 |
| 045C | 聪加语 | 1116 |
| 045D | 因纽特语 | 1117 |
| 045E | 阿姆哈拉语 | 1118 |
| 045F | 塔马赛特文(柏柏尔/阿拉伯) | 1119 |
| 0460 | 克什米尔语(阿拉伯) | 1120 |
| 0461 | 尼泊尔语 | 1121 |
| 0462 | 弗里斯南语 | 1122 |
| 0463 | 普什图语 | 1123 |
| 0464 | 菲律宾语 | 1124 |
| 0465 | 迪维希语 | 1125 |
| 0466 | 克瓦语 | 1126 |
| 0467 | 富尔贝语 | 1127 |
| 0468 | 豪撒语 | 1128 |
| 0469 | 伊比比奥族语 | 1129 |
| 046A | 约鲁巴语 | 1130 |
| 0470 | 伊博语 | 1136 |
| 0471 | 卡努里语 | 1137 |
| 0472 | 库希特语 | 1138 |
| 0473 | 提格里尼亚语(埃塞俄比亚) | 1139 |
| 0475 | 夏威夷语 | 1141 |
| 0476 | 拉丁语 | 1142 |
| 0477 | 索马里语 | 1143 |
| 0478 | 彝语 | 1144 |
| 0804 | 中文(简体) | 2052 |
| 0807 | 德语(瑞士) | 2055 |
| 0809 | 英语(英国) | 2057 |
| 0814 | 挪威语(尼诺斯克) | 2068 |
| 0816 | 葡萄牙语(葡萄牙) | 2070 |
| 081A | 塞尔维亚语(拉丁文) | 2074 |
| 082C | 阿塞拜疆语(西里尔文) | 2092 |
| 0843 | 乌兹别克语(西里尔文) | 2115 |
| 0873 | 提格里尼亚语(厄立特里亚) | 2163 |
| 085F | 塔马赛特文(拉丁文) | 2143 |
| 0C07 | 德语(奥地利) | 3079 |
| 0C09 | 英语(澳大利亚) | 3081 |
| 0C0A | 西班牙语 | 3082 |
| 0C0C | 法语(加拿大) | 3084 |
| 0C1A | 塞尔维亚语(西里尔文) | 3098 |
| 1009 | 英语(加拿大) | 4105 |
注:在实际应用中以上3个代码组件可自左至右依次省略。如[$-130000]就省略第一组件。
这种自定义代码格式不常用,但在某些情况下还是比较实用。如:
EXCEL计算今天是星期几?国人通常叫今天是周几?
| 周一 | =TEXT(“2010-7-26″,”[$-804]aaa”) |
常规写法如下
| 周一 | =TEXT(WEEKDAY(“2010-7-26″)-1,”周[dbnum1]#”) |
| 周一 | =TEXT(WEEKDAY(“2010-7-26″),”周[dbnum1]aaa”) |
其他表现形式
| 星期一 | =TEXT(“2010-7-26″,”aaaa”) |
| Monday | =TEXT(“2010-7-26″,”dddd”) |
| Mon | =TEXT(“2010-7-26″,”ddd”) |
| 一 | =TEXT(“2010-7-26″,”aaa”) |
老一辈还喜欢用农历,比如结婚要看“好日子”,好日子就是根椐农历测算的。今天是农历几号?
| 二○一○年六月十五日 | =TEXT(“2010-7-26″,”[$-1E130000]YYYY年M月D日”) |
surda在此就不一一罗列,自行发散。如果想了解更多TEXT()函数用法,或许这些对你有用:
TEXT()函数很强大,博主很强大。
@karry
:)TEXT()用法还是很广的,特别是在处理某些文本型日期、文本型数字等。