Excel精英培训网

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

[已解决]求vb

[复制链接]
发表于 2013-11-18 13:14 | 显示全部楼层 |阅读模式
本帖最后由 lkjhuy 于 2013-11-18 15:56 编辑

Book2.xls.rar (5.8 KB, 下载次数: 14)
发表于 2013-11-18 13:34 | 显示全部楼层
回复

使用道具 举报

发表于 2013-11-18 14:48 | 显示全部楼层
  1. Sub t()
  2. Dim arr(), brr(), i As Byte, d3 As String, counter As Byte
  3. d3 = Range("D3").Value
  4. arr = Range("B3:B11").Value
  5. For i = 1 To UBound(arr)
  6.   If InStr(d3, Right(CLng(Mid(arr(i, 1), 1, 1)) + Mid(arr(i, 1), 2, 1), 1)) = 0 And _
  7. InStr(d3, Right(CLng(Mid(arr(i, 1), 1, 1)) + Mid(arr(i, 1), 3, 1), 1)) = 0 And _
  8. InStr(d3, Right(CLng(Mid(arr(i, 1), 2, 1)) + Mid(arr(i, 1), 3, 1), 1)) = 0 Then
  9.     counter = counter + 1
  10.     ReDim Preserve brr(1 To counter)
  11.     brr(counter) = arr(i, 1)
  12.   End If
  13. Next
  14. Range("A1:A" & UBound(brr)) = Application.Transpose(brr)
  15. End Sub
复制代码
我比较笨,那个任意两位数的和。。。。,就这么写写算了
回复

使用道具 举报

 楼主| 发表于 2013-11-18 15:37 | 显示全部楼层
xdragon 发表于 2013-11-18 14:48
我比较笨,那个任意两位数的和。。。。,就这么写写算了

1,b列数据加到b1002格就会报错,

2,放的位置改成a列有数据的下一格开始放,
回复

使用道具 举报

发表于 2013-11-18 15:38 | 显示全部楼层    本楼为最佳答案   
  1. Dim sr1(1 To 3), sr2(1 To 4), m&, n&, x&, y&
  2. Dim j As Byte
  3. Dim arr, brr()
  4. arr = Range("b3:b" & Range("b" & Rows.Count).End(3).Row)
  5. y = Range("d3")
  6. For m = 1 To UBound(arr)
  7.     For n = 1 To Len(arr(m, 1))
  8.         sr1(n) = Mid(arr(m, 1), n, 1)
  9.     Next n
  10.         
  11.     For x = 1 To 4
  12.             sr2(x) = Mid(y, x, 1)
  13.     Next x
  14.    
  15.     For j = 1 To 4
  16.         If (Val(sr1(1)) + Val(sr1(2))) Mod 10 = sr2(j) Or (Val(sr1(1)) + Val(sr1(3))) Mod 10 = sr2(j) _
  17.         Or (Val(sr1(2)) + Val(sr1(3))) Mod 10 = sr2(j) Then GoTo p
  18.     Next j

  19.             k = k + 1
  20.             ReDim Preserve brr(1 To k)
  21.             brr(k) = arr(m, 1)

  22. p:
  23. Next m
  24.             Range("a1").Resize(UBound(brr)) = Application.Transpose(brr)
  25. End Sub
复制代码
回复

使用道具 举报

发表于 2013-11-18 15:42 | 显示全部楼层
lkjhuy 发表于 2013-11-18 15:37
1,b列数据加到b1002格就会报错,

2,放的位置改成a列有数据的下一格开始放,

第一问没看懂你的意思哦。。。
第二个问题你只要把最后的代码改成

cells(cells(rows.count,1).end(3).row+1,1).resize(ubound(brr))=application.transpose(brr)

就行了。
回复

使用道具 举报

 楼主| 发表于 2013-11-18 15:50 | 显示全部楼层
yyyydddd8888 发表于 2013-11-18 15:38

d3里不是固定4位,大约是1到9位数
回复

使用道具 举报

发表于 2013-11-18 15:59 | 显示全部楼层
lkjhuy 发表于 2013-11-18 15:50
d3里不是固定4位,大约是1到9位数

大概知道你的问题1是什么意思了。
建议你去看下变量的定义基础。。。把byte(0到255)改成integer(-32767到32767)能最多支持3w多行,改成long则能支持目前excel的最大行数。
回复

使用道具 举报

发表于 2013-11-18 18:03 | 显示全部楼层
本帖最后由 yyyydddd8888 于 2013-11-18 18:04 编辑
lkjhuy 发表于 2013-11-18 15:50
d3里不是固定4位,大约是1到9位数

只需要改动一句就行
  1. Dim sr1(1 To 3), sr2(1 To 4), m&, n&, x&, y&
  2. Dim j As Byte
  3. Dim arr, brr()
  4. arr = Range("b3:b" & Range("b" & Rows.Count).End(3).Row)
  5. y = Range("d3")
  6. For m = 1 To UBound(arr)
  7.     For n = 1 To Len(arr(m, 1))
  8.         sr1(n) = Mid(arr(m, 1), n, 1)
  9.     Next n
  10.         
  11.     For x = 1 To len(y)
  12.             sr2(x) = Mid(y, x, 1)
  13.     Next x
  14.    
  15.     For j = 1 To len(y)
  16.         If (Val(sr1(1)) + Val(sr1(2))) Mod 10 = sr2(j) Or (Val(sr1(1)) + Val(sr1(3))) Mod 10 = sr2(j) _
  17.         Or (Val(sr1(2)) + Val(sr1(3))) Mod 10 = sr2(j) Then GoTo p
  18.     Next j

  19.             k = k + 1
  20.             ReDim Preserve brr(1 To k)
  21.             brr(k) = arr(m, 1)

  22. p:
  23. Next m
  24.             Range("a1").Resize(UBound(brr)) = Application.Transpose(brr)
  25. End Sub
复制代码
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-12 04:55 , Processed in 0.271638 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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