Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 6696|回复: 9

[已解决]如何将公式转换成VBA代码

[复制链接]
发表于 2012-10-8 22:58 | 显示全部楼层 |阅读模式
请论坛里的高手们帮帮忙,弄了一整天了,头都整大了还是不行,详细说明请见附件! 2012年文化户口册.rar (34.06 KB, 下载次数: 27)
发表于 2012-10-8 23:21 | 显示全部楼层
本帖最后由 hwc2ycy 于 2012-10-8 23:48 编辑
  1. Target.Offset(0, 16).Value = ((2012.08 - Target.Value)) \ 1
复制代码
  1.     If Target.Column = 5 Then
  2.         If Target.Count > 1 Then Exit Sub
  3.         If Target.Value <> "" Then
  4.             Target.Offset(0, 16).Value = ((2012.08 - Target.Value)) \ 1
  5.         Else
  6.             Target.Offset(0, 16).Value = ""
  7.         End If
  8.     End If
复制代码
回复

使用道具 举报

发表于 2012-10-8 23:46 | 显示全部楼层
  1.     If Target.Column = 20 Then
  2.         If Target.Count > 1 Then Exit Sub
  3.         If Target.Value = "" Then
  4.             Target.Offset(0, 2).Value = ss
  5.             Exit Sub
  6.         End If
  7.         'Stop
  8.         For j = 1 To Len(Target.Value)
  9.             For i = 0 To 9
  10.                 If InStr(Mid(Target.Value, j, 1), i) > 0 Then
  11.                     ss = ss & Mid("零一二三四五六七八九", i + 1, 1)
  12.                     Exit For
  13.                 End If
  14.             Next
  15.         Next
  16.         If Len(ss) > 0 Then
  17.            Target.Offset(0, 2).Value = ss
  18.         End If
  19.     End If
复制代码
数字变大写,其实也可以提取出数字,设置单元格格式为dbnum1
回复

使用道具 举报

 楼主| 发表于 2012-10-8 23:47 | 显示全部楼层
非常感谢hwc2ycy老师的帮忙,但怎么“类型不匹配”的错误提示,能不能请老师再讲的详细一点,最好上传一个附件!
回复

使用道具 举报

发表于 2012-10-8 23:49 | 显示全部楼层
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2.     Dim i&, j&, ss$
  3.     If Target.Row < 7 Then Exit Sub
  4.     If Target.Column = 5 Then
  5.         If Target.Count > 1 Then Exit Sub
  6.         If Target.Value <> "" Then
  7.             Target.Offset(0, 16).Value = ((2012.08 - Target.Value)) \ 1
  8.         Else
  9.             Target.Offset(0, 16).Value = ""
  10.         End If
  11.     End If
  12.     If Target.Column = 20 Then
  13.         If Target.Count > 1 Then Exit Sub
  14.         If Target.Value = "" Then
  15.             Target.Offset(0, 2).Value = ss
  16.             Exit Sub
  17.         End If
  18.         For j = 1 To Len(Target.Value)
  19.             For i = 0 To 9
  20.                 If InStr(Mid(Target.Value, j, 1), i) > 0 Then
  21.                     ss = ss & Mid("零一二三四五六七八九", i + 1, 1)
  22.                     Exit For
  23.                 End If
  24.             Next
  25.         Next
  26.         If Len(ss) > 0 Then
  27.            Target.Offset(0, 2).Value = ss
  28.         End If
  29.     End If
  30.    
  31.     If Target.Column <> 1 Then Exit Sub
  32.     If Target(1) <> "" Then
  33.     For i = 1 To Target.Rows.Count
  34.     Target(i).Offset(-1, 20).Copy Target(i).Offset(0, 20)
  35.     Target(i).Offset(-1, 21).Copy Target(i).Offset(0, 21)
  36.     Next i
  37.     End If
  38. End Sub
复制代码
回复

使用道具 举报

发表于 2012-10-8 23:50 | 显示全部楼层    本楼为最佳答案   
2012年文化户口册.rar (34.02 KB, 下载次数: 179)
回复

使用道具 举报

 楼主| 发表于 2012-10-9 00:01 | 显示全部楼层
还要麻烦hwc2ycy老师,能不能改成当E列和T列不为空时,U列和V列就自动计算,而且,U列如果是两位数的话,比如10要返回一十,15要返回一十五这样的结果。拜托了,老师!
回复

使用道具 举报

 楼主| 发表于 2012-10-9 00:11 | 显示全部楼层
不在了吗?老师,这会儿也应该休息了,麻烦您明天再帮我看看吧,还有一个问题,计算年龄的截止日期是2012年8月31日,如果是2011.03出生的,应该是11周岁,如果是2011.09出生的,应该是10周岁。
回复

使用道具 举报

发表于 2012-10-9 07:45 | 显示全部楼层
cfyhqy 发表于 2012-10-9 00:11
不在了吗?老师,这会儿也应该休息了,麻烦您明天再帮我看看吧,还有一个问题,计算年龄的截止日期是2012年 ...

你日期格式要么按标准录入,yyyy/m/d的格式。
你现在的录入,就像是2011.08,这是成小数了。
ET不为空,代码里已经做了判断。
为空的情况下,UV自动清空了。
回复

使用道具 举报

发表于 2014-11-27 22:31 | 显示全部楼层
学习了,VBA比公式要强
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-27 13:26 , Processed in 0.396441 second(s), 11 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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