Excel交流网
  • 设为首页|收藏本站|手机版
  • Excel-教程-技巧-培训视频

  • 网站首页
  • Excel教程
  • 关于我们
  • 新闻动态
  • Excel资源
  • 招贤纳士

Excel教程

Excel操作
Excel函数
Excel图表
Excel VBA
Excel 行业应用

联系方式

Excel中国 联系方式
电  话:400-855-3990
邮  编:528400
Email:support@zstm.com
网  址:www.excel-cn.com

当前位置:网站首页 > Excel教程 > Excel VBA
Excel VBA

Excel首字拼音模糊搜索及快捷录入


Excel获取中文的拼音码或拼音首字,相信大家都有见识过,在网上也可以搜索到很多相关的函数或VBA代码,但根据首字拼音来进行模糊搜索,并自动匹配及缩小选择范围,并回车自动录入,估计很多网友没有见过或尝试过。

今天Office中国就在Excel培训部落给大家带来这篇教程。





一、实现效果 :



作者:江苏大侠



Excel技巧



Excel技巧



Excel技巧





Excel操作动画 :




Excel技巧





三、Excel VBA代码 :




'工作表打开事件里先把清单加载到arr数组,同时提取每个商品的拼音首字母保存到brr数组。

Private Sub Workbook_Open()

    Dim br

    arr = Sheet2.UsedRange

    ReDim br(1 To UBound(arr))

    For i = 1 To UBound(arr)

        br(i) = pinyin(arr(i, 1))

    Next

    brr = br

End Sub

'ASC码在-20319~-10247之间的为汉字,通过比较汉字在字符串中顺序获得首字母。

Public Function pinyin(ByVal r As String)

    hz = "啊芭擦搭蛾发噶哈击喀垃妈拿哦啪期然撒塌挖昔压匝ABCDEFGHJKLMNOPQRSTWXYZZ"

    For i = 1 To Len(r)

        If Asc(Mid(r, i, 1)) > -10247 Or Asc(Mid(r, i, 1)) < -20319 Then

            temp = Mid(r, i, 1)

        Else

            For j = 1 To 24

                If Asc(Mid(r, i, 1)) >= Asc(Mid(hz, j, 1)) Then temp = Mid(hz, 23 + j, 1)

            Next

        End If

        pinyin = pinyin & temp

    Next

End Function

'工作表选择事件中,如果单元格在第一列则显示组合框,并设置组合框与单元格完全匹配。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    On Error Resume Next

    With ComboBox1

        .Visible = False

        If ActiveCell.Column = 1 Then

            .Top = Target.Top:  .Height = Target.Height: .Width = Target.Width: .ListWidth = 230

            .Visible = True: .Activate: .Text = ActiveCell.Text

        End If

    End With

End Sub


'当组合框获得焦点时将arr数组加载到组合框列表中。

Private Sub ComboBox1_GotFocus()

    ComboBox1.List = WorksheetFunction.Transpose(arr)

    ComboBox1.DropDown

End Sub

'在组合框里输入内容(方向键和回车键忽略)进行模糊搜索,可以直接输入中文也可以输入汉字首字母查找,加空格可以多条件,如要找330ml的可乐,可以输入"kl 330"或者"330 kl"查找

Private Sub ComboBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)

    If KeyCode <> 37 And KeyCode <> 38 And KeyCode <> 39 And KeyCode <> 40 And KeyCode <> 13 Then

        ActiveCell.Value = ComboBox1.Text

        Set d = CreateObject("Scripting.Dictionary")

        For i = 1 To UBound(arr)

            If InStr(1, arr(i, 1), ComboBox1.Value) > 0 Then d(arr(i, 1)) = ""

            If InStr(1, brr(i), Split(ComboBox1.Value & " ", " ")(0), 1) > 0 And InStr(1, brr(i), Split(ComboBox1.Value & " ", " ")(1), 1) > 0 Then d(arr(i, 1)) = ""

        Next

        ComboBox1.List = d.keys

    End If

End Sub

'当在组合框里选择或者回车时,将组合框的内容赋值到单元格。

Private Sub ComboBox1_Click()

    ActiveCell = ComboBox1.Value

End Sub


Private Sub ComboBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)

    If KeyCode = 13 Then

        If ComboBox1.ListCount = 1 Then ComboBox1.ListIndex = 0

        If ComboBox1.ListIndex > -1 Then ActiveCell = ComboBox1.Value

        ActiveCell.Select

    End If

End Sub


这个功能在企业和工厂的实际办公场景有很多用途,值得学习和借鉴。


点击次数:  更新时间:2016-11-13 22:23:08  【打印此页】  【关闭】
上一条:Excel VBA实现单元格或区域里的文字自动折行  下一条:读取Excel长文字内容中的规格数据
本站动态|在线留言|在线反馈|友情链接|会员中心|站内搜索|网站地图|网站管理

中山市天鸣科技发展有限公司 版权所有 1999-2020 粤ICP备10043721号

广东省中山市西苑广场富贵阁 528400

QQ:4008553990 电话:0760-88315075

Excel交流网主要交流Excel教程、Excel技巧、Excel培训、Excel函数公式、Excel图表以及Excel VBA,为网友提供一个最全的Excel交流网站

Excel教程|Excel技巧|Excel培训|Excel函数公式|Excel图表|VBA

Powered by MetInfo 5.3.12 ©2008-2022  www.metinfo.cn