将数据从excel文件复制粘贴到另一个文件,并更改格式

将数据从excel文件复制粘贴到另一个文件,并更改格式,excel,vba,Excel,Vba,我在excel文件中有一个特定列,其中日期为以下格式: 202010 -->表示年份和月份。 我想将其复制到另一个工作簿中,但将一列中的月份(10)和下一列中的年份(2020)分开。 并在第3列中添加以下格式的值:01/10/2020 我一直在努力解决这个问题,我尝试了很多不同的方法,但没有一种方法能达到我想要的效果。 你能帮我点个火吗 谢谢 分割日期 调整常量部分中的值 假设源列包含格式为yyyyym或yyyyym的有效数据,或者在不进行转换时包含少于5个或多于6个字符的“无效”数据 s-源

我在excel文件中有一个特定列,其中日期为以下格式: 202010 -->表示年份和月份。

我想将其复制到另一个工作簿中,但将一列中的月份(10)和下一列中的年份(2020)分开。 并在第3列中添加以下格式的值:01/10/2020

我一直在努力解决这个问题,我尝试了很多不同的方法,但没有一种方法能达到我想要的效果。 你能帮我点个火吗

谢谢

分割日期
  • 调整常量部分中的值
  • 假设源列包含格式为
    yyyyym
    yyyyym
    的有效数据,或者在不进行转换时包含少于5个或多于6个字符的“无效”数据
  • s-源,d-目的地
选项显式
分拆日期()
Const sName As String=“Sheet1”
Const sFirst As String=“A2”
Const dFirst As String=“A2”
将wb设置为工作簿:设置wb=ThisWorkbook包含此代码的工作簿
'定义源列范围。
变暗srg As范围
带wb.工作表(sName).范围(sFirst)
设置srg=.Resize(.workeep.Rows.Count-.Row+1)_
.Find(“*”,xlFormulas,,xlPrevious)
如果srg为空,则退出Sub
设置srg=.Resize(srg.Row-.Row+1)
以
Dim rCount尽可能长:rCount=srg.Rows.Count
'将值从源列范围写入数据数组。
作为变量的Dim数据
如果rCount=1,则
重拨数据(1对1,1对1):数据(1,1)=开关量值
其他的
数据=srg.值
如果结束
'调整数据数组的大小。
ReDim保留数据(1到rCount,1到3)
'声明其他变量
变暗,变长
作为字符串的Dim sValue
暗淡如长
暗数月长
'将结果值写入(调整大小的)数据数组。
对于r=1,则为rCount
如果Len(sValue)>4且Len(sValue)<7,则
S值=CStr(数据(r,1))
dMonth=CLng(右(S值,Len(S值)-4))
dYear=CLng(左(S值,4))
数据(r,1)=每月数
数据(r,2)=r
数据(r,3)=日期序列(dYear,d月,1)
如果结束
下一个r
'将值从数据数组写入目标范围。
使用工作簿。添加。工作表(1)。范围(dFirst)。调整大小(rCount,3)
'如果日期分隔符是点,则使用“dd\/mm\/yyy”。
.Columns(3).NumberFormat=“dd/mm/yyyy”
.值=数据
.全自动装配
使用.Worksheet.Parent的目标工作簿
.Saved=True“仅用于测试时轻松关闭。
“Application.DisplayAlerts=False”未经确认即覆盖
“.SaveAs”C:\Test\Dest.xlsx“,xlOpenXMLWorkbook
'Application.DisplayAlerts=True
'关闭错误
以
以
端接头

假设202010位于单元格A1中

公式:
=日期(左(A1,4),右(A1,左(A1)-4),1)

VBA:


把它拆开,你就可以看到我是如何构造日期的,你应该能够计算出年和月的代码形式。

你可以用公式来计算,不需要VBA,对吧?这非常有效!非常感谢你!谢谢你,丹!公式是有效的,但VBA对我更有效!
Format("01/" & right(Range("A1").Text,len(Range("A1").Text)-4) & "/" & left(Range("A1").Text,4),"DD/MM/YYYY")