ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
12
返回列表 发新帖
楼主: JEFF13141988

[分享]***VBA程序交流***(更新中.....)。

[复制链接]

TA的精华主题

TA的得分主题

发表于 2008-7-5 02:20 | 显示全部楼层
楼上的代码怎么用啊  介绍一下。精神可嘉

TA的精华主题

TA的得分主题

发表于 2008-7-5 07:48 | 显示全部楼层
光标上下左右移标本身不会引起重复吧,你所说的重复是什么意思能否清楚点。如果是单元格元格内容不允许与其它单元格重复的话也用不着写那么多代码。

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-7-5 15:19 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

回复11楼:

    此代码可能不是最简单的,除判断光标移动方向其他都是自己编写,用法是将此代码复制到工作表中就行。

Private Sub Worksheet_Change(ByVal Target As Range)

.....

End Sub

回复12楼:

光标上下左右移标是指Excel在输入数据时,选项中有光标移动选项,此代码是不管你的光标移动设置是向上、下、左、右对刚输入的数据判断在此列中是否有重复。

通常用于某列数据为唯一时有用如:员工代号,序列号等。

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-7-5 15:53 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

行筛选,一般用于同一行有多数据重复,如下图:

RvjpJHxI.rar (11.27 KB, 下载次数: 2)




[分享]VBA程序交流:逻辑编程(更新)。

[分享]VBA程序交流:逻辑编程(更新)。

[分享]VBA程序交流:逻辑编程(更新)。

[分享]VBA程序交流:逻辑编程(更新)。

TA的精华主题

TA的得分主题

发表于 2008-7-5 21:24 | 显示全部楼层
其实要判断刚输入的单元格中的字符在同行(同列)中是否有重复只需二三行代码就可以完成的,没必要搞的那么复杂。

TA的精华主题

TA的得分主题

发表于 2008-7-5 23:21 | 显示全部楼层

数据转大写嘛,

[挑战]功能最全、最短(7行)的人民币大写函数 http://club.excelhome.net/viewthread.php?tid=143867&replyID=&skin=0,必须借助于EXCEL,但速度的确很快

如果脱离了EXCEL,我觉得下面的适用更广泛一些(原出处找不到了),因为以下这个函数无需借助EXCEL环境就能独立在VB代码中运行

 ' 试编写数字金额转中文大写的函数
 ' lin jin xiang 08-07-2004
 ' 重编辑 23-01-2005

Function DaXie(ByVal Num)       ' 人民币中文大写函数
    Application.Volatile True
    Place = "分角元拾佰仟万拾佰仟亿拾佰仟万"
    Dn = "壹贰叁肆伍陆柒捌玖"
    D1 = "整零元零零零万零零零亿零零零万"
    If Num < 0 Then FuHao = "(负)"
    Num = Format(Abs(Num), "###0.00") * 100
    If Num > 999999999999999# Then: DaXie = "数字超出转换范围!!": Exit Function
    If Num = 0 Then: DaXie = "零元": Exit Function
    NumA = Trim(Str(Num))
    NumLen = Len(NumA)
    For J = NumLen To 1 Step -1     ' 数字转换过程
      Temp = Val(Mid(NumA, NumLen - J + 1, 1))
      If Temp <> 0 Then             ' 非零数字转换
         NumC = NumC & Mid(Dn, Temp, 1) & Mid(Place, J, 1)
      Else                          ' 数字零的转换
         If Right(NumC, 1) <> "零" Then
           NumC = NumC & Mid(D1, J, 1)
         Else
           Select Case J            ' 特殊数位转换
                Case 1
                  NumC = Left(NumC, Len(NumC) - 1) & Mid(D1, J, 1)
                Case 3, 11
                  NumC = Left(NumC, Len(NumC) - 1) & Mid(D1, J, 1) & "零"
                Case 7
                  If Mid(NumC, Len(NumC) - 1, 1) <> "亿" Then
                     NumC = Left(NumC, Len(NumC) - 1) & Mid(D1, J, 1) & "零"
                  End If
                Case Else
           End Select
         End If
      End If
    Next
    DaXie = FuHao & Trim(NumC)
End Function

[此贴子已经被作者于2008-7-6 8:30:06编辑过]

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-7-8 11:15 | 显示全部楼层

[分享]在工具栏中添加工作表目录

gR27R3px.rar (13.72 KB, 下载次数: 6)


 

除本人编写的外其他资料来自本网站。


[此贴子已经被作者于2008-7-8 11:29:35编辑过]

[分享]VBA程序交流:逻辑编程(更新)。

[分享]VBA程序交流:逻辑编程(更新)。

[分享]VBA程序交流:逻辑编程(更新)。

[分享]VBA程序交流:逻辑编程(更新)。

J6C2zXtB.rar

13.75 KB, 下载次数: 5

[分享]VBA程序交流:逻辑编程(更新)。

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-7-8 12:30 | 显示全部楼层

[分享]金额大写函数

下面是本人2001年用IF FOR 两语句编写的金额大写函数,现在看来自己也汗言当时的蠢和勇气!

Public Function 大写(币种, 金额)
Dim v As Integer
Dim i As Integer
    If IsNumeric(金额) = False Then
    大写 = "#错误#"
    Exit Function
    End If
   金额 = Format(金额, "######0.00")
    If 金额 = "" Then
    大写 = "#错误#"
    Exit Function
    End If
v = Len(金额)
ReDim B(v)
ReDim m(v)
ReDim n(v)
    For i = 1 To v Step 1
    B(i) = Mid(金额, i, 1)
    'MsgBox b(i)
    Next
If B(1) = "-" Then
   If v > 13 Then
      MsgBox "数字太大,只能存亿位以内", vbCritical, "十亿以上无效"
      大写 = "#错误#"
      Exit Function
    End If
Else
    If v > 12 Then
      MsgBox "数字太大,只能存亿位以内", vbCritical, "十亿以上无效"
      大写 = "#错误#"
      Exit Function
    End If
End If

For i = 1 To v
If v - i = 11 Then      '亿位读数
     n(i) = "亿"
    If B(v - 11) <> 0 Then
     n(i) = "亿"
     End If
    If B(v - 10) = 0 And B(v - 9) <> 0 Or B(v - 10) = 0 And B(v - 8) <> 0 Or B(v - 10) = 0 And B(v - 7) <> 0 Or B(v - 10) = 0 And B(v - 6) <> 0 Then
      n(i) = "亿零"
    End If
        If B(v - 10) = 0 And B(v - 5) <> 0 Or B(v - 10) = 0 And B(v - 4) <> 0 Or B(v - 10) = 0 And B(v - 3) <> 0 Then
      n(i) = "亿零"
    End If

         If B(v - 10) = 0 And B(v - 9) = 0 And B(v - 8) = 0 And B(v - 7) = 0 And B(v - 6) = 0 And B(v - 5) = 0 And B(v - 4) = 0 And B(v - 3) = 0 Then
      n(i) = "亿"
    End If
    Else

If v - i = 10 Then        '仟万位读数
     n(i) = "仟"
    If B(v - 9) <> 0 Then
     n(i) = "仟"
     End If
    If B(v - 9) = 0 And B(v - 8) <> 0 Or B(v - 9) = 0 And B(v - 7) <> 0 Then
      n(i) = "仟零"
    End If
     If B(v - 9) = 0 And B(v - 8) = 0 And B(v - 7) = 0 And B(v - 6) <> 0 Or B(v - 9) = 0 And B(v - 8) = 0 And B(v - 7) = 0 And B(v - 5) <> 0 Then
      n(i) = "仟万零"
    End If
     If B(v - 9) = 0 And B(v - 8) = 0 And B(v - 7) = 0 And B(v - 4) <> 0 Or B(v - 9) = 0 And B(v - 8) = 0 And B(v - 7) = 0 And B(v - 3) <> 0 Then
      n(i) = "仟万零"
    End If
    If B(v - 9) = 0 And B(v - 8) = 0 And B(v - 7) = 0 And B(v - 6) = 0 And B(v - 5) = 0 And B(v - 4) = 0 And B(v - 3) = 0 Then
      n(i) = "仟万"
    End If
    Else

    If v - i = 9 Then              '佰万位读数
     n(i) = "佰"
    If B(v - 8) = 0 Then
     n(i) = "佰"
     End If
     If B(v - 8) = 0 And B(v - 7) <> 0 Then
     n(i) = "佰零"
     End If
     If B(v - 8) = 0 And B(v - 7) = 0 And B(v - 6) <> 0 Or B(v - 8) = 0 And B(v - 7) = 0 And B(v - 5) <> 0 Then
      n(i) = "佰万零"
    End If
     If B(v - 8) = 0 And B(v - 7) = 0 And B(v - 4) <> 0 Or B(v - 8) = 0 And B(v - 7) = 0 And B(v - 3) <> 0 Then
      n(i) = "佰万零"
    End If
    If B(v - 8) = 0 And B(v - 7) = 0 And B(v - 6) = 0 And B(v - 5) = 0 And B(v - 4) = 0 And B(v - 3) = 0 Then
      n(i) = "佰万"
    End If

    Else
    If v - i = 8 Then
     n(i) = "拾"
     If B(v - 7) = 0 Then
     n(i) = "拾万"
     End If
     If B(v - 7) = 0 And B(v - 3) <> 0 Or B(v - 7) = 0 And B(v - 4) <> 0 Then
      n(i) = "拾万零"
    End If
      If B(v - 7) = 0 And B(v - 5) <> 0 Or B(v - 7) = 0 And B(v - 6) <> 0 Then
      n(i) = "拾万零"
    End If
       If B(v - 7) = 0 And B(v - 6) = 0 And B(v - 5) = 0 And B(v - 4) = 0 And B(v - 3) = 0 Then
      n(i) = "拾万"
    End If
    Else
     If v - i = 7 Then
     n(i) = "万"
     If B(v - 6) = 0 Then
     n(i) = "万零"
       If B(v - 6) = 0 And B(v - 5) = 0 And B(v - 4) = 0 And B(v - 3) = 0 Then
      n(i) = "万"
    End If
    End If
    Else
     If v - i = 6 Then
      n(i) = "仟"
      If B(v - 5) = 0 Then
       n(i) = "仟零"
       End If
           If B(v - 5) = 0 And B(v - 4) = 0 And B(v - 3) <> 0 Then
      n(i) = "仟零"
    End If
           If B(v - 5) = 0 And B(v - 4) = 0 And B(v - 3) = 0 Then
      n(i) = "仟"
    End If
    Else
    If v - i = 5 Then
      n(i) = "佰"
      If B(v - 4) = 0 And B(v - 3) <> 0 Then
       n(i) = "佰零"
       End If
       Else
       If v - i = 4 Then
       n(i) = "拾"
       End If
       End If
       End If
       End If
       End If
       End If
       End If
       End If
  If B(i) = 0 Then
        m(i) = "零"
         n(i) = ""
      For j = 1 To i
       If B(i - j) = 0 Then
         m(i) = ""
         n(i - j) = ""
        End If
      Next
  Else
      If B(1) = "-" Then
        n(1) = "*" & "负" & "*"
      End If
     If B(i) = 0 Then
     m(i) = "零"
    End If
    If B(i) = 1 Then
     m(i) = "壹"
    End If
    If B(i) = 2 Then
     m(i) = "贰"
    End If
    If B(i) = 3 Then
      m(i) = "叁"
    End If
    If B(i) = 4 Then
      m(i) = "肆"
    End If
    If B(i) = 5 Then
      m(i) = "伍"
    End If
    If B(i) = 6 Then
      m(i) = "陆"
    End If
    If B(i) = 7 Then
      m(i) = "柒"
    End If
    If B(i) = 8 Then
      m(i) = "捌"
    End If
    If B(i) = 9 Then
      m(i) = "玖"
    End If
 End If


If v - i = 2 Then
 n(i) = "元"
 End If
 If v = 4 And B(1) = 0 Then
 n(i) = ""
 End If
 If v - i > 1 Then
 c = m(i) & n(i)
 Else
 c = ""
 End If
 
大写 = 大写 & c
Next

If B(v) = 0 And B(v - 1) = 0 Then
n(v - 1) = ""
n(v) = "整"
Else
If B(v - 1) = 0 And B(v) <> 0 Then
n(v) = "分"
n(v - 1) = "零"
Else
If B(v - 1) <> 0 And B(v) = 0 Then
n(v) = ""
n(v - 1) = "角整"
Else

If B(v - 1) <> 0 And m(v) <> 0 Then
 n(v) = "分"
n(v - 1) = "角"
End If
End If
End If
End If
If B(v - 3) = 0 Then
m(v - 3) = "零"
If B(v - 1) = 0 Then
n(v - 1) = ""
End If
If v = 4 And B(1) = 0 Then
m(v - 3) = ""
End If
If B(v - 3) = 0 And B(v - 1) = 0 And B(v) = 0 Then
m(v - 3) = ""
n(v - 1) = ""
End If
If v = 4 And B(v) = 0 And B(v - 1) = 0 And B(v - 3) = 0 Then
n(v) = "零"
End If
If v = 5 And B(1) = "-" And B(2) = 0 Then
m(v - 3) = ""
n(v - 2) = ""
大写 = "*" & "负" & "*"
End If
大写 = 大写 & m(v - 3) & m(v - 1) & n(v - 1) & m(v) & n(v)
Else
大写 = 大写 & m(v - 1) & n(v - 1) & m(v) & n(v)
End If

If 币种 = 1 Or 币种 = "RMB" Or 币种 = "CHY" Or Mid(币种, 1, 1) = "r" Or Mid(币种, 1, 1) = "c" Or Mid(币种, 1, 1) = "R" Or Mid(币种, 1, 1) = "C" Or Mid(币种, 1, 1) = "¥" Then
币种 = "人民币:"
Else
If 币种 = 2 Or 币种 = "HK$" Or 币种 = "GB" Or Mid(币种, 1, 1) = "h" Or Mid(币种, 1, 1) = "G" Or Mid(币种, 1, 1) = "g" Or Mid(币种, 1, 1) = "H" Or Mid(币种, 1, 1) = "$" Then
币种 = "港币:"
Else
If 币种 = 3 Or 币种 = "NT" Or 币种 = "TB" Or 币种 = "NT$" Or 币种 = "TWY" Or Mid(币种, 1, 1) = "T" Or Mid(币种, 1, 1) = "N" Then
币种 = "台币:"
Else

币种 = 币种 & ":"
End If
End If
End If
大写 = 币种 & 大写

End Functio

这是现在网上流行结合函数的金额大写函数

Function 金额大写(x As Range)
If x >= 1 Then
    If Int(x) = x Or Round(x, 2) = Int(x) Then
       金额大写 = Application.WorksheetFunction.Text(Int(x), "[DBNUM2]") & "元"

    ElseIf Int(x * 10) = x * 10 Or Int(x * 10) = Round(x, 2) * 10 Then
       金额大写 = Application.WorksheetFunction.Text(Int(x), "[DBNUM2]") & "元" & Application.WorksheetFunction.Text(Right(Round(x, 2), 1), "[DBNUM2]") & "角"
    Else
       金额大写 = Application.WorksheetFunction.Text(Int(x), "[DBNUM2]") & "元" & Application.WorksheetFunction.Text(Left(Right(Round(x, 2), 2), 1), "[DBNUM2]") & "角" & Application.WorksheetFunction.Text(Right(Round(x, 2), 1), "[DBNUM2]") & "分"
    End If
ElseIf x = 0 Then
    金额大写 = Application.WorksheetFunction.Text(Int(x), "[DBNUM2]") & "元"
   
ElseIf x < 1 And x > 0 Then

      If Int(x * 10) = x * 10 Then
       金额大写 = Application.WorksheetFunction.Text(Right(x, 1), "[DBNUM2]") & "角"
      Else
       金额大写 = Application.WorksheetFunction.Text(Left(Right(Round(x, 2), 2), 1), "[DBNUM2]") & "角" & Application.WorksheetFunction.Text(Right(Round(x, 2), 1), "[DBNUM2]") & "分"
      End If
Else
    If Int(x) = x Or Round(Abs(x), 2) = Int(Abs(x)) Then
       金额大写 = "负" & Application.WorksheetFunction.Text(Int(Abs(x)), "[DBNUM2]") & "元"

    ElseIf Int(x * 10) = x * 10 Then
       金额大写 = "负" & Application.WorksheetFunction.Text(Int(Abs(x)), "[DBNUM2]") & "元" & Application.WorksheetFunction.Text(Right(x, 1), "[DBNUM2]") & "角"
    Else
       金额大写 = "负" & Application.WorksheetFunction.Text(Int(Abs(x)), "[DBNUM2]") & "元" & Application.WorksheetFunction.Text(Left(Right(Round(x, 2), 2), 1), "[DBNUM2]") & "角" & Application.WorksheetFunction.Text(Right(Round(x, 2), 1), "[DBNUM2]") & "分"
    End If
End If
End Function

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-8-4 14:09 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

[分享]按单元格背影颜色筛选

在工作中经常在Excel工作表数对数据单元格进行颜色备注,备注多种颜色后很难将同一颜色的数据进行排序或筛选,在查看时很不方便,此颜色筛选能按颜色对单元格进行筛选,对颜色备注查看很方便。

 

 


AyQXeQrv.rar (8.33 KB, 下载次数: 9)
[此贴子已经被作者于2008-8-4 14:16:30编辑过]

a1h4eYKY.rar

13.5 KB, 下载次数: 5

[分享]VBA程序交流:逻辑编程(更新.....)。

TA的精华主题

TA的得分主题

发表于 2008-8-4 14:47 | 显示全部楼层
QUOTE:
以下是引用JEFF13141988在2008-7-3 21:35:53的发言:

101,001,101.50

人民币:壹亿零壹佰万壹仟壹佰零壹元伍角整

 

人民币:壹亿零壹佰万壹仟壹佰零壹元伍角整

   哪个读数更准确?

当然是第一个了。

100万后面肯定是千了。还要什么零?

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

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-10-4 00:26 , Processed in 0.037756 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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