Excel精英培训网

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

[已解决]请教,如何实现批量,快速的转置。

[复制链接]
发表于 2017-5-2 13:51 | 显示全部楼层 |阅读模式
请教,如何实现批量,快速的转置。如图所示:把黄色区域变成红色区域的格式

最佳答案
2017-5-2 16:16
小学生124 发表于 2017-5-2 16:15
哦,谢谢。我不会vba。只会点excel函数的皮毛,开始一直想怎么通过函数来实现,开始的思路是:b列有空格 ...
  1. Option Explicit

  2. Sub TransposeData()
  3.     Dim arrRst(), arrSrc
  4.     Dim Ends&, lrow&
  5.     Dim iCnt%, EpyCnt%
  6.     Dim strText$
  7.     Ends = Cells(Rows.Count, 1).End(3).Row + 1
  8.     arrSrc = Range("b3:b" & Ends).Value
  9.     For lrow = 1 To UBound(arrSrc)
  10.         If arrSrc(lrow, 1) <> "" Then
  11.             EpyCnt = EpyCnt + 1
  12.             iCnt = iCnt + 1
  13.             ReDim Preserve arrRst(1 To iCnt)
  14.             arrRst(iCnt) = ""
  15.             strText = strText & arrSrc(lrow, 1) & ","
  16.         Else
  17.             iCnt = iCnt + 1
  18.             ReDim Preserve arrRst(1 To iCnt)
  19.             arrRst(iCnt - EpyCnt) = Left(strText, Len(strText) - 1)
  20.             strText = ""
  21.             EpyCnt = 0
  22.         End If
  23.     Next
  24.     Range("c2").Resize(iCnt) = Application.Transpose(arrRst)
  25.     Range("c2:c" & iCnt + 1).TextToColumns Destination:=Range("c2"), Comma:=True, TrailingMinusNumbers:=True
  26. End Sub
复制代码
不会自己就多花时间学,那要是没人帮你咋办呢,代码改了,拿去用吧
11111111.png
发表于 2017-5-2 14:20 | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 2017-5-2 14:27 | 显示全部楼层
Excel学徒123 发表于 2017-5-2 14:20
用代码吧,估计会快点

可以赐教下吗?谢谢。公司急的要,数据好多,我一个个转置要好久。可以教下吗。谢谢了
回复

使用道具 举报

发表于 2017-5-2 15:35 | 显示全部楼层
小学生124 发表于 2017-5-2 14:27
可以赐教下吗?谢谢。公司急的要,数据好多,我一个个转置要好久。可以教下吗。谢谢了

附件都不准备好,谁愿意给你弄?????
回复

使用道具 举报

 楼主| 发表于 2017-5-2 15:43 | 显示全部楼层
Excel学徒123 发表于 2017-5-2 15:35
附件都不准备好,谁愿意给你弄?????

不好意思,是我疏忽了,谢谢你。麻烦您教下我,谢谢。

Book1.rar

7.06 KB, 下载次数: 11

附件

回复

使用道具 举报

发表于 2017-5-2 15:56 | 显示全部楼层
本帖最后由 Excel学徒123 于 2017-5-2 15:58 编辑
小学生124 发表于 2017-5-2 15:43
不好意思,是我疏忽了,谢谢你。麻烦您教下我,谢谢。
  1. Option Explicit

  2. Sub TransposeData()
  3.     Dim arrRst(), arrSrc
  4.     Dim Ends&, lrow&
  5.     Dim iCnt%
  6.     Dim strText$
  7.     Ends = Cells(Rows.Count, 1).End(3).Row
  8.     arrSrc = Range("b3:b" & Ends).Value
  9.     For lrow = 1 To UBound(arrSrc)
  10.         If arrSrc(lrow, 1) <> "" Then
  11.             strText = strText & arrSrc(lrow, 1) & ","
  12.         Else
  13.             iCnt = iCnt + 1
  14.             ReDim Preserve arrRst(1 To iCnt)
  15.             arrRst(iCnt) = Left(strText, Len(strText) - 1)
  16.             strText = ""
  17.         End If
  18.     Next
  19.     Range("c2").Resize(iCnt) = Application.Transpose(arrRst)
  20.     Range("c2:c" & iCnt + 1).TextToColumns Destination:=Range("c2"), Comma:=True, TrailingMinusNumbers:=True
  21. End Sub
复制代码
怎么用代码就不用教了哈
QQ图片20170502155814.png
回复

使用道具 举报

 楼主| 发表于 2017-5-2 16:07 | 显示全部楼层
Excel学徒123 发表于 2017-5-2 15:56
怎么用代码就不用教了哈

恩,谢谢。大致就是这个意思,不过公司要求是每条转置记录对应到每条记录的空白处。如图所示(因为前面有分店的名称,要对应每分店)。请问下怎么实现
2222.png
回复

使用道具 举报

发表于 2017-5-2 16:08 | 显示全部楼层
自己再调了  不能干等答案
回复

使用道具 举报

 楼主| 发表于 2017-5-2 16:15 | 显示全部楼层
Excel学徒123 发表于 2017-5-2 16:08
自己再调了  不能干等答案

哦,谢谢。我不会vba。只会点excel函数的皮毛,开始一直想怎么通过函数来实现,开始的思路是:b列有空格就显示数据,显示几条数据根据相对应a列的数字来确定。结果显示在c列往后。尝试了offset,match,vlookup,这些查找函数,都实现不了。所以在网上发帖,向高手请教。
回复

使用道具 举报

发表于 2017-5-2 16:16 | 显示全部楼层    本楼为最佳答案   
小学生124 发表于 2017-5-2 16:15
哦,谢谢。我不会vba。只会点excel函数的皮毛,开始一直想怎么通过函数来实现,开始的思路是:b列有空格 ...
  1. Option Explicit

  2. Sub TransposeData()
  3.     Dim arrRst(), arrSrc
  4.     Dim Ends&, lrow&
  5.     Dim iCnt%, EpyCnt%
  6.     Dim strText$
  7.     Ends = Cells(Rows.Count, 1).End(3).Row + 1
  8.     arrSrc = Range("b3:b" & Ends).Value
  9.     For lrow = 1 To UBound(arrSrc)
  10.         If arrSrc(lrow, 1) <> "" Then
  11.             EpyCnt = EpyCnt + 1
  12.             iCnt = iCnt + 1
  13.             ReDim Preserve arrRst(1 To iCnt)
  14.             arrRst(iCnt) = ""
  15.             strText = strText & arrSrc(lrow, 1) & ","
  16.         Else
  17.             iCnt = iCnt + 1
  18.             ReDim Preserve arrRst(1 To iCnt)
  19.             arrRst(iCnt - EpyCnt) = Left(strText, Len(strText) - 1)
  20.             strText = ""
  21.             EpyCnt = 0
  22.         End If
  23.     Next
  24.     Range("c2").Resize(iCnt) = Application.Transpose(arrRst)
  25.     Range("c2:c" & iCnt + 1).TextToColumns Destination:=Range("c2"), Comma:=True, TrailingMinusNumbers:=True
  26. End Sub
复制代码
不会自己就多花时间学,那要是没人帮你咋办呢,代码改了,拿去用吧

评分

参与人数 2 +4 收起 理由
绿卡816-沸点 + 1 来学习
france723 + 3 来学习

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-28 03:48 , Processed in 0.405772 second(s), 8 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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