1樓:
Option
Explicit
Subtest
()Dim
dict
AsObject
Setdict
=CreateObject
("Scripting.dictionary"
)Dim
RowCount,i
,j,Arr
(),FamilyNo
,Brr,ub
,ubm
RowCount
=Sheets
("源資料"
).UsedRange
.Rows
.Count-1
Arr=
Sheets
("源資料"
).Range
(Sheets
("源資料"
).Cells(2
,1),Sheets
("源資料"
).Cells
(RowCount+1
,10)).Value
Fori=1
ToRowCount
FamilyNo
=Arr(i
,3)If
dict
.Exists
(FamilyNo
)Then
Brr=
dict
(FamilyNo)ub
=UBound
(Brr)If
ubm>=ub+
4Then
Else
ubm=ub+
4End
IfReDim
Preserve
Brr(1To
ub+4)
Forj=1
To4Brr(ub+
j)=Arr(i
,j+6
)Next
dict
(FamilyNo)=
BrrElse
ReDim
Brr(1To
10)Forj=1
To10
Brr(j)
=Arr(i
,j)'
Next
dict
.Add
FamilyNo
,Brr
EndIf
Next
Dimcrr
,drr
crr=
dict
.Items
()ReDim
drr(0To
UBound
(crr)-
LBound
(crr)+
1,1To
ubm)
drr(0,
1)="村"
drr(0,
2)="組別"
drr(0,
3)="戶號"
drr(0,
4)="人口"
drr(0,
5)="戶主"
drr(0,
6)="戶主身份證"
Forj=7
Toubm
Step4On
Error
Resume
Next
drr(0,
j)="成員"
&Int((j
-3)/
4)drr(0,
j+1)
="成員身份證"
&Int((j
-3)/
4)drr(0,
j+2)
="關係"
drr(0,
j+3)
="性別"
OnError
GoTo
0Next
Fori=1
ToUBound
(drr
)Forj=
1ToubmOn
Error
Resume
Next
drr(i,
j)=crr(i
)(j)On
Error
GoTo
0Next
Next
Sheets
("需要的結果資料"
).Range
("A1"
).Resize
(UBound
(drr)+
1,ubm)
=drr
EndSub
2樓:啃烤紅薯
有個半手工方法,新增乙個輔助列,對戶主排序,得到戶主甲1、 戶主甲2...,分別對應相對的戶成員。
然後在結果表分別預設戶成員1、 戶成員2...,根據情況設定滿足最多個成員的數量, 然後做個資料透視表,把所有的戶主粘過去,再根據列名去匹配就好了。
3樓:
大致看了下,給你說說vba大概的流程
counta 獲取不為空的行數。
max人口列,獲取最大的人口數量(用於生成結果列表表頭)根據你的格式需求生成表頭
迴圈所有的戶號,獲取所有成員資訊
判斷成員是否戶主
根據判斷結果來決定成員資訊填寫到哪一列
填充其他位址等資訊完工
如何設定Excel函式使其根據上下班時間自動統計出上班時長 加班時長?
按照題主的意思和需求,不考慮特別複雜情況 跨日期下班 用公式解決。D列星期通過weekday獲取日期的星期序數,用來判定是星期幾。兩層if巢狀,先判斷是否是工作日還是週末,週末則上班時間判0,加班時間直接計算。工作日則上班時間等於下班減上班,再判斷下班時間是否早於指定時間,若不早於則再減去加班時間,...
excel中如何根據一列關鍵字自動補充其他列
沐雨 先把這些對應關係放到一張小表裡,然後在正式表裡用VLOOKUP函式,把對應關係引用過來即可。假定第一列為學號,第二列為姓名,根據第一列輸入的內容自動填充第二列的方法 首先在另一工作表sheet2中先建立學號與姓名對照表,資料分別在A列和B列。然後在本工作表第二列設定好公式,當在第一列輸入內容且...
excel內容如何反轉?
選中你要翻轉的內容,複製,右鍵,選擇性貼上,下面有個轉置,前面打鉤,確定,就行了 Excel入門 http www. 被困擾過好久,excel用陣列公式組合大量文字似乎不可行,所以你要反轉的是文字的話,除非用vba,否則應該是沒有什麼辦法的,如果是純數字可以直接用陣列公式來做。示例如下 把想要反轉的...