ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 6707|回复: 13

[求助] 将一行中户主后家庭成员依次与户主排在一列

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-8-5 17:16 | 显示全部楼层 |阅读模式
附件工作簿2中将一行中户主后家庭成员及身份证号码分别排列到每户户主C列与身份证号D列两列。数据量大,有没有什么公式可以解决。

工作簿2.zip

7.56 KB, 下载次数: 87

TA的精华主题

TA的得分主题

发表于 2019-8-5 19:54 | 显示全部楼层
PQ参考解法
ScreenShot.PNG

工作簿2.rar

19.48 KB, 下载次数: 45

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2019-8-5 23:31 | 显示全部楼层
路过而已   无需搞那么复杂

Sub test()
Dim arr, brr(1 To 10000, 1 To 7)
With Sheets("Sheet1")
  arr = .[a1].CurrentRegion.Value
  For i = 2 To UBound(arr)
    m = m + 1
    For j = 1 To UBound(arr, 2) - 1
      If j > 7 Then
        If j Mod 2 = 0 Then
          If Len(arr(i, j)) > 0 Then
            m = m + 1
            brr(m, 3) = arr(i, j)
            brr(m, 4) = arr(i, j + 1)
          End If
        End If
      Else
        brr(m, j) = arr(i, j)
      End If
    Next
  Next
  .Range("a13").Resize(10000, 7).ClearContents
  .Range("a13").Resize(m, 6) = brr
End With
MsgBox "OK!", 64
End Sub


评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2019-8-5 23:32 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-8-6 11:24 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
abc123281您好,我不懂VB,我使用你给我的VB程序,运行时显示下标错误“9”。我的数据c列(也就是户主姓名列)就有5915列,家庭成员最多有8人。还有就是“领取保障金额”列怎么不显示金额。

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-8-6 11:25 | 显示全部楼层

abc123281您好,我不懂VB,我使用你给我的VB程序,运行时显示下标错误“9”。我的数据c列(也就是户主姓名列)就有5915列,家庭成员最多有8人。还有就是“领取保障金额”列怎么不显示金额。谢谢!

TA的精华主题

TA的得分主题

发表于 2019-8-6 11:36 | 显示全部楼层
你好  应该是有5915行吧   那肯定越界了
找到这个 Dim arr, brr(1 To 100000, 1 To 7)  更改一下
如果还有问题 qq联系 675762718

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2019-8-6 11:54 | 显示全部楼层
Sub TEST()
Dim Arr, Brr, i&, j%, N&
Arr = Sheets("Sheet1").UsedRange
ReDim Brr(1 To 20000, 1 To 7)
For i = 2 To UBound(Arr)
    N = N + 1
    For j = 1 To 7: Brr(N, j) = Arr(i, j): Next
    For j = 8 To UBound(Arr, 2) Step 2
        If Arr(i, j) & Arr(i, j + 1) = "" Then GoTo 101
        N = N + 1: Brr(N, 3) = Arr(i, j): Brr(N, 4) = Arr(i, j + 1)
101: Next j
Next i
Sheets("Sheet2").UsedRange.Offset(1, 0).EntireRow.Delete
With [Sheet2!A2].Resize(N, 7)
      .Value = Brr
      .Borders.LineStyle = 1
      Application.Goto .Item(1)
End With
End Sub

Xl0000626.rar (10.33 KB, 下载次数: 56)


======================

TA的精华主题

TA的得分主题

发表于 2019-8-6 12:07 | 显示全部楼层
“领取保障金额”列怎么不显示金额的原因  小小失误

.Range("a13").Resize(m, 6) = brr  更改为  .Range("a13").Resize(m, 7) = brr

TA的精华主题

TA的得分主题

发表于 2019-8-6 12:08 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
数组重新组合123.rar (10.25 KB, 下载次数: 77)
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-9-28 03:26 , Processed in 0.041143 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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