中企动力 > 商学院 > vba读取excel
  • ?

    VBA代码之九:如何利用VBA代码进行选择操作

    雨寒

    展开

    今日和大家分享VBA的实用语句之九,这节主要是讲解选择的方法在VBA中的实现方法,如果在EXCEL中主要轻点鼠标就可以实现,那么在VBA中是如何实现的呢?我们看下面的代码。

    1 Sheets("BBC").Activate.

    语句说明:执行上述代码后,选择一个名为"BBC"的工作表:

    备注:在工作表的操作时可以用select.

    2 Range("A1").Select

    语句说明:执行上述代码后,选择一个名为" A1"的单元格:

    备注:RANGE是单元格,也可以用CELLS(M,N)来代替,其中M是行,N是列。

    3 Range("A1:G8").Select

    语句说明:执行上述代码后,选择"A1:G8"的连续单元格:

    选择不连续的单元格:

    Range("A1,B6,D9").Select

    Range("A1,B6:B10,D9").Select

    语句说明:执行上述代码后,选择不连续单元格:"A1,B6,D9","A1,B6:B10,D9"

    备注:CELLS()的单元格表示方式是不能用这种表示方法的。

    4 Cells.Select

    语句说明:执行上述代码后,选择整个工作表:

    备注:注意select和selection的区别。

    5 Range("A1").CurrentRegion.Select

    语句说明:执行上述代码后,选择当前单元格所在的区域(遇到空行/空列即止):

    备注:CurrentRegion的意义是区域,CurrentRegion属性返回代表当前区域的Range对象。当前区域是指包含有当前单元格的由空行和空列围绕组成的区域。在该区域中,必须保证区域中的每一行或列中至少有一个存在数据的单元格。 但是,该属性在受保护的工作表中无效。如何理解上面“由空行和空列围绕组成的区域”呢?我们看下面的实例:

    代码:

    现在有下面的区域:、

    执行代码后:

    上面深色区域是选择后的区域。它是由空格包围的。

    6 Rows("1").Select

    Columns("A").Select

    或者:

    ActiveCell.EntireRow.Select

    ActiveCell.EntireColumn.Select

    语句说明:执行上述代码后,选择行或列。

    7 Columns("A:C").Select

    Rows("1:5").Select

    语句说明:执行上述代码后,选择选择相邻的多行/多列:

    备注:使用"Columns/Rows":要注意和下面第八点的区别。

    8 Range("A:A, C:C, E:F").Select

    Range("1:1,5:6,9:9").Select

    语句说明:执行上述代码后,选择不相邻的多行/多列:

    备注:和选择相邻的多行/多列不同,使用"Range"而不是"Columns/Rows"

    9 Range("A1", Range("A1").End(xlDown)).Select

    Range(ActiveCell, ActiveCell.End(xlDown)).Select

    语句说明:执行上述代码后选择当前活动单元格向下至最后一个非空单元格:

    备注:注意理解End(xlDown)的意义,相当于CTRL+END

    今日回向:

    1 选择包括哪些内容?

    2 如何理解CurrentRegion属性?

  • ?

    如何保存含宏指令(VBA代码)的Excel工作簿

    Eirene

    展开

    宏指的是一段操作指令,它也属于VBA的一种。通常情况下,在使用Excel处理数据时,如果碰到需要进行较多的重复性操作,可以通过录制宏命令来,将这些操作指令记录下来,然后让Excel傻瓜式的运行这些指令,即可实现化繁为简,在提高工作效率的同时还能保证质量的稳定,这就是为啥有些人在处理重复性操作时,是那么的得心应手,而有的人却是那么举步维艰,叫苦连天。除此之外,Excel还赋予了使用者极大的操作灵活性,使用者可以自己编辑VBA代码,实现一些Excel本身常规操作无法实现的功能,如拼图游戏等。当需要的代码指令已经录制好或编辑好之后,又该如何将它们保存下来以便下次操作使用呢?本教程将介绍几种方法帮你轻松搞定这一点。

    用最小的代价得到最好的东西

    1、对于一些仅含简单录制宏指令的Excel电子表格,可以直接单击Excel快速访问工具栏中的保存命令(保存命令快捷键为Ctrl+S)进行保存,此时的Excel工作簿的后缀名为xlsx。

    保存含宏指令技巧

    2、可以将含有宏指令的工作表另存为启用宏的Excel工作簿,具体操作是单击Excel界面菜单栏中的文件命令,然后找到另存为下的启用宏的Excel工作簿命令,单击该命令,设置保存路径即可实现宏指令的保存,此时文件的后缀名为xlsm。此方法保存的文件适用于不低于保存版本的Excel软件。

    复杂事情轻松应对

    3、考虑到Excel向下兼容的特性,如果想让宏代码文件通用于Excel各个版本,建议将含宏指令的工作簿保存成低版本,即Excel97-2003工作簿。具体操作是,单击另存为下的Excel 97-2003命令,然后选择保存路径即可,该方法保存的文件后缀名为xls。

    保存宏指令文件的后缀名差异

  • ?

    Excel 打开时提示需要VBA的宏语言支持时怎么回事

    霜如影

    展开

    因为文档中有宏,开启宏就可以了,操作方法如下:

    1.打开office excel 2013,鼠标单击“文件”。

    2.鼠标单击“选项”。

    3.鼠标单击“信息中心”。

    4.单击“信息中心设置”。

    5.选择”宏设置“------启用所有宏”。


    6.鼠标单击“确定”。宏启用完成。

    (本文内容由百度知道网友茗童贡献)

  • ?

    python操作Excel,相比VBA你更喜欢哪个

    Winola

    展开

    大家都知道在excel中用VBA代码可以解决很多批处理操作问题,因为VBA是excel原生脚本语言,所以在便利性上有着得天独厚的优势,只要你电脑有excel,那么就可以立刻使用这个VBA脚本代码来解决问题。其实除了vba还有很多脚本语言可以来操作excel,比如python脚本。

    python跟vba一样都是脚本类语言,只不过python的用途更广些,而且代码好看些。由于是独立的程序,需要单独安装,这个有些麻烦,除此之外,如果你掌握好了相关的知识之后完全可以用他来任意处理excel文档。

    下面说一下在windows系统上,如何使用python来连接操作excel文档。

    首先要从python官网下载python主程序,安装好后,然后下载连接excel的接口模块程序pywin32,进行安装,2个步骤完成之后,就可以打开python shell界面,进行代码输入了。我这里使用的python版本是2.7,这个看自己的习惯喜好了。

    python excel

    小实例:在d盘的test.xls文档单元格A1中输入内容

    >>> import win32com.client #加载pywin32模块

    >>> xl=win32com.client.Dispatch("Excel.Application") #建立连接EXCEL程序的对象xl

    >>> book=xl.Workbooks.Open("d:\\test.xls") #用xl打开d盘下的test.xls工作簿

    >>> book.worksheets(1).cells(1,1).Value="输入的内容" #在工作簿的第一个表格第一个单元格输入内容

    >>> book.Save() #保存工作簿

    >>> book.Close() #关闭工作簿

    python excel

    请点击此处输入图片描述

    一步一步运行完之后(当然也可以保存成脚本文件运行),用鼠标打开d盘下的test.xls文件,就可以看到刚刚输入的内容了。

    python excel

    请点击此处输入图片描述

  • ?

    excel办公小技巧:vba使用sql语句获取excel表格数据教程

    Mu

    展开

    在excel办公中,用VBA加上SQL语句实现对excel表格的数据获取,对于处理一些大数据量的表格来说是非常实用的。SQL是结构化查询语言,是数据库开发中用的程序设计语言,数据库里的数据表跟EXCEL里的表格其实是很类似的,所以用VBA加SQL语句可以实现类似的表格查询操作。

    举个例子:在EXCEL里用VBA+SQL来查询总成绩大于290分的学生

    一、手工操作的步骤是:

    1、 EXCEL打开如下表格,点击插入-数据透视图,点击创建数据透视图

    2、 在出现的数据透视图界面,点击姓名为行标签,点击成绩为求和项字段

    3、 在左侧的出现的行标签和求和项表格数据进行排序,手工选出成绩大于290分的记录。

    用上面的数据透视图方法很方便,步骤也少,比分类汇总功能要简便些。

    二、VBA加上SQL语句实现EXCEL表格数据的查询

    1、 先用EXCEL打开表格,调出VBE工程界面(ALT+F11),建议在个人工作簿新建个模块,把代码输入到右侧的区域。注:用个人工作簿的好处是,每次启动EXCEL不用手动启用宏。

    2、 根据自己的表格字段和功能需求,修改好SQL代码后,保存按F5快捷键运行。注:SQL语句中表名要用[表名$]这种写法。

    以上是在EXCEL用VBA加SQL语句实现对表格的自动查询,调用的方法是按ALT+F8,选择相应的代码名称,这里的名称是SQL查询。用这种方法对于规则不经常变动的情况下使用很实用,特别是在数据量大的情况下。

    附上截图代码

    Sub SQL查询()

    Dim cnn As Object, rs As Object, SQL As String

    Set cnn = CreateObject("adodb.connection") '创建数据库连接

    cnn.Open "Provider=Microsoft.jet.OLEDB.4.0;Extended Properties=Excel 8.0;Data Source=" & ActiveWorkbook.FullName

    Set rs = CreateObject("adodb.recordset") '创建一个数据集

    SQL = "select 姓名,sum(成绩) from [原始数据$] group by 姓名 HAVING sum(成绩)>290" '设置SQL查询语句,这个根据实际需要改写,注意【表名$】这种写法

    Set rs = cnn.Execute(SQL) '执行查询

    ActiveWorkbook.Worksheets(2).Cells.ClearContents

    Dim i As Integer

    For i = 1 To rs.Fields.Count

    ActiveWorkbook.Worksheets(2).Cells(1, i) = rs.Fields(i - 1).Name '填写标题到表2

    Next

    ActiveWorkbook.Worksheets(2).Range("a2").CopyFromRecordset rs '复制记录集到表2

    rs.Close

    Set rs = Nothing

    cnn.Close

    Set cnn = Nothing

    End Sub

    对于EXCEL2007版本的电子表格,以上的cnn.Open后的字符串要改成"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ActiveWorkbook.FullName & ";Extended Properties=""Excel 12.0;HDR=YES"";"""

  • ?

    Excel-VBA 悄悄地拿数据——不打开Excel文档的情况下获取文档内数据

    戚行云

    展开

    前言

    首先需要感谢看官您抽空观赏本文,若有任何问题,欢迎您的指正。

    另外大家若有什么好的想法或者效果需求,可以在评论区留言或者私信我,我会尽力尝试做一做。

    如果您喜欢本文的话,可以点赞、订阅、关注、收藏、留言评论哦!谢谢!O(∩_∩)O~~

    情景还原 - 请您听我说

    Excel - VBA 让表格处理变得更简单、更便利、更有趣。

    平常我们从其他Excel表格Copy数据出来的时候,往往都会将源数据表格打开,然后提取我们所需要的部分数据;

    将这个流程整理出来就是:①打开文件资源管理器,花若干秒找到文件;②花若干秒打开文件;③选中全文并Copy(若不熟练Excel快捷键等,可能Copy过程要多耽误几秒);④回到需要数据的文档粘贴下来(若开的文件较多,可能切换时也要耽误几秒)。

    那这上面的看似复杂的流程,可否有便利快捷的办法完成呢?

    答案肯定是 —— 有。用VBA代码就能将上面的流程简化到只要【找文件】这一步。

    功能介绍 - “吹”来“吹”去

    流程简洁方便,只需要找到那份文档即可;

    若源数据文档只有一个工作表,则直接汇入数据;

    若待汇入源数据文档含有多个工作表,会提示选择需要汇入的表格;

    若输入非关键值,则会报错并重新提示输入值。

    效果演示 - 调皮的 GIF 环节

    依旧是那句:万般文字也不如一个视频或者一张GIF演示来的痛快,请看官您静静观赏。

    首先是一份正常使用情况下的完成流程:

    调皮的 GIF 图有点点长 ~.~

    当输入关键字时,输入非列表内的对应序号,则会报错提示,并重新回到输入关键字的界面:

    确认选择的文件

    输入 “WW” 不符合要求

    报错提示信息

    输错啦!请重新输入.GIF

    VBA代码 - Tab / Space

    效果演示看完了,那么就为您附上代码,供您慢慢检验:

    VBA 代码

    PS:若有看官觉得图片还不够清晰,无法尝试,您可以在评论区留言,我会私信回复您。若需要代码的看官比较多(比如100位),那么我会将文本代码直接以文章推送出来供大家查阅。

    【关于私信,目前可能需要看官您先发送私信给我,作为作者这边无法直接向您发信息,若您曾给我发过私信且未将对话关闭,我这边就能从历史记录中向您发送信息。】

    文末 - 谢谢您嘞,(づ ̄3 ̄)づ╭

    每一位读者的点赞、订阅、关注、收藏、留言评论都是对我的最大支持,谢谢各位帅哥美女!

    同时也希望大家多多转发与评论留言,毕竟只有更多的人认可,我才更有动力为大家发布文章,提供代码。

    再次谢谢大家!

    友情链接 - 值得一看

    1、Excel-VBA 让录入数据变得更智能——输入时提示匹配值

    2、Excel-VBA 将乱序的数据剔除空值后有序排列成一列或一行

    3、Excel-VBA 实时记录表格异动

    4、Excel-VBA “十字星”聚焦效果

  • ?

    关于Excel VBA编程的小技巧

    心儿

    展开

    1、 根据条件删除行

    Sub deleteRows(strTable, condition1, condition2)

    Dim i, j, iMax, jMax As Long

    Dim iicondition1, iicondition2 As Integer

    With Worksheets(strTable)

    iMax = .UsedRange.Rows.Count

    jMax = .UsedRange.Columns.Count

    i = 2

    Do While i < iMax + 1

    iicondition1= .Cells(i, 1)

    iicondition2 = .Cells(i, 2)

    If (iicondition1= condition1And iicondition2 = condition2) Then

    .Rows(i & ":" & i).Delete shift:=xlUp

    iMax = iMax - 1

    Else

    i = i + 1

    End If

    Loop

    End With

    End Sub

    2、 删除所以的使用range

    Worksheets("sheetName").UsedRange.Delete shift:=xlUp

    3、打开某指定路径的文件夹对话框

    Function GetFileName(ByVal DialogType As MsoFileDialogType, ByVal defaultPath As String) As String

    With Application.FileDialog(DialogType)

    .Title = "XXXX:"

    .AllowMultiSelect = False

    .Filters.Clear

    .Filters.Add "Excel Files", "*.xlsm"

    .Filters.Add "All Files", "*.*"

    .InitialFileName = defaultPath

    If .Show = True Then

    GetFolderName = .SelectedItems(1)

    End If

    End With

    End Function

    4、截取字符段

    从右边开始,查找某字符,然后截取其后面的字符串。

    xlsPath2 = Right(xlsPath, InStr(StrReverse(xlsPath), "\") - 1)

    5、Sharepoint数据的刷新

    Worksheets("Sharepoint对应的sheet").Range("A1").ListObject.QueryTable.Refresh BackgroundQuery:=False

    6、当前使用的range的取得

    .UsedRange ‘对应的range

    .UsedRange.Rows.Count ‘对应的行号

    .UsedRange.Columns.Count 对应的列号

    7、在Excel内部打开另外一个Excel (不显示,隐藏)并读取其数据

    Set xlsApp = New Excel.Application

    xlsApp.Visible = False

    xlsPath = ThisWorkbook.Path

    Set xlsWB = xlsApp.Workbooks.Open(xlsPath, Null, ReadOnly)

    ‘读取/写入对应的sheet

    X = xlsWB.worksheets(“xxxx”).cells(i,j)

    xlsWB.worksheets(“xxxx”)..Cells(i, j).Formula = "=E” & i

    8、计算处理

    '如果你的表中有大量的计算单元格,那就需要关闭自动计算,否则慢的要死

    ‘在VBA开始,设置为手动

    'Application.Calculation = xlCalculationManual

    'Application.ScreenUpdating = False

    ‘在VBA开始,设置为自动

    'Application.Calculation = xlCalculationAutomatic

    'Application.ScreenUpdating = False

    注意,还有一种方法是再打开本excel的时候,就设置为手动,对于需要计算的sheet,单独在其数据填充完毕后,执行计算操作。

    例如: Worksheets("XXXXX”).Calculate ‘这是效率最高一种方法。当然,你也可以对某些range,单独进行range计算。

    9、Range到range的只读拷贝、黏贴

    Worksheets("srcSheet").Range(.Cells(1, 1), .Cells(x,y)).Copy

    Worksheets("dstSheet").Cells(1, 1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

    10、Cell内容的替换操作

    Worksheets("CostTable").Cells.Replace What:="Original Content", Replacement:="replease Content", LookAt:=xlPart, _

    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False

    11、自动填充

    Worksheets("xxxx")..Range("D8:F8").AutoFill Destination:=.Range(.Cells(8, 4), .Cells(rMax, 8)), Type:=xlFillDefault

    12、获取pivot的使用区域、

    Set pvt = Worksheets("xxxx").PivotTables("PivotTable_xxxx")

    Set rngTable = pvt.TableRange1

    13、刷新pivot

    Worksheets("xxxx").PivotTables("PivotTable_xxxx").PivotCache.Refresh

  • ?

    不会VBA一样可以轻松获取Excel对象属性用自定义函数

    汤米

    展开

    之前零散开发过一些自定义函数获取Excel对象属性,此次再细细地把有价值的属性都一一给开发完成,某些场景下,有这些小函数还是可以比较方便地实现一些通过Excel界面没法轻松获取到的信息。

    函数清单

    可在公式=》插入函数里找到此类的函数清单

    大部分函数取的是单元格的一些属性。

    函数清单

    同时也做了个示例的文件,方便使用和查阅。

    函数示例工作薄

    具体函数功能

    GetHyperlinksAddress函数

    从网页上复制内容到Excel中比较有用,可以提取网页的超链接

    GetRowHeight函数

    获取行高

    GetColumnWidth函数

    获取列宽

    GetCellFormular函数

    获取单元格公式内容

    GetCellCommentText函数

    获取批注信息

    GetCellText函数

    获取单元格显示的内容

    GetCellNumberFormat函数

    获取单元格的数字格式设置内容

    GetCellInteriorColor函数

    获取单元格填充颜色值

    GetCellFontColor函数

    获取单元格的字体颜色

    GetRangeAddress函数

    获取单元格的地址,不同参数下可获得相应的绝对、相对引用的地址格式

    GetCurrent相关函数

    获取工作表、工作薄的名称信息

    总结

    万丈高楼平地起,任何一个精彩的Excel应用,都是多方的知识和功能联合造就的,这些小小的自定义函数,某些时候会是某个数据应用里一个很不错的功能落地点。积累多一些知识,真正应用时就可以有丰富的智囊可供使用。

  • ?

    EXCEL VBA工作表操作全能方法小结

    贲鹏飞

    展开

    [ 01]增加工作表(Add方法)

    Sub AddWorksheet()

    MsgBox "在当前工作簿中添加一个工作表"

    Worksheets.Add

    MsgBox "在当前工作簿中的工作表sheet2之前添加一个工作表"

    Worksheets.Add before:=Worksheets("sheet2")

    MsgBox "在当前工作簿中的工作表sheet2之后添加一个工作表"

    Worksheets.Add after:=Worksheets("sheet2")

    MsgBox "在当前工作簿中添加3个工作表"

    Worksheets.Add Count:=3

    End Sub

    示例说明:Add方法带有4个可选的参数,其中参数Before和参数After指定所增加的工作表的位置,但两个参数只能选一;参数Count用来指定增加的工作表数目。

    --------------------------------------------------------------------------------

    [ 02]复制工作表(Copy方法)

    Sub CopyWorksheet()

    MsgBox "在当前工作簿中复制工作表sheet1并将所复制的工作表放在工作表sheet2之前"

    Worksheets("sheet1").Copy Before:=Worksheets("sheet2")

    MsgBox "在当前工作簿中复制工作表sheet2并将所复制的工作表放在工作表sheet3之后"

    Worksheets("sheet2").Copy After:=Worksheets("sheet3")

    示例说明:Copy方法带有2个可选的参数,即参数Before和参数After,在使用时两个参数只参选一。

    [ 03]移动工作表(Move方法)

    Sub MoveWorksheet()

    MsgBox "在当前工作簿中将工作表sheet3移至工作表sheet2之前"

    Worksheets("sheet3").Move Before:=Worksheets("sheet2")

    MsgBox "在当前工作簿中将工作表sheet1移至最后"

    Worksheets("sheet1").Move After:=Worksheets(Worksheets.Count)

    示例说明:Move方法与Copy方法的参数相同,作用也一样。

    [ 04]隐藏和显示工作表(Visible属性)

    [ 04-01]

    Sub testHide()

    MsgBox "第一次隐藏工作表sheet1"

    Worksheets("sheet1").Visible = False

    MsgBox "显示工作表sheet1"

    Worksheets("sheet1").Visible = True

    MsgBox "第二次隐藏工作表sheet1"

    Worksheets("sheet1").Visible = xlSheetHidden

    MsgBox "第三次隐藏工作表sheet1"

    Worksheets("sheet1").Visible = xlSheetVisible

    MsgBox "第四隐藏工作表sheet1"

    Worksheets("sheet1").Visible = xlSheetVeryHidden

    MsgBox "第五隐藏工作表sheet1"

    示例说明:本示例演示了隐藏和显示工作表的各种情形。其中,使用xlSheetVeryHidden常量来隐藏工作表,将不能通过选择工作表菜单栏中的“格式”——“工作表”——“取消隐藏”命令来取消隐藏。

    [ 05]

    Sub ShowAllSheets()

    MsgBox "使当前工作簿中的所有工作表都显示(即将隐藏的工作表也显示)"

    Dim ws As Worksheet

    For Each ws In Sheets

    ws.Visible = True

    Next ws

    [ 06]获取工作表数(Count属性)

    [ 05-01]

    Sub WorksheetNum()

    Dim i As Long

    i = Worksheets.Count

    MsgBox "当前工作簿的工作表数为:" & Chr(10) & i

  • ?

    分享一段VBA,Excel获取实时股票数据

    redorange

    展开

    欢迎关注天善智能,我们是专注于商业智能BI,大数据,数据分析领域的垂直社区,学习,问答、求职一站式搞定!

    天善学院618活动正在进行中!天善学院618大礼包,大数据、数据分析与数据挖掘、商业智能、机器学习、深度学习、数据库与数据仓库、R语言、Python精品课程总有一款正中你下怀吧?全场6.18折,赠送微课。最好的投资是投资自己,名额有限,欢迎登录查看!

    因为还没有熟练掌握用Ruby生成excel的技能,所以干脆学了一点VBA,写了段通过excel实时获取股票数据的代码。

    方便在excel里使用各种公式计算涨跌幅。

    分享如下:

    效果如下:

    本文作者:GalaxyRover

vba读取excel

所有视频需要登录后,才能观看

请先登录您的帐号,即可完整播放,如果您尚未注册帐号,请先点击注册。

img

在线咨询

建站在线咨询

img

微信咨询

扫一扫添加
动力姐姐微信

img
img

TOP