Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 1826|回复: 6

[已解决]求助各位大佬,在线等

[复制链接]
发表于 2015-10-16 21:37 | 显示全部楼层 |阅读模式
本帖最后由 skyhawkf119 于 2015-10-17 09:42 编辑

现有一堆文件存放在C:\data 目录,目录中有excel表 A列是当前目录中的文件名(1, 2,3),B列是分类名称(c1,c2, c3)
需要做的工作是通过excel表中的文件名搜索C:\data 目录是否有该文件,如果有,则将其拷贝到B列名称的文件夹(已手工在C:\data 目录创建好)中。如何实现?求大佬们赐教!本人是初学者。

感谢大神的热心帮助,附件是需要处理的文件内容,弱弱请教如何自动自动确定数据表中数据项数?



最佳答案
2015-10-17 07:22
  1. Sub 移动()
  2. Dim x
  3. Dim arr
  4. mypath = "c:\date"
  5. myfile = Dir(mypath & "*.xls")
  6. Do Until Len(myfile) = 0
  7.    arr = Range("a1:b3")
  8.    For x = 1 To UBound(arr)
  9.    If arr(x, 1) & ".xls" = myfile Then
  10.    FileCopy (mypath & arr(x, 1) & ".xls"), mypath & arr(x, 2) & "" & arr(x, 1) & ".xls"

  11.      Kill mypath & arr(x, 1) & ".xls"

  12.     End If
  13.     Next
  14.    
  15.     myfile = Dir
  16. Loop

  17. myfile = Dir(mypath & "*.xlsx")
  18. Do Until Len(myfile) = 0
  19.    arr = Range("a1:b3")
  20.    For x = 1 To UBound(arr)
  21.    If arr(x, 1) & ".xlsx" = myfile Then
  22.    FileCopy (mypath & arr(x, 1) & ".xlsx"), mypath & arr(x, 2) & "" & arr(x, 1) & ".xlsx"

  23.      Kill mypath & arr(x, 1) & ".xlsx"

  24.     End If
  25.     Next
  26.    
  27.     myfile = Dir '选中下一个文件
  28. Loop
  29. End Sub
复制代码
你那个有文件名的文件要放在C盘date目录之外,将代码放在该工作表内。

移动.rar

13.52 KB, 下载次数: 2

数据文件

发表于 2015-10-16 22:45 | 显示全部楼层
回复

使用道具 举报

发表于 2015-10-16 22:47 | 显示全部楼层
你要不要把那个目录表发过来看一下,另外,好像还要知道你的excel文件名的后缀吧
回复

使用道具 举报

发表于 2015-10-17 07:22 | 显示全部楼层    本楼为最佳答案   
  1. Sub 移动()
  2. Dim x
  3. Dim arr
  4. mypath = "c:\date"
  5. myfile = Dir(mypath & "*.xls")
  6. Do Until Len(myfile) = 0
  7.    arr = Range("a1:b3")
  8.    For x = 1 To UBound(arr)
  9.    If arr(x, 1) & ".xls" = myfile Then
  10.    FileCopy (mypath & arr(x, 1) & ".xls"), mypath & arr(x, 2) & "" & arr(x, 1) & ".xls"

  11.      Kill mypath & arr(x, 1) & ".xls"

  12.     End If
  13.     Next
  14.    
  15.     myfile = Dir
  16. Loop

  17. myfile = Dir(mypath & "*.xlsx")
  18. Do Until Len(myfile) = 0
  19.    arr = Range("a1:b3")
  20.    For x = 1 To UBound(arr)
  21.    If arr(x, 1) & ".xlsx" = myfile Then
  22.    FileCopy (mypath & arr(x, 1) & ".xlsx"), mypath & arr(x, 2) & "" & arr(x, 1) & ".xlsx"

  23.      Kill mypath & arr(x, 1) & ".xlsx"

  24.     End If
  25.     Next
  26.    
  27.     myfile = Dir '选中下一个文件
  28. Loop
  29. End Sub
复制代码
你那个有文件名的文件要放在C盘date目录之外,将代码放在该工作表内。
回复

使用道具 举报

 楼主| 发表于 2015-10-17 09:44 | 显示全部楼层
本帖最后由 skyhawkf119 于 2015-10-17 09:54 编辑
高 发表于 2015-10-17 07:22
你那个有文件名的文件要放在C盘date目录之外,将代码放在该工作表内。

已上传数据表,请大神看,我自己改了一下您提供的代码,可用,弱弱问,如何自动识别需要处理数据表数据项数呢?目前是设定了a1:b3。还有一种情况是表中的文件名,在数据目录里面可能没有,这个在代码中怎么处理呢?

回复

使用道具 举报

发表于 2015-10-17 10:57 | 显示全部楼层
Sub 移动()
    Dim x
    Dim arr
    On Error Resume Next
    mypath = ThisWorkbook.Path & "\data\"
    arr = Range("a1:b" & Range("b" & Cells.Rows.Count).End(xlUp).Row)
    For x = 1 To UBound(arr)
        Name mypath & arr(x, 1) & ".pdf" As mypath & arr(x, 2) & "\" & arr(x, 1) & ".pdf"
    Next x
End Sub


就这几句就行了。凡是表中不存在的文件不会移动,凡是符合移动条件的都会移至对应的位置。

点评

学习as了。  发表于 2015-10-17 22:54

评分

参与人数 1 +1 收起 理由
skyhawkf119 + 1

查看全部评分

回复

使用道具 举报

发表于 2015-10-17 11:00 | 显示全部楼层
要想移动其他类型的,修改
Name mypath & arr(x, 1) & ".pdf" As mypath & arr(x, 2) & "\" & arr(x, 1) & ".pdf"
这句中的文件后缀名就行了。

评分

参与人数 1 +1 收起 理由
skyhawkf119 + 1

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-19 23:14 , Processed in 0.363836 second(s), 20 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表