Excel精英培训网

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

[已解决]如何用VBA实现

[复制链接]
发表于 2013-3-29 20:21 | 显示全部楼层 |阅读模式
如何用VBA实现单元格内容的转移
最佳答案
2013-3-29 20:41
  1. Sub test()
  2.     Dim arr
  3.     Dim str$
  4.     Dim i As Byte, j As Byte
  5.     arr = Range("a1:g10")
  6.     For i = 1 To UBound(arr)
  7.         str = ""
  8.         For j = LBound(arr) To UBound(arr, 2)
  9.             str = str & arr(i, j)
  10.             arr(i, j) = ""
  11.         Next

  12.         For j = 1 To Len(str)
  13.             arr(i, j) = Mid$(str, j, 1)
  14.         Next

  15.     Next
  16.     Range("a1:g10") = arr
  17. End Sub
复制代码

测试表.zip

6.67 KB, 下载次数: 24

发表于 2013-3-29 20:41 | 显示全部楼层    本楼为最佳答案   
  1. Sub test()
  2.     Dim arr
  3.     Dim str$
  4.     Dim i As Byte, j As Byte
  5.     arr = Range("a1:g10")
  6.     For i = 1 To UBound(arr)
  7.         str = ""
  8.         For j = LBound(arr) To UBound(arr, 2)
  9.             str = str & arr(i, j)
  10.             arr(i, j) = ""
  11.         Next

  12.         For j = 1 To Len(str)
  13.             arr(i, j) = Mid$(str, j, 1)
  14.         Next

  15.     Next
  16.     Range("a1:g10") = arr
  17. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2013-3-29 20:54 | 显示全部楼层
回复

使用道具 举报

发表于 2013-3-29 21:58 | 显示全部楼层
hwc2ycy   老师是可望不可即的  
回复

使用道具 举报

发表于 2013-3-29 21:59 | 显示全部楼层
fengdavid 发表于 2013-3-29 20:54
美丽姐姐真是神速啊

hwc2ycy 老师  不是男的吗  怎么变成姐姐了?
回复

使用道具 举报

 楼主| 发表于 2013-3-29 22:15 | 显示全部楼层
呵呵,头像那么漂亮
回复

使用道具 举报

发表于 2013-3-30 08:33 | 显示全部楼层
  1. Sub test()
  2.     Dim arr
  3.     Dim str$
  4.     Dim i As Byte, j As Byte
  5.     arr = Range("a1:g10")
  6.     Dim k As Byte
  7.     k = UBound(arr, 2)
  8.     For i = 1 To UBound(arr)
  9.         str = Join(WorksheetFunction.Index(arr, i, 0), "")
  10.         str = str & Space(k - Len(str))
  11.         For j = 1 To Len(str)
  12.             arr(i, j) = Mid$(str, j, 1)
  13.         Next
  14.         str = ""
  15.     Next
  16.     Range("a1:g10") = arr
  17. End Sub
复制代码
这样可以少一个循环了。
回复

使用道具 举报

 楼主| 发表于 2013-4-4 21:10 | 显示全部楼层
hwc2ycy 发表于 2013-3-30 08:33
这样可以少一个循环了。

刚才复习这个代码的时候发现一个问题,当单元格内的文本为多个字符时,它会把文本分拆开,比如A2=123,那运行后A1=1、A2=2、A3=3里,我的本意是要A1=123。
回复

使用道具 举报

发表于 2013-4-4 21:17 | 显示全部楼层
fengdavid 发表于 2013-4-4 21:10
刚才复习这个代码的时候发现一个问题,当单元格内的文本为多个字符时,它会把文本分拆开,比如A2=123,那 ...

我看看。
回复

使用道具 举报

发表于 2013-4-4 21:58 | 显示全部楼层
fengdavid 发表于 2013-4-4 21:10
刚才复习这个代码的时候发现一个问题,当单元格内的文本为多个字符时,它会把文本分拆开,比如A2=123,那 ...
  1. Sub test2()
  2.     Dim arr
  3.     Dim str$
  4.     Dim i As Byte, j As Byte
  5.     Dim lastCol As Byte
  6.     arr = Range("a1:g10")
  7.     Dim k As Byte
  8.     k = UBound(arr, 2)
  9.     For i = 1 To UBound(arr)
  10.         lastCol = 1
  11.         For j = LBound(arr, 2) To UBound(arr, 2)
  12.             If Len(arr(i, j)) > 0 Then
  13.                 Do While lastCol < j
  14.                     If Len(arr(i, lastCol)) = 0 Then
  15.                         arr(i, lastCol) = arr(i, j)
  16.                         arr(i, j) = ""
  17.                         lastCol = lastCol + 1
  18.                         Exit Do
  19.                     End If
  20.                     lastCol = lastCol + 1
  21.                 Loop
  22.             End If
  23.         Next
  24.     Next
  25.     Stop
  26.     Range("a1:g10") = arr
  27. End Sub
复制代码
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-28 22:48 , Processed in 0.661461 second(s), 11 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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