一、用途

将Excel中含有人名与年份的字符串转换为指定格式。要求输入格式中作者的姓必须大于1个字符名必须为1个字符

案例】某不规则的参考文献字符串
Wang, H X, Ng, T B, 2000. Ginkbilobin, a novel antifungal protein from Ginkgo biloba seeds with sequence similarity to embryo-abundant protein. Biochem Bioph Res Co 279(2):407-411.

  • 使用该函数后,能够将人名与年份自动转换为指定格式,例如转换为:Wang, H. X., Ng, T. B. (2000).(不限于这种格式)

二、使用方法

  1. 在Excel中打开Visual Basic工作界面,在对应Excel表上新建模块,并将以下代码复制到模块中
  2. 在Excel表的某一单元格中输入“=People_year(参数表)”,按回车即可。
    参数表说明
    cell - 需转换参考文献格式的单元格或字符串
    Fam_sep - 名后面的分隔符,默认为逗号
    Fir_sep - 姓后面的分隔符,默认为即句号
    Peo_sep - 人后面的分隔符,默认为逗号
    has_brack - 发表年份是否要加括号

三、代码

Function min(a, b)If a > b Thenmin = bElsemin = aEnd If
End FunctionFunction is_char(a)is_char = FalseIf (a >= "a" And a <= "z") Or (a >= "A" And a <= "Z") Thenis_char = TrueEnd If
End FunctionFunction have_char(Str)have_char = 0For i = 1 To Len(Str)If is_char(Mid(Str, i, 1)) Thenhave_char = iExit ForEnd IfNext i
End FunctionFunction ctrl_right(Str, start)Dim endding As Integerendding = startDo While is_char(Mid(Str, endding, 1))endding = endding + 1Loopctrl_right = endding - 1
End FunctionFunction People_year(cell, Optional Fam_sep As String = ",", _Optional Fir_sep As String = ".", Optional Peo_sep As String = ",", _Optional has_brack As Boolean = True)' Fam_sep 名后面的分隔符,默认为Journal of Ecology格式,即逗号' Fir_sep 姓后面的分隔符,默认为Journal of Ecology格式,即句号' Peo_sep 人后面的分隔符,默认为Journal of Ecology格式,即逗号' has_brack 选择发表年份是否加括号Dim Str As StringDim year As IntegerDim Pub_year As StringStr = cell.Value' 确定发表时间在字符串中的位置year = 9999For i = 0 To 9t_year = Val(InStr(1, Str, CStr(i)))If t_year <> 0 Thenyear = min(year, t_year)End IfNext i' 确定发表时间的第一个字符位置Do While Mid(Str, year - 1, 1) >= "0" And Mid(Str, year - 1, 1) <= "9"year = year - 1LoopPub_year = Mid(Str, year, 4)Str = Mid(Str, 1, year - 1)' 寻找姓名Dim start As IntegerDim Name As StringDim Family As StringDim Result As StringDim Fir_fam As String'Dim next_start As Integer'Dim next_fir_fam As StringResult = ""start = have_char(Str)Do While startFir_fam = Mid(Str, start, ctrl_right(Str, start) - start + 1)' 原理:只要长度为1,就是名;长度超过1,就是姓If Len(Fir_fam) = 1 Then'next_start = have_char(Mid(Str, ctrl_right(Str, start) + 1))'next_fir_fam = Mid(Str, next_start, ctrl_right(Str, next_start) - next_start + 1)'If Len(next_fir_fam) = 1 Then  ' 之后还是名Result = Result + " " + Fir_fam + Fir_sepElseResult = Result + Peo_sep + " " + Fir_fam + Fam_sepEnd IfStr = Mid(Str, ctrl_right(Str, start) + 1)start = have_char(Str)Loop' 是否加年份括号Result = Mid(Result, 3)If (has_brack = True) ThenResult = Result + " (" + Pub_year + ")."ElseResult = Result + " " + Pub_year + "."End IfPeople_year = Result
End Function

Excel VBA参考文献中人名与年份格式转换相关推荐

  1. biblatex中如何修改参考文献中日期的著录格式

    biblatex中如何修改参考文献中日期的著录格式 日期是参考文献中重要著录项,因此通常具有一定格式要求.根据国标GB/T 7714-2015要求,不同日期具有不同的格式,比如: 引用日期通常由方括号 ...

  2. Excel VBA开发中数字签名的管理

    Excel 禁用无数字签署的宏 网上下载的Excel文件可能含有宏病毒,因此打开Excel文件时最好不要轻易启动宏,同时为了不让"启动宏"的提示每次出现,可以在Excel设置中提高 ...

  3. ESRI的Shapefile文件向Google Earth中KML文件的格式转换

    转载自http://wenku.baidu.com/link?url=3TG7c0cERbdnZwFBLq6n2v-chB-k4ja5ikNYSyRQHyLf4yvYCGBEGrlhch8GD5e-9 ...

  4. java date 转integer_java 中Date的各种格式转换

    把java.util.Date格式的时间转为java.sql.Date格式的时间 java.sql.Date sqldate = new java.sql.Date(date.getTime()); ...

  5. python日期格式转换_python中有关时间日期格式转换问题

    每次遇到pandas的dataframe某列日期格式问题总会哉坑,下面记录一下常用时间日期函数.... 1.字符串转化为日期 str->date import datetime date_str ...

  6. 开发中的各种时间格式转换(二)

    2.Java 时间日期格式转换 import java.util.*;import java.text.*;import java.util.Calendar;public class VeDate ...

  7. 开发中的各种时间格式转换(三)

    3.SQLServer数据库中 时间日期格式转换 1,sql语句中获取datetime的日期部分 .2,sql语句中 经常操作操作datetime类型数据.3.主要方法还是通过日期格式的转换来获取.如 ...

  8. vue 中常见的时间格式转换

    项目中后台返回的时间有多种形式,时间戳.ISO标准时间格式等,我们需要转化展示成能看的懂得时间格式: 将2022-05-27T14:20:27.000000Z 时间格式转换成 2022-05-27 1 ...

  9. Latex中图片编辑以及图片格式转换

    Latex是使用起来非常清爽的论文格式,但是Latex论文的图片插入总是让刚学的人十分头疼.在此我对图片的插入和图片格式的转换做一个总结. 图片编辑 插入图片 使用到的插入图片的宏包要在前面添加: \ ...

最新文章

  1. Spring MVC测试框架
  2. SQL Server存储过程(转载)
  3. javascript中not defined、undefined、null以及NaN的区别
  4. python网格搜索核函数_机器学习笔记——模型调参利器 GridSearchCV(网格搜索)参数的说明...
  5. Leetcode 6.Z 字形变换 (每日一题 20210630)
  6. ibatis返回结果映射到HashMap时,列名无效的问题
  7. linux下设置SMTP服务器并用mail命令发送邮件精解
  8. ROS☞rosbag/rostopic消息记录、回放、转.txt
  9. 开源监控软件 Hyperic 的两种插件
  10. Java语言程序设计 基础篇 原书第10版梁勇著 课后编程练习题答案1
  11. linux设置挂载服务端防火墙_「rpcbind」Linux下nfs+rpcbind实现服务器之间的文件共享(mount 挂载) - seo实验室...
  12. 精美注册界面模板 HTML+CSS样式
  13. android隐藏桌面图标
  14. HTTP POST 参数格式
  15. Node + WebSocket + Vue 聊天室创建群聊/加入群聊功能 – 第五章
  16. Navicat绘制数据库物理模型
  17. 前端知识之angular组件库之NG-ZORRO-ANTD结构窥探(一)components
  18. Nature综述:培养未被培养微生物的创新方法
  19. 2022 届互联网大厂秋招时间
  20. 切换VS当前登录TFS的账户

热门文章

  1. 【另类见解】秒杀并非高不可攀
  2. 美团高级技术专家:DDD 在旅游电商架构演进中的实践
  3. 微服务化后,这几点一定要注意
  4. 设计RPC接口时,你有考虑过这些吗?
  5. Kafka和RocketMQ底层存储之那些你不知道的事
  6. 海归技术大佬:硅谷科技公司到底牛在哪里?讲透“奈飞文化”8个原则!
  7. 又来搞事情了,这次女友让我研究如何实现一个文件系统
  8. Product Backlog:终极任务清单
  9. /* * 编程题第五题(20分): 本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印 ***** *** * *** ***** 所谓“
  10. crm开源系统 tp框架_thinkphp6学习教程与源码 tp6开源CMS系统源码研究