Excel精英培训网

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

[已解决]求助2个VBA

[复制链接]
发表于 2017-6-8 11:35 | 显示全部楼层 |阅读模式
本帖最后由 mate33 于 2017-6-9 13:47 编辑

求助2个VBA
最佳答案
2017-6-9 13:07
Sub 正向()
    arr = Range("e1:e" & [e65536].End(3).Row)
    For i = 1 To UBound(arr)
        x = arr(i, 1)
        For m = 1 To Len(x)
            xstr = xstr & Mid(x, m, 1)
        Next
    Next
    'xstr = StrReverse(xstr)   '加此句则为反向(字符串反转)
   
    Set d = CreateObject("scripting.dictionary")
    brr = Range("f1:f" & [f65536].End(3).Row + 1)
    For i = 1 To UBound(brr)
        If Len(brr(i, 1)) > 0 Then d(brr(i, 1)) = ""
    Next
   
    ReDim crr(1 To 1000, 1 To 1)
    For n = 0 To 999
        p = (n + 1) Mod Len(xstr)
        If p = 0 Then p = Len(xstr)
        myF = Val(Mid(xstr, p, 1))
        If d.exists(myF) Then
            k = k + 1
            crr(k, 1) = n
        End If
    Next
   
    [H:H].Clear
    If k > 0 Then [H1].Resize(k) = crr
    [H1].Resize(k).NumberFormatLocal = "000"
End Sub

2个代码222.rar

33.84 KB, 下载次数: 9

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2017-6-8 14:15 | 显示全部楼层
  1. Sub 正向()
  2.     arr = Range("e1:e" & [e65536].End(3).Row)
  3.     For i = 1 To UBound(arr)
  4.         x = arr(i, 1)
  5.         For m = 1 To Len(x)
  6.             xstr = xstr & Mid(x, m, 1)
  7.         Next
  8.     Next
  9.     'xstr = StrReverse(xstr)   '加此句则为反向(字符串反转)
  10.    
  11.     Set d = CreateObject("scripting.dictionary")
  12.     brr = Range("f1:f" & [f65536].End(3).Row)
  13.     For i = 1 To UBound(brr)
  14.         d(brr(i, 1)) = ""
  15.     Next
  16.    
  17.     ReDim crr(1 To 1001, 1 To 1)
  18.     For n = 0 To 1000
  19.         p = (n + 1) Mod Len(xstr)
  20.         If p = 0 Then p = Len(xstr)
  21.         myF = Val(Mid(xstr, p, 1))
  22.         If d.exists(myF) Then
  23.             k = k + 1
  24.             crr(k, 1) = n
  25.         End If
  26.     Next
  27.    
  28.     [H:H].Clear
  29.     If k > 0 Then [H1].Resize(k) = crr
  30.     [H1].Resize(k).NumberFormatLocal = "000"
  31. End Sub
复制代码

2个代码222.rar

51.69 KB, 下载次数: 6

回复

使用道具 举报

 楼主| 发表于 2017-6-8 14:29 | 显示全部楼层
本帖最后由 mate33 于 2017-6-8 15:08 编辑

发现有2个小错误,麻烦老师看下。
1.H列提取的结果有的时候会多了一个1000,编号是000-999,最大编号只999 。麻烦老师看下。
2.当F列给定的数据只一个数字时,代码错误,不能运行。


2个代码666.rar

41.37 KB, 下载次数: 5

回复

使用道具 举报

 楼主| 发表于 2017-6-8 20:44 | 显示全部楼层
再顶下求解。
回复

使用道具 举报

 楼主| 发表于 2017-6-8 21:58 | 显示全部楼层
有没老师完善下代码的
回复

使用道具 举报

发表于 2017-6-9 13:07 | 显示全部楼层    本楼为最佳答案   
Sub 正向()
    arr = Range("e1:e" & [e65536].End(3).Row)
    For i = 1 To UBound(arr)
        x = arr(i, 1)
        For m = 1 To Len(x)
            xstr = xstr & Mid(x, m, 1)
        Next
    Next
    'xstr = StrReverse(xstr)   '加此句则为反向(字符串反转)
   
    Set d = CreateObject("scripting.dictionary")
    brr = Range("f1:f" & [f65536].End(3).Row + 1)
    For i = 1 To UBound(brr)
        If Len(brr(i, 1)) > 0 Then d(brr(i, 1)) = ""
    Next
   
    ReDim crr(1 To 1000, 1 To 1)
    For n = 0 To 999
        p = (n + 1) Mod Len(xstr)
        If p = 0 Then p = Len(xstr)
        myF = Val(Mid(xstr, p, 1))
        If d.exists(myF) Then
            k = k + 1
            crr(k, 1) = n
        End If
    Next
   
    [H:H].Clear
    If k > 0 Then [H1].Resize(k) = crr
    [H1].Resize(k).NumberFormatLocal = "000"
End Sub
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-26 02:04 , Processed in 0.419269 second(s), 9 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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