注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

让一切都逝去吧

排骨炖泥菜/猪肝炒苹果/鱼籽狗肉汤/狗头薏米汤

 
 
 

日志

 
 

怎样愉快地玩耍excel vba  

2015-09-08 22:44:27|  分类: 文档 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
      excel中也是可以编程的,excel版本是2013,在某个sheet上右键--查看代码,就可以开始定义函数了。形式如下
Sub RegTest()
    ...
End Sub
碰到的知识有
excel判断是否为空
sheet1!E5<>"" 或者 isblank(value)
公式中的if
=IF(sheet1!E5<>"",sheet1!E5,"")
excel中的查找替换可以对于公式进行替换

在VBA中用于字符串连接的只有“&”和“+”两种运算符。
1、“&”是强制性连接,就是不管什么都连接。
2、“+”是对字符串进行连接,对数字则进行加法运算。(用“+”号的时候,“+”前后类型要一致)

定义变量
    Dim second_col As Integer
    Dim current_fom As String

处理所有sheet
For x = 1 To Sheets.Count
  Set current_sheet = Sheets(x)

定义公式是如下
Rng2.FormulaR1C1 = "=VLOOKUP([RC-8],说明!G$100:H$306,2,FALSE)"
但是实际设置的时候FormulaR1C1报错了,我是要对单元格赋值=号开头的字符串就行了。如果公式内有"号,vba是两个引号来代替:
current_fom = "=IF(" & current_sheet.Name & "!E" & first_col & "<>""""," & current_sheet.Name & "!E" & first_col & ","""")"
Cells(row_num, 1) = current_fom

判断是否是合并单元格,使用MergeCells
If Range("a3").MergeCells Then
    ma.Cells(1, 1).Value = "42"
End If

'Cells(x, 11) = Sheets(x).Cells(14, 1).Row '当前单元格所在的行数,就是excel最左侧的数字。如果是合并单元格,要知道此合并单元格所占的行数,需要使用MergeArea
current_sheet.Cells(current_row, 1).MergeArea.Rows.Count

循环有这个do loop
Do
  ...
  first_cell = current_sheet.Cells(current_row, 1)
Loop Until first_cell = ""
还有
For x = 1 To Sheets.Count - 1
  ...
Next x

      好了,vba基本可以开始玩耍了。抄录正则的两个示例
Sub RegTest()
    '定义正则表达式对象
    Dim oRegExp As Object
    '定义匹配字符串集合对象
    Dim oMatches As Object
    '创建正则表达式
    '定义要执行正则查找的文本变量
    Dim sText As String
    sText = "这是v一个正则表达式b的范例程序a代码"
    Set oRegExp = CreateObject("vbscript.regexp")
    With oRegExp
        '设置是否匹配所有的符合项,True表示匹配所有, False表示仅匹配第一个符合项
        .Global = True
        '设置是否区分大小写,True表示不区分大小写, False表示区分大小写
        .IgnoreCase = True
        '设置要查找的字符模式
        .Pattern = "[\u4e00-\u9fa5]+"
        '判断是否可以找到匹配的字符,若可以则返回True
        MsgBox .Test(sText)
        '对字符串执行正则查找,返回所有的查找值的集合,若未找到,则为空
        Set oMatches = .Execute(sText)
        '把字符串中用正则找到的所有匹配字符替换为其它字符
        MsgBox .Replace(sText, "")
    End With
    Set oRegExp = Nothing
    Set oMatches = Nothing
End Sub
正则表达式语法
https://msdn.microsoft.com/zh-cn/library/ae5bf541%28VS.80%29.aspx

Private Sub RegEx_Replace()
     Dim myRegExp As Object
     Dim Myrange As Range, C As Range

     Set myRegExp = CreateObject("vbscript.regexp")
     Set Myrange = ActiveSheet.Range("A1:A6")

     For Each C In Myrange
         myRegExp.Pattern = "^\d+.\s*"
         Set myMatches = myRegExp.Execute(C.Value)
         If myMatches.Count >= 1 Then
             Set myMatch = myMatches(0)
             C.Value = myRegExp.Replace(C.Value, "")
         End If
     Next
End Sub
其原理主要是通过创建正则式对象并执行相应的正则式以实现查找/替换的目的,过程如下:
    声明正则式对象;
    赋值给该对象,包括全局性、大小写模式、正则式内容;
    执行正则表达式。
    执行正则表达式时,我们有3种函数可用:Test、Execute、Replace。
正则式对象方法:
    Test:检测目标文本与正则式是否匹配,返回True or False。
    Execute:检测是否匹配,并返回匹配集合,供后续程序调用处理。
    Replace:执行替换操作。在替换时,可以使用$1,$2等捕获变量,与常规的正则表达式意义相同
  评论这张
 
阅读(917)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017