Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
楼主: 灯盏

[已解决]如何根据excel单元格内的一个值自动生成到另一个sheet内的行

[复制链接]
发表于 2017-4-17 20:57 | 显示全部楼层
附件里面栋楼名称和单元格总数调换了位置,当然不能套用原代码。
回复

使用道具 举报

 楼主| 发表于 2017-4-19 08:28 | 显示全部楼层
大灰狼1976 发表于 2017-4-17 20:57
附件里面栋楼名称和单元格总数调换了位置,当然不能套用原代码。

  我按照这个代码的格式更换的  位置和单元格的总数改怎么操作呢   总是出现  错误"9”

回复

使用道具 举报

 楼主| 发表于 2017-4-19 08:30 | 显示全部楼层
大灰狼1976 发表于 2017-4-17 20:57
附件里面栋楼名称和单元格总数调换了位置,当然不能套用原代码。

Private Sub CommandButton1_Click()
Dim n&, s$, i&, j&, arr, brr, r&
arr = [b11:c14]
ReDim brr(1 To Application.Product(Application.Index(arr, , 1)), 1 To 2)
For i = 1 To UBound(arr)
  If arr(i, 1) > 0 Then
    n = arr(i, 1)
    s = arr(i, 2)
    For j = 1 To n
      r = r + 1
      brr(r, 1) = s
      brr(r, 2) = s & j
    Next j
  End If
Next i
[c16].Resize(r, 2) = brr
End Sub





回复

使用道具 举报

 楼主| 发表于 2017-4-19 09:15 | 显示全部楼层
大灰狼1976 发表于 2017-4-17 20:57
附件里面栋楼名称和单元格总数调换了位置,当然不能套用原代码。

如何定义位置和范围呢?大神

回复

使用道具 举报

 楼主| 发表于 2017-4-19 09:28 | 显示全部楼层
大灰狼1976 发表于 2017-4-17 20:57
附件里面栋楼名称和单元格总数调换了位置,当然不能套用原代码。

   不懂arr 和brr  这个数组到底是什么关系,还有application这里

回复

使用道具 举报

发表于 2017-4-19 11:09 | 显示全部楼层
arr是源数据数组,brr是结果数组。
另,你两列对调以后,s和n对应的值也要调换一下才行。
回复

使用道具 举报

 楼主| 发表于 2017-4-19 11:21 | 显示全部楼层
大灰狼1976 发表于 2017-4-19 11:09
arr是源数据数组,brr是结果数组。
另,你两列对调以后,s和n对应的值也要调换一下才行。

Private Sub CommandButton1_Click()
Dim n&, s$, i&, j&, arr, brr, r&
arr = [b11:c47]
ReDim brr(1 To Application.Product(Application.Index(arr, , 1)), 1 To 2)
For i = 1 To UBound(arr)
  If arr(i, 1) > 0 Then
    s = arr(i, 1)
    n = arr(i, 2)
    For j = 1 To n
      r = r + 1
      brr(r, 1) = s
      brr(r, 2) = j
    Next j
  End If
Next i
[b49].Resize(r, 2) = brr
End Sub
调换了位置出现这个错误

回复

使用道具 举报

 楼主| 发表于 2017-4-19 11:26 | 显示全部楼层
灯盏 发表于 2017-4-19 11:21
Private Sub CommandButton1_Click()
Dim n&, s$, i&, j&, arr, brr, r&
arr =

S   N   哪里换一下位置呢?     看不太懂,大神给我改一下,我在研究研究?  不理解主要

回复

使用道具 举报

发表于 2017-4-19 11:41 | 显示全部楼层
  1. Private Sub CommandButton1_Click()
  2. Dim n&, s$, i&, j&, arr, brr, r&
  3. arr = [b11:c14]    '源数据装入数组arr
  4. ReDim brr(1 To Application.Product(Application.Index(arr, , 1)), 1 To 2)    '确定结果数组大小,一维下标为单元总数合计,这里我错了,应该是加不是乘,所以Product要改成Sum,
  5. '至于index是用来取数组的局部数据,这里取数组第1列数据,即单元总数
  6. For i = 1 To UBound(arr)   '循环体,遍历源数据数组
  7.   If arr(i, 1) > 0 Then    '无数据时不执行
  8.     n = arr(i, 1)          '将单元总数赋值给变量n
  9.     s = arr(i, 2)          '将楼栋名称赋值给变量s
  10.     For j = 1 To n         '变量j从1循环递增至n,也即单元总数
  11.       r = r + 1            '结果数组行号加1(通俗讲法)
  12.       brr(r, 1) = s        '结果数组第1列赋值单元名称
  13.       brr(r, 2) = s & j    '结果数组第2列赋值单元名称+单元号,通过j循环将单元号从1递增至n,即单元总数
  14.     Next j                 'j循环
  15.   End If
  16. Next i
  17. [c16].Resize(r, 2) = brr   '结果数组输出至以[C16]为首的单元格区域
  18. End Sub
复制代码
回复

使用道具 举报

发表于 2017-4-19 11:47 | 显示全部楼层
我把我的附件根据你的要求做了修改,请确认。
需要理解代码后才能套用至其他表。
  1. Private Sub CommandButton1_Click()
  2. Dim n&, s$, i&, j&, arr, brr, r&
  3. arr = [b2:c5]
  4. ReDim brr(1 To Application.Sum(Application.Index(arr, , 2)), 1 To 2)
  5. For i = 1 To UBound(arr)
  6.   If arr(i, 1) > 0 Then
  7.     n = arr(i, 2)
  8.     s = arr(i, 1)
  9.     For j = 1 To n
  10.       r = r + 1
  11.       brr(r, 1) = s
  12.       brr(r, 2) = j
  13.     Next j
  14.   End If
  15. Next i
  16. [c7].Resize(r, 2) = brr
  17. End Sub
复制代码

test.zip

11.37 KB, 下载次数: 1

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-4 13:06 , Processed in 0.322647 second(s), 11 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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