ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 怎么把填入的数字自动分入已经分好的元角分单元格

[复制链接]

TA的精华主题

TA的得分主题

发表于 2020-3-17 16:50 | 显示全部楼层 |阅读模式
我想要像效果图中那样,在已经分好的十、元、角、分的那几列下面可以直接输入数字,然后当我移动到其他单元格的时候会自动把数字分列排布在正确的元、角、分下,就像效果图中那样,输入34.5,移开后会自动把3填入十下面,4填入元下面,5填入角下面,还会自动在分下面填入一个0。                样式中是已经排版好的表格,我希望收入、发出和结存的金额的下面都能那样做,希望能直接根据那张表格填写宏,谢谢了
效果图.jpg

样式.7z

12.54 KB, 下载次数: 25

TA的精华主题

TA的得分主题

发表于 2020-3-18 02:18 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
可以大致模拟一下效果,对于输入内容,只判断是否为数字,是否符合金额的要求,请自行判断

样式.7z (21.45 KB, 下载次数: 38)

TA的精华主题

TA的得分主题

发表于 2020-3-18 02:19 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2020-3-18 02:20 | 显示全部楼层
参考代码

  1. Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  2.     If KeyCode = 13 Then
  3.         ActiveCell = TextBox1.Text
  4.         TextBox1.Visible = False
  5.     End If
  6.    
  7. End Sub

  8. Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  9.     c = ""
  10.     Set rng1 = Application.Union(Range("ShouRu"), Target)
  11.     Set rng2 = Application.Union(Range("FaChu"), Target)
  12.     Set rng3 = Application.Union(Range("JieCun"), Target)
  13.     If Not rng1 Is Nothing Then
  14.         c = "J"
  15.     ElseIf Not rng2 Is Nothing Then
  16.         c = "V"
  17.     ElseIf Not rng3 Is Nothing Then
  18.         c = "AH"
  19.     End If
  20.     If Len(c) > 0 Then
  21.         Application.EnableEvents = False
  22.          Cells(Target.Row, c).Select
  23.         With Sheet1.TextBox1
  24.             .Top = ActiveCell.Top
  25.             .Left = ActiveCell.Left
  26.             .Text = ""
  27.             .Activate
  28.             .Visible = True
  29.         End With
  30.         Application.EnableEvents = True
  31.     End If
  32. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2020-3-18 08:50 | 显示全部楼层
本帖最后由 YZC51 于 2020-3-18 08:57 编辑

请参考
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Row > 7 And Target.Row < 33 And Target.Column = 8 Then
        If Len(Target) Then
            je = Round(Target * Target(1, 2), 2) * 100
            jew = Len(je): myr = Target.Row
            For i = 0 To 9
            If i = jew Then Exit For
            Cells(myr, 19 - i) = Mid(je, jew - i, 1)
            Next
        End If
    End If
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2020-3-18 09:24 | 显示全部楼层
1.用len函数确定数字位数,用find找出“.”所在数字中的位置
2.用mid函数分别提取一位数字填入对应单元格(如果值为点时跳空)
3.在个位数所在单元格值后加“.”

TA的精华主题

TA的得分主题

发表于 2020-3-19 06:25 | 显示全部楼层
本帖最后由 YZC51 于 2020-3-19 09:15 编辑

请参考!!
样式-金额.rar (49.4 KB, 下载次数: 79)

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2020-3-19 09:14 | 显示全部楼层
Dim c As String, r As Long

Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    If KeyCode = 13 Then
        ActiveCell = TextBox1.Text
        TextBox1.Visible = False
    End If
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.CountLarge > 1 Then Exit Sub
    If Target.Column <> 8 Or Target.Column <> 20 Or Target.Column <> 32 Then TextBox1.Visible = False
    If Target.Row < 8 Or Target.Row > 32 Then Exit Sub
    c = ""
    If Target.Column = 8 Then
        c = "H"
    ElseIf Target.Column = 20 Then
        c = "T"
    ElseIf Target.Column = 32 Then
        c = "AF"
    End If
    If Len(c) > 0 Then
        Application.EnableEvents = False
        Cells(Target.Row, c).Select
        With Sheet1.TextBox1
            .Top = ActiveCell.Top
            .Left = ActiveCell.Left
            .Text = ""
            .Activate
            .Visible = True
        End With
        Application.EnableEvents = True
    End If
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.CountLarge > 1 Then Exit Sub
    If Target.Row < 8 Or Target.Row > 32 Then Exit Sub
    c = ""
    If Target.Column = 8 Then
        n = 8
    ElseIf Target.Column = 20 Then
        n = 20
    ElseIf Target.Column = 32 Then
        n = 32
    End If
    If Target.Column > 7 And Target.Column < 33 And IsNumeric(Target.Value) Then
        x = Round(Target(1).Value * 100): y = Len(x)
        Cells(Target.Row, n).Resize(, 11) = ""
        If x = 0 Then Cells(Target.Row, n).Resize(, 11) = "": Exit Sub
        Dim ar(1 To 11)
        For i = 1 To y
            ar(i) = Mid(x, i, 1)
        Next
        Cells(Target.Row, n + 10 - y).Resize(, y) = ar
    End If
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2020-3-19 09:24 | 显示全部楼层
YZC51老师:可否延伸一下,即第八行的“结存金额加(+)”第九行的“收入金额”减(-)第九行的“发出金额”等于(=)第九行的“结存金额”;
第九行的“结存金额加(+)”第十行的“收入金额”减(-)第十行的“发出金额”等于(=)第十行的“结存金额”,……以此类推,自动计算??恳请完善,谢谢!!!仅在“结存”项目用VBA代码计算。

TA的精华主题

TA的得分主题

发表于 2020-3-19 09:55 | 显示全部楼层
wowo000 发表于 2020-3-19 09:24
YZC51老师:可否延伸一下,即第八行的“结存金额加(+)”第九行的“收入金额”减(-)第九行的“发出金额 ...

您好!不明白请教下

收入金额 相当于 借
发出金额 相当于 贷

评分

1

查看全部评分

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

本版积分规则

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

GMT+8, 2024-11-16 05:56 , Processed in 0.040125 second(s), 17 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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