Excel精英培训网

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

[已解决]VBA求改动下显示结果的位置

[复制链接]
发表于 2012-5-5 14:33 | 显示全部楼层 |阅读模式
Sub YYY8()
    Set d = CreateObject("scripting.dictionary")
    For Each RN In Range("A136:L500")
        If Not d.Exists(RN.Value) Then
            d.Add RN.Value, 1
        Else
            d(RN.Value) = d(RN.Value) + 1
        End If
    Next
    k = d.Keys
    s = d.Items
    ReDim arr(1 To UBound(s) + 1)
    For i = 0 To UBound(s)
        If s(i) > 2 And s(i) < 11 Then
            t = t + 1
            arr(t) = k(i) * 1
        End If        
    Next
    ReDim m(1 To t)
    For i = 1 To t
        m(i) = Format(Application.Small(arr, i), "000")
    Next i
    Range("AA136:AA2000").ClearContents
    Range("AA136").Resize(t, 1) = Application.Transpose(m)
    Range("AA136").NumberFormatLocal = "@"
End Sub
                  想把固定放在AA列的结果改成从AA136到BB哪列没有数据就放哪列里,



最佳答案
2012-5-5 15:55
本帖最后由 mxg825 于 2012-5-5 16:28 编辑

我调试正常呀。。。。。。。。。。

Sub YYY8()
    Set d = CreateObject("scripting.dictionary")
    For Each RN In Range("A136:L500")
        If Not d.Exists(RN.Value) Then
            d.Add RN.Value, 1
        Else
            d(RN.Value) = d(RN.Value) + 1
        End If
    Next
    k = d.Keys
    s = d.Items
    ReDim arr(1 To UBound(s) + 1)
    For i = 0 To UBound(s)
        If s(i) > 2 And s(i) < 11 Then
            t = t + 1
            arr(t) = k(i) * 1
        End If
    Next
    ReDim m(1 To t)
    For i = 1 To t
        m(i) = Format(Application.Small(arr, i), "000")
    Next i
'********以下是修改填写部分代码********
Dim C%
For C = 27 To 54 'AA-BB列
If Application.CountA(Cells(136, C).Resize(t, 1)) = 0 Then
With Cells(136, C)
    .Resize(t, 1) = Application.Transpose(m)
    .Resize(t, 1) .NumberFormatLocal = "@"
    End With
Exit Sub
End If
Next
MsgBox "没地方可放"
End Sub

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2012-5-5 14:48 | 显示全部楼层
Sub YYY8()
    Set d = CreateObject("scripting.dictionary")
    For Each RN In Range("A136:L500")
        If Not d.Exists(RN.Value) Then
            d.Add RN.Value, 1
        Else
            d(RN.Value) = d(RN.Value) + 1
        End If
    Next
    k = d.Keys
    s = d.Items
    ReDim arr(1 To UBound(s) + 1)
    For i = 0 To UBound(s)
        If s(i) > 2 And s(i) < 11 Then
            t = t + 1
            arr(t) = k(i) * 1
        End If
    Next
    ReDim m(1 To t)
    For i = 1 To t
        m(i) = Format(Application.Small(arr, i), "000")
    Next i
    Dim C%
    C = UsedRange.Columns.Count '有内容区域最大【列】号
    With Cells(136, C)
    .Resize(t, 1) = Application.Transpose(m)
    .NumberFormatLocal = "@"
    End With
End Sub
回复

使用道具 举报

发表于 2012-5-5 14:48 | 显示全部楼层
要是都没有呢??都放啊

Range("AA136:AA2000").ClearContents


这里已经清除了,所以这个地方是具有优先权的,如果只放一列的话,这里是首选的


{:101:}
回复

使用道具 举报

 楼主| 发表于 2012-5-5 15:07 | 显示全部楼层
mxg825 发表于 2012-5-5 14:48
Sub YYY8()
    Set d = CreateObject("scripting.dictionary")
    For Each RN In Range("A136:L500")
...

运行错误424,我的意思是如果AA136列无数据就放AA136列,有就向后面一列放
回复

使用道具 举报

发表于 2012-5-5 15:22 | 显示全部楼层
本帖最后由 mxg825 于 2012-5-5 16:28 编辑

请看7楼。。。。,,,,,
回复

使用道具 举报

 楼主| 发表于 2012-5-5 15:43 | 显示全部楼层
mxg825 发表于 2012-5-5 15:22
Sub YYY8()
    Set d = CreateObject("scripting.dictionary")
    For Each RN In Range("A136:L500")
...

可能还是有问题,当AA136无数时放AA列正确,当AA136有数时它应该放AB列,AB136还有数就放AC列(这样轮过去),不是当AA136有数就提示没地方放,AA136到BB只有几列有数,一定有空列
回复

使用道具 举报

发表于 2012-5-5 15:55 | 显示全部楼层    本楼为最佳答案   
本帖最后由 mxg825 于 2012-5-5 16:28 编辑

我调试正常呀。。。。。。。。。。

Sub YYY8()
    Set d = CreateObject("scripting.dictionary")
    For Each RN In Range("A136:L500")
        If Not d.Exists(RN.Value) Then
            d.Add RN.Value, 1
        Else
            d(RN.Value) = d(RN.Value) + 1
        End If
    Next
    k = d.Keys
    s = d.Items
    ReDim arr(1 To UBound(s) + 1)
    For i = 0 To UBound(s)
        If s(i) > 2 And s(i) < 11 Then
            t = t + 1
            arr(t) = k(i) * 1
        End If
    Next
    ReDim m(1 To t)
    For i = 1 To t
        m(i) = Format(Application.Small(arr, i), "000")
    Next i
'********以下是修改填写部分代码********
Dim C%
For C = 27 To 54 'AA-BB列
If Application.CountA(Cells(136, C).Resize(t, 1)) = 0 Then
With Cells(136, C)
    .Resize(t, 1) = Application.Transpose(m)
    .Resize(t, 1) .NumberFormatLocal = "@"
    End With
Exit Sub
End If
Next
MsgBox "没地方可放"
End Sub

回复

使用道具 举报

发表于 2012-5-5 16:26 | 显示全部楼层
楼主:最佳要 贴到5楼!才正确!
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-14 05:21 , Processed in 0.271385 second(s), 12 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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