Excel精英培训网

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

[已解决]如何将A列文字变成C列文字

[复制链接]
发表于 2012-5-11 12:55 | 显示全部楼层 |阅读模式
本帖最后由 蓝天一片云 于 2012-5-12 13:26 编辑

将A列文字变成C列文字
变化规则
1.6个文字为一组将A列文字重新排列,第7个文字和第1个文字相同,第8个文字和第2个文字相同,第9个文字和第3个文字相同,以此类推.有相同的文字时必须对应上一组文字.(不够6个时插入空行,输入数字1)
2.没有相同文字时可随意排列.
最佳答案
2012-5-12 21:42

  1. Sub justT()
  2.     Dim D As New Dictionary, Arr, I&, K&, j As Byte
  3.     Dim Ar(1 To 60000, 1 To 1), Ar1, Ar2, M&, N&
  4.     Arr = Range([a1], [a1].End(4)).Value
  5.     For I = 1 To UBound(Arr)
  6.         D(Arr(I, 1)) = D(Arr(I, 1)) + 1
  7. Sub justT()
  8.     Dim D As New Dictionary, Arr, I&, K&, j As Byte
  9.     Dim Ar(1 To 60000, 1 To 1), Ar1, Ar2, M&, N&, U As Byte
  10.     Arr = Range([a1], [a1].End(4)).Value
  11.     For I = 1 To UBound(Arr)
  12.         D(Arr(I, 1)) = D(Arr(I, 1)) + 1
  13.     Next I
  14.     Ar1 = D.Keys: Ar2 = D.Items
  15.     For I = 0 To UBound(Ar1) Step 6
  16.         M = 0
  17.         If UBound(Ar1) - I < 5 Then
  18.             U = (UBound(Ar1) + 1) Mod 6
  19.         Else
  20.             U = 6
  21.         End If
  22.         For j = 0 To U - 1
  23.             If Ar2(I + j) > M Then M = Ar2(I + j)
  24.         Next j
  25.         For N = 1 To M
  26.             For j = 0 To U - 1
  27.                 K = K + 1
  28.                 If Ar2(I + j) < N Then
  29.                     Ar(K, 1) = 1
  30.                 Else
  31.                     Ar(K, 1) = Ar1(I + j)
  32.                 End If
  33.         Next j, N
  34.     Next I
  35.     Range([b1], [b1].End(4)).ClearContents
  36.     [b1].Resize(K, 1) = Ar
  37.     Set D = Nothing
  38.     MsgBox "&acute;&brvbar;&Agrave;í&Iacute;ê±&Iuml;&pound;&not;&Ccedil;&euml;&ordm;&Euml;&Ecirc;&micro;&pound;&iexcl;"
  39. End Sub
复制代码

在B列生成的结果,请看附件是否与你的要求相符。如果最后不足六个,只循环不足部分,不会以1进行填充。
数据排列512.rar (10.73 KB, 下载次数: 58)

数据排列512.rar

6.27 KB, 下载次数: 31

 楼主| 发表于 2012-5-11 14:25 | 显示全部楼层
回复

使用道具 举报

发表于 2012-5-12 17:37 | 显示全部楼层
蓝天一片云 发表于 2012-5-11 14:25
请高手出手相助。谢谢!

看不懂啥意思
回复

使用道具 举报

发表于 2012-5-12 21:42 | 显示全部楼层    本楼为最佳答案   

  1. Sub justT()
  2.     Dim D As New Dictionary, Arr, I&, K&, j As Byte
  3.     Dim Ar(1 To 60000, 1 To 1), Ar1, Ar2, M&, N&
  4.     Arr = Range([a1], [a1].End(4)).Value
  5.     For I = 1 To UBound(Arr)
  6.         D(Arr(I, 1)) = D(Arr(I, 1)) + 1
  7. Sub justT()
  8.     Dim D As New Dictionary, Arr, I&, K&, j As Byte
  9.     Dim Ar(1 To 60000, 1 To 1), Ar1, Ar2, M&, N&, U As Byte
  10.     Arr = Range([a1], [a1].End(4)).Value
  11.     For I = 1 To UBound(Arr)
  12.         D(Arr(I, 1)) = D(Arr(I, 1)) + 1
  13.     Next I
  14.     Ar1 = D.Keys: Ar2 = D.Items
  15.     For I = 0 To UBound(Ar1) Step 6
  16.         M = 0
  17.         If UBound(Ar1) - I < 5 Then
  18.             U = (UBound(Ar1) + 1) Mod 6
  19.         Else
  20.             U = 6
  21.         End If
  22.         For j = 0 To U - 1
  23.             If Ar2(I + j) > M Then M = Ar2(I + j)
  24.         Next j
  25.         For N = 1 To M
  26.             For j = 0 To U - 1
  27.                 K = K + 1
  28.                 If Ar2(I + j) < N Then
  29.                     Ar(K, 1) = 1
  30.                 Else
  31.                     Ar(K, 1) = Ar1(I + j)
  32.                 End If
  33.         Next j, N
  34.     Next I
  35.     Range([b1], [b1].End(4)).ClearContents
  36.     [b1].Resize(K, 1) = Ar
  37.     Set D = Nothing
  38.     MsgBox "&acute;&brvbar;&Agrave;í&Iacute;ê±&Iuml;&pound;&not;&Ccedil;&euml;&ordm;&Euml;&Ecirc;&micro;&pound;&iexcl;"
  39. End Sub
复制代码

在B列生成的结果,请看附件是否与你的要求相符。如果最后不足六个,只循环不足部分,不会以1进行填充。
数据排列512.rar (10.73 KB, 下载次数: 58)
回复

使用道具 举报

 楼主| 发表于 2012-5-13 02:57 | 显示全部楼层
liuguansky 发表于 2012-5-12 21:42
在B列生成的结果,请看附件是否与你的要求相符。如果最后不足六个,只循环不足部分,不会以1进行填充。
...


字典加数组运行的非常快。版主的功力就是不一样。厉害啊!
如果有多列数据时其它列数据如何根据A列数据变化?如何修改代码?谢谢!

数据排列5122.rar

11.14 KB, 下载次数: 16

回复

使用道具 举报

发表于 2012-6-13 13:09 | 显示全部楼层
数据排列5122.rar (14.92 KB, 下载次数: 20)
回复

使用道具 举报

 楼主| 发表于 2012-6-13 13:25 | 显示全部楼层
liuguansky 发表于 2012-6-13 13:09
试试,是这样的意思吗?

对。就是这种效果。谢谢版主老师!
这思路非常好!代码难度相当大。看了后也只是理解一点,完全理解可能需要一段时间。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-14 17:07 , Processed in 0.286736 second(s), 12 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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