Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
123
返回列表 发新帖
楼主: yizhih

[已解决]请教数组提取问题

[复制链接]
发表于 2013-1-29 14:03 | 显示全部楼层
==,这个也不难的。
回复

使用道具 举报

发表于 2013-1-29 14:04 | 显示全部楼层
你把两个代码都整到要改的数据里,再发上来,我改下。
电脑上没有现成的。
回复

使用道具 举报

 楼主| 发表于 2013-1-29 17:45 | 显示全部楼层
hwc2ycy 发表于 2013-1-29 14:04
你把两个代码都整到要改的数据里,再发上来,我改下。
电脑上没有现成的。

万分感谢 hwc2ycy 老师。
将提取1和提取2放到了一个压缩包内了。
提取1和提取2.rar (134.79 KB, 下载次数: 4)
回复

使用道具 举报

发表于 2013-1-29 18:45 | 显示全部楼层
我跟你提个建议啊,听不听,接受不接受是你的事。

我不知道你是做什么职业的,这数据是从何而来的。如果是手工输入的,千万不要整这种数据,后期处理会不知会带来多少麻烦。如果需要数字前不足位的显示0,你可以用自定义格式。
这种前面加0的,后期如果要用代码处理,再想保留0再写回到单元格,就要多很多操作。其实这个0只有显示的作用,计算毫无意义 。

回复

使用道具 举报

 楼主| 发表于 2013-1-29 20:25 | 显示全部楼层
hwc2ycy 发表于 2013-1-29 18:45
我跟你提个建议啊,听不听,接受不接受是你的事。

我不知道你是做什么职业的,这数据是从何而来的。如果 ...

前面加0只是好看,没有实际意义,今后不加了。

点评

呵呵,你可以用自定义格式。像你的表格,后面J列0能正常显示是因为已经改了单元格的类型为自定义了。  发表于 2013-1-29 22:17
回复

使用道具 举报

发表于 2013-1-29 20:46 | 显示全部楼层
  1. Sub 提取1()
  2. '---------------------------------------------------------------------------------------
  3. ' Procedure : 提取1
  4. ' Author    : hwc2ycy
  5. ' Date      : 2013/1/29
  6. ' Purpose   :所有数据再分列
  7. '---------------------------------------------------------------------------------------
  8. '
  9.     Dim ShtArr, arr(1 To 6, 1 To 1)
  10.     Dim iRow&, i&, j&, k&, iRow2&, iCol&
  11.     Dim shtMerge1$, DestShtArr
  12.     Dim shtPos&
  13.     shtMerge1 = "合并"
  14.     ShtArr = Array("主表格", "主表格1", "主表格2", "主表格3", "主表格4", "主表格5")
  15.     DestShtArr = Array("合并", "合并1", "合并2", "合并3", "合并4")
  16.     Application.ScreenUpdating = False

  17.     With Worksheets(ShtArr(0))
  18.         iRow = .Cells(Rows.Count, "au").End(xlUp).Row
  19.         iCol = .Cells(16, Columns.Count).End(xlToLeft).Column
  20.     End With

  21.     For k = 47 To 55 Step 2
  22.         Worksheets(DestShtArr(shtPos)).Columns("j").Clear
  23.         For i = 16 To iRow
  24.             Erase arr
  25.             For j = 0 To UBound(ShtArr)
  26.                 arr(j + 1, 1) = Worksheets(ShtArr(j)).Cells(i, k)
  27.                 If Len(arr(j + 1, 1)) = 0 Then arr(j + 1, 1) = " "
  28.             Next j

  29.             With Worksheets(DestShtArr(shtPos))
  30.                 iRow2 = .Cells(Rows.Count, "j").End(xlUp).Row + 1
  31.                 If iRow2 < 6 Then iRow2 = 6
  32.                 '.Cells(iRow2, "j").Resize(6) = arr
  33.                 For Each arritem In arr
  34.                     If Len(arritem) Then
  35.                         arrtemp = Split(arritem, " ")
  36.                         .Cells(iRow2, "j").Resize(, UBound(arrtemp) + 1) = arrtemp
  37.                     Else
  38.                         .Cells(iRow2, "j") = arritem
  39.                     End If
  40.                     iRow2 = iRow2 + 1
  41.                 Next
  42.                 .Columns("j").AutoFit
  43.                 .Columns("j").HorizontalAlignment = xlLeft
  44.             End With
  45.         Next i
  46.         shtPos = shtPos + 1
  47.     Next k
  48.     Application.ScreenUpdating = True
  49.     MsgBox "提取完成"
  50. End Sub
复制代码
回复

使用道具 举报

发表于 2013-1-29 22:18 | 显示全部楼层
提取2好像不需要分列吧。
回复

使用道具 举报

 楼主| 发表于 2013-1-29 22:56 | 显示全部楼层
本帖最后由 yizhih 于 2013-1-29 22:57 编辑
hwc2ycy 发表于 2013-1-29 22:18
提取2好像不需要分列吧。


提取2不需要分列

提取1测试发现:“合并”、“合并1”正确,但是:“合并2”、“合并3”、“合并4”提取的不正确,我把不正确的地方标注了出来。
旁边是手工正确的提取。
谢谢hwc2ycy老师。辛苦了。
提取1.rar (214.03 KB, 下载次数: 1)
回复

使用道具 举报

发表于 2013-1-29 23:01 | 显示全部楼层
应该是数值的问题,一样的算法。
明天帮你看吧。
回复

使用道具 举报

 楼主| 发表于 2013-1-29 23:02 | 显示全部楼层
hwc2ycy 发表于 2013-1-29 23:01
应该是数值的问题,一样的算法。
明天帮你看吧。

           谢谢!
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-3 01:40 , Processed in 0.336220 second(s), 14 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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