关于利用EXCEL VBA 获取单元格地址、选取、复制、分列到其它工作薄中以及遍布文件夹的操作

1.EXCEL VBA遍布文件夹的操作

关于VBA遍历文件夹主要用的是提供的Application.FileDialo函数来由个人进行自由选择,通过获取选择的文件夹地址之后,通过Dir函数来匹配选取文件夹下的相应的文档。相应的VBA程序代码如下:

   Dim sel_Path As String   '//定义一个选择的文件夹
   Dim MyFile As String    '//文件夹中符合条件的文件
  
    '//选取相应的文件夹
    With Application.FileDialog(msoFileDialogFolderPicker)
        
        .Title = "请选择文件夹"
        
        If .Show = -1 Then
           sel_Path = .SelectedItems(1)       '//所选择的文件夹路径
        Else
            MsgBox "已取消操作!"
            Exit Sub
        End If
        
   End With
   
  Dim sel_PathFullName As String                            '定义一个文件的全路径名称
    
   MyFile = Dir(sel_Path & "\" & "*.csv")

2.关于单元格地址的获取

在写VBA的过程中,对于单元格地址的获取至关重要,它直接决定了能否完成正确的完成相应的操作。获取单元格地址主要有以下几种方法:

2.1          以下几种获取结果如注释所示

   F_Max_Range = ActiveCell.Address()           '获得单元格的地址,形式为$A$1
   F_Max_Range = ActiveCell.Address(0, 0)       '获得单元格的地址,形式为A1
   F_Max_Range = ActiveCell.Address(0, 1)       '获得单元格的地址,形式为$A1
   F_Max_Range = ActiveCell.Address(1, 0)       '获得单元格的地址,形式为A$1
   F_Max_Range = ActiveCell.Address(1, 1)       '获得单元格的地址,形式为$A$1

         2.2        以变量的形式获取单元格地址

以获取最后一列的最后一个单元格的地址为例:首先需要获取获取最后一列的地址,再得到总的行数,将以上两种结果进行拼接,即得出最后一列的最后一个单元格的地址。相应的关键代码如下:

Num_Col = Wb.Worksheets(2).UsedRange.Columns.count          '总的列数
Row_Col = Wb.Worksheets(2).UsedRange.Rows.count             '总的行数

Add_Max_Col = Split(Cells(1, Num_Col).Address, "$")(1)      '获得最后一列的地址

Range_Add_Max_Col = Add_Max_Col & "1"                       '最后一列的第一个单元格的地址
Range_Add_Max_Row = Add_Max_Col & Row_Col                   '最后一列的最后一个单元格的地址

 2.3           关于单元格的偏移

单元格偏移主要用到的函数是Offset,如偏移1个和2个单元格的关键代码:

  F_Max_Range = ActiveCell.Offset(0, 1).Address(0, 0)
  S_Max_Range = ActiveCell.Offset(0, 2).Address(0, 0)

        2.4            关于选择多个单元格

选择多个单元格要注意单元格之间的拼接格式,要注意中间的“:”,如对以上F_Max_Range 到 S_Max_Range单元格的选择的关键代码:

Wb.Worksheets(2).Range(F_Max_Range & ":" & S_Max_Range).Select

3.关于复制和粘贴

复制和粘贴极大的简化了我们的工作,VBA的复制主要通过copy函数来实现,粘贴主要通过Paste来实现。要注意复制和粘贴之前 一定要选中所要复制的列。即select。关键代码:

'提取出相应的列到sheet2表中

Dim sel_col As String          '定义需要操作的列
sel_col = Workbooks("遍历文件夹中的csv文件(处理带逗号的VBA程序)").Worksheets(1).Range("B2").Value

sel_col = Mid(sel_col, InStr(sel_col, ":") + 1)

Wb.Worksheets(1).Range(sel_col).Select
Selection.Copy
Wb.Sheets.Add After:=ActiveSheet

Wb.Worksheets(2).Select
ActiveSheet.Paste

4 完全代码:

本完全代码实现了遍历相应文件夹下的所有EXCEL(CSV)文件,并复制相应的列到另一个sheet中。另外还有分列、绘图操作。关于EXCEL原文件暂不上传,读者可以根据需要进行相应的简单的修改即可。

'//遍历文件夹部分,并选中相应的csv文件
    
    Dim sel_Path As String   '//定义一个选择的文件夹
    Dim MyFile As String    '//文件夹中符合条件的文件
    Dim count As Integer   '//一共操作文件的数目
    
    '//选取相应的文件夹
    With Application.FileDialog(msoFileDialogFolderPicker)
        
        .Title = "请选择文件夹"
        
        If .Show = -1 Then
           sel_Path = .SelectedItems(1)       '//所选择的文件夹路径
        Else
            MsgBox "已取消操作!"
            Exit Sub
        End If
        
   End With
      
   '//创建一个新的文件夹用来保存数据处理的结果
      On Error Resume Next
   Dim Save_Path_Name As String
   Save_Path_Name = sel_Path & "\" & "文件处理结果"
   VBA.MkDir (sel_Path & "\" & "文件处理结果")
  
  Dim sel_PathFullName As String                            '定义一个文件的全路径名称
  Dim Wb As Workbook                                        '定义一个要操作的工作薄
    
    MyFile = Dir(sel_Path & "\" & "*.csv")
    
    '读入文件夹中的第一个.csv文件

   Do While MyFile <> ""
    
    count = count + 1        '记录文件的个数
    
    sel_PathFullName = sel_Path & "\" & MyFile             '相应文件夹下的符合条件的csv文件
        
   'sel_PathFullName = Application.GetOpenFilename            '自定义文件的路径
    Set Wb = Workbooks.Open(sel_PathFullName)                 '打开所选择的文件
   'ActiveWindow.Visible = False                               静默打开并不能读取文件

'提取出相应的列到sheet2表中

Dim sel_col As String          '定义需要操作的列
sel_col = Workbooks("遍历文件夹中的csv文件(处理带逗号的VBA程序)").Worksheets(1).Range("B2").Value

sel_col = Mid(sel_col, InStr(sel_col, ":") + 1)

Wb.Worksheets(1).Range(sel_col).Select
Selection.Copy
Wb.Sheets.Add After:=ActiveSheet

Wb.Worksheets(2).Select
ActiveSheet.Paste

Dim F_Numcol As Long                '第一次复制后数据的列的数目
Dim F_Add_Max_Col As String         '第一次复制后最后一列的地址

F_Numcol = Wb.Worksheets(2).UsedRange.Columns.count
'选中最后一列
Wb.Worksheets(2).Columns(F_Numcol).Select
F_Add_Max_Col = Split(Cells(1, F_Numcol).Address, "$")(1) & "1"       '获得最后一列的地址

'对列进行分列处理
        Selection.TextToColumns Destination:=Range(F_Add_Max_Col), DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
        Semicolon:=False, Comma:=True, Space:=False, Other:=True, OtherChar:= _
        "[", TrailingMinusNumbers:=True

Dim Num_Col As Long               '找出表中的最后一列
Dim Row_Col As Long               '找出表中的最后一行
Dim Add_Max_Col As String         '最后一列的地址
Dim Range_Add_Max_Col As String   '定义最后一列的第一个单元格的地址
Dim Range_Add_Max_Row As String   '定义最后一行的第一个单元格的地址

Num_Col = Wb.Worksheets(2).UsedRange.Columns.count          '总的列数
Row_Col = Wb.Worksheets(2).UsedRange.Rows.count             '总的行数

Add_Max_Col = Split(Cells(1, Num_Col).Address, "$")(1)      '获得最后一列的地址

Range_Add_Max_Col = Add_Max_Col & "1"                       '最后一列的第一个单元格的地址
Range_Add_Max_Row = Add_Max_Col & Row_Col                   '最后一列的最后一个单元格的地址

'选中最后一列
Wb.Worksheets(2).Columns(Num_Col).Select

'对分列出的最后一列进行分列,从而删除"]"字符
 Selection.TextToColumns Destination:=Range(Range_Add_Max_Col), DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
        Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
        :="]", TrailingMinusNumbers:=True
        
 '获得最后一个单元格右边的一个单元格并给其赋值V1
  Wb.Worksheets(2).Range(F_Add_Max_Col).Select
  
    '最后一个单元格右边的一个单元格的地址
  
   Dim F_Max_Range  As String
   Dim S_Max_Range  As String

'   F_Max_Range = ActiveCell.Address()           '获得单元格的地址,形式为$A$1
'   F_Max_Range = ActiveCell.Address(0, 0)       '获得单元格的地址,形式为A1
'   F_Max_Range = ActiveCell.Address(0, 1)       '获得单元格的地址,形式为$A1
'   F_Max_Range = ActiveCell.Address(1, 0)       '获得单元格的地址,形式为A$1
'   F_Max_Range = ActiveCell.Address(1, 1)       '获得单元格的地址,形式为$A$1

   F_Max_Range = ActiveCell.Offset(0, 1).Address(0, 0)
   S_Max_Range = ActiveCell.Offset(0, 2).Address(0, 0)
'   F_Max_Range = Split(ActiveCell.Offset(0, 1).Address, "$")(1) & "1"
'   S_Max_Range = Split(ActiveCell.Offset(0, 2).Address, "$")(1) & "1"
   
  ActiveCell.Offset(0, 1).Value = "V1"
  ActiveCell.Offset(0, 2).Value = "V2"
  
   '给分列之后的数据定义一个标签
  Wb.Worksheets(2).Range(F_Max_Range & ":" & S_Max_Range).Select
    Selection.AutoFill Destination:=Wb.Worksheets(2).Range(F_Max_Range & ":" & Range_Add_Max_Col), Type:=xlFillDefault  

'按时间排序
   Wb.Worksheets(2).Sort.SortFields.Clear
   Wb.Worksheets(2).Sort.SortFields.Add Key:=Range("A1"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With Wb.Worksheets(2).Sort
        .SetRange Range("A2:" & Range_Add_Max_Row)
        .Header = xlNo
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    
    '添加图表:选中数据源
    Wb.Worksheets(2).Range(F_Max_Range).Select
    Wb.Worksheets(2).Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
    ActiveSheet.Shapes.AddChart2(227, xlLine).Select
    
    '更改图片的大小
    ActiveSheet.Shapes(1).ScaleWidth 1.6, msoFalse, _
        msoScaleFromBottomRight

    ActiveSheet.Shapes(1).ScaleHeight 1.8, msoFalse, _
        msoScaleFromBottomRight
           
  Wb.Worksheets(2).Range("A1").Select
  
'将文件另存为Excel文件
Dim L As Long
Dim Exc_str As String
L = Len(MyFile) - 3
Exc_str = Save_Path_Name & "\" & Mid(MyFile, 1, L) + "xlsx"

Dim FS As Object
Set FS = CreateObject("Scripting.FileSystemObject")
'//判断文件是否存在
  If FS.FileExists(Exc_str) Then
  
     Ans = MsgBox(Mid(MyFile, 1, L) + "xlsx" & "文件已经存在,是否覆盖现有文件", vbYesNo)
     
      If Ans = vbYes Then
      
       Kill Exc_str      '//删除存在的文件
           
        ActiveWorkbook.SaveAs Filename:=Exc_str, FileFormat:= _
         xlOpenXMLWorkbook, CreateBackup:=False

      End If
      
 Else
 
      ActiveWorkbook.SaveAs Filename:=Exc_str, FileFormat:= _
         xlOpenXMLWorkbook, CreateBackup:=False
         
 End If

 Wb.Close SaveChanges:=False    '关闭文件
 
  '第二次读入的时候不用写参数
        MyFile = Dir
        If MyFile = "" Then
            MsgBox "一共操作了" & count & " 个csv文件!"
            Exit Do         '当MyFile为空的时候就说明已经遍历完了,这时退出Do,否则还要运行一遍
        End If

    Loop

遇见不易,欢迎留言评论,共同学习,共同进步,让工作变得更轻松。

  • 8
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目 录 一、 基本方法 7 1. 快速选中全部工作表 7 2. 快速启动EXCEL 7 3. 快速删除选定区域数据 8 4. 给单元格重新命名 8 5. 在EXCEL中选择整个单元格范围 9 6. 快速移动/复制单元格 9 7. 快速修改单元格式次序 9 8. 彻底清除单元格内容 10 9. 选择单元格 10 10. 为工作表命名 11 11. 一次性打开多个工作簿 11 12. 快速切换工作簿 13 13. 选定超级链接文本(微软OFFICE技巧大赛获奖作品) 13 14. 快速查找 14 15. 修改默认文件保存路径 14 16. 指定打开的文件夹 15 17. 在多个EXCEL工作簿间快速切换 15 18. 快速获取帮助 16 19. 创建帮助文件的快捷方式 16 20. 双击单元格某边移动选定单元格 16 21. 双击单元格某边选取单元格区域 17 22. 快速选定不连续单元格 17 23. 根据条件选择单元格 17 24. 复制或移动单元格 18 25. 完全删除EXCEL中的单元格 18 26. 快速删除空行 19 27. 回车键的粘贴功能 19 28. 快速关闭多个文件 20 29. 选定多个工作表 20 30. 对多个工作表快速编辑 20 31. 移动和复制工作表 21 32. 工作表的删除 21 33. 快速选择单元格 21 34. 快速选定EXCEL区域(微软OFFICE技巧大赛获奖作品) 22 35. 备份工件簿 22 36. 自动打开工作簿 23 37. 快速浏览长工作簿 23 38. 快速删除工作表中的空行 23 39. 绘制斜线表头 24 40. 绘制斜线单元格 25 41. 每次选定同一单元格 26 42. 快速查找工作簿 26 43. 禁止复制隐藏行或列中的数据 27 44. 制作个性单元格 27 一、 数据输入和编辑技巧 28 45. 在一个单元格内输入多个值 28 46. 增加工作簿的页数 28 47. 奇特的F4键 29 48. 将格式化文本导入EXCEL 29 49. 快速换行 30 50. 巧变文本为数字 30 51. 在单元格中输入0值 31 52. 将数字设为文本格式 32 53. 快速进行单元格之间的切换(微软OFFICE技巧大赛获奖作品) 32 54. 在同一单元格内连续输入多个测试值 33 55. 输入数字、文字、日期或时间 33 56. 快速输入欧元符号 34 57. 将单元格区域从公式转换成数值 34 58. 快速输入有序文本 34 59. 输入有规律数字 35 60. 巧妙输入常用数据 36 61. 快速输入特殊符号 36 62. 快速输入相同文本 37 63. 快速给数字加上单位 38 64. 巧妙输入位数较多的数字 39 65. 将WPS/WORD表格转换为EXCEL工作表 39 66. 取消单元格链接 40 67. 快速输入拼音 40 68. 插入“√” 41 69. 按小数点对齐 41 70. 对不同类型的单元格定义不同的输入法 41 71. 在EXCEL中快速插入WORD表格 42 72. 设置单元格字体 43 73. 在一个单元格中显示多行文字 43 74. 将网页上的数据引入到EXCEL表格 43 75. 取消超级链接 44 76. 编辑单元格内容 44 77. 设置单元格边框 45 78. 设置单元格文本对齐方式 45 79. 输入公式 46 80. 输入人名时使用“分散对齐”(微软OFFICE技巧大赛获奖作品) 46 81. 隐藏单元格中的所有值(微软OFFICE技巧大赛获奖作品) 46 82. 恢复隐藏列 47 83. 快速隐藏/显示选中单元格所在行和列(微软OFFICE技巧大赛获奖作品) 47 84. 彻底隐藏单元格 48 85. 用下拉列表快速输入数据 48 86. 快速输入自定义短语 49 87. 设置单元格背景色 50 88. 快速在多个单元格中输入相同公式 50 89. 同时在多个单元格中输入相同内容 50 90. 快速输入日期和时间 51 91. 将复制单元格安全地插入到现有单元格之间 51 92. 在EXCEL中不丢掉列标题的显示 52 93. 查看与日期等效的序列数的值 52 94. 快速复制单元格内容 53 95. 使用自定义序列排序(微软OFFICE技巧大赛获奖作品) 53 96. 快速格式化EXCEL单元格 53 97. 固定显示某列 54 98. 在EXCEL中快速编辑单元格 54 99. 使用自动填充快速复制公式和格式 55 100. 为单元格添加批注 56 101. 数据自动输入 56 102. 在EXCEL中快速计算一个人的年龄 57 103. 快速修改单元格次序 57 104. 将网页上的数据引入到EXCEL表格中 58 一、 图形和图表编辑技巧 58 105. 在网上发布EXCEL生成的图形 58 106. 创建图表连接符 59 107. 将EXCEL单元格转换成图片形式插入到WORD中 60 108. 将WORD内容以图片形式插入到EXCEL表格中 61 109. 将WORD中的内容作为图片链接插入EXCEL表格中 61 110. 在独立的窗口中处理内嵌式图表 62 111. 在图表中显示隐藏数据 62 112. 在图表中增加文本框 63 113. 建立文本与图表文本框的链接 63 114. 给图表增加新数据系列 64 115. 快速修改图表元素的格式 65 116. 创建复合图表 65 117. 对度量不同的数据系列使用不同坐标轴 66 118. 将自己满意的图表设置为自定义图表类型 66 119. 复制自定义图表类型 67 120. 旋转三维图表 67 121. 拖动图表数据点改变工作表中的数值 68 122. 把图片合并进你的图表 68 123. 用图形美化工作表 70 124. 让文本框与工作表网格线合二为一 71 125. 快速创建默认图表 71 126. 快速创建内嵌式图表 71 127. 改变默认图表类型 72 128. 快速转换内嵌式图表与新工作表图表 72 129. 利用图表工具栏快速设置图表 73 130. 快速选取图表元素 74 131. 通过一次按键创建一个EXCEL图表 75 132. 绘制平直直线 75 一、 函数和公式编辑技巧 75 133. 巧用IF函数清除EXCEL工作表中的0 75 134. 批量求和 76 135. 对相邻单元格的数据求和 77 136. 对不相邻单元格的数据求和 78 137. 利用公式来设置加权平均 79 138. 自动求和 79 139. 用记事本编辑公式 80 140. 防止编辑栏显示公式 80 141. 解决SUM函数参数中的数量限制 81 142. 在绝对与相对单元引用之间切换 81 143. 快速查看所有工作表公式 82 144. 实现条件显示 82 一、 数据分析和管理技巧 83 145. 管理加载宏 83 146. 在工作表之间使用超级连接 84 147. 快速链接网上的数据 85 148. 跨表操作数据 86 149. 查看EXCEL中相距较远的两列数据 86 150. 如何消除缩位后的计算误差(微软OFFICE技巧大赛获奖作品) 87 151. 利用选择性粘贴命令完成一些特殊的计算 87 152. WEB查询 88 153. 在EXCEL中进行快速计算 89 154. 自动筛选前10个 89 155. 同时进行多个单元格的运算(微软OFFICE技巧大赛获奖作品) 90 156. 让EXCEL出现错误数据提示 91 157. 用“超级连接”快速跳转到其它文件 92 一、 设置技巧 92 158. 定制菜单命令 92 159. 设置菜单分隔线 93 160. 备份自定义工具栏 93 161. 共享自定义工具栏 94 162. 使用单文档界面快速切换工作簿 94 163. 自定义工具栏按钮 95
VBA Excel中,可以使用Range对象的Value属性来获取单元格的值。例如,要获取A1单元格的值,可以使用以下代码: ```vba Dim cellValue As Variant cellValue = Range("A1").Value ``` 在这个例子中,将A1单元格的值存储在变量cellValue中。你可以根据需要将其用于其他操作或输出。 引用\[3\]中提到,单元格对象的Value属性为单元格实际存储的值。当单元格中存有公式时,Value属性为公式运行后的结果值。因此,如果A1单元格中包含公式,那么获取的值将是公式运行后的结果。 请注意,这只是获取单个单元格的值的方法。如果你需要获取多个单元格的值,可以使用循环结构来遍历单元格范围并逐个获取值,就像引用\[1\]和引用\[2\]中的示例代码一样。 #### 引用[.reference_title] - *1* *2* [excelVBA获取指定单元格内容](https://blog.csdn.net/u010719791/article/details/121526472)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Excel 2010 VBA 入门 026 读取单元格的值和显示的值](https://blog.csdn.net/ngbshzhn/article/details/115398153)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值