標題:
[發問]
如何轉置並重組資料排列方式
[打印本頁]
作者:
luke
時間:
2012-7-6 00:35
標題:
如何轉置並重組資料排列方式
各位大大
A:C欄為區塊資料, 每個區塊有3或5資料列(中間以空白列隔開).
將區塊資料轉置至E:I欄並對各區塊進行重組方式如下:
1.C欄儲存格要由中文字後面算, 取全部的英文字和其他字元.
如:C2儲存格 "站牌接駁運送組99LA68XY美而美"
要取 "99LA68XY美而美" (紅字所示)
C3儲存格 "等候停車亭CC1-B18Z1"
要取 "CC1-B18Z1" (紅字所示)
餘此類推.....
2.完成第1點後進行資料全面轉置作業, 若該區塊資料列為3 列, 填
入E,F和 I 欄 (如藍色弧線所示) , 若區塊資料列為5列, 同前述方
式依序填進 E ~ I 欄
3. E ~ I 欄為完成後顯示資料.
因區塊資料列常做修改, 如何利用VBA寫出程式?
煩請先進 大大指導
[attach]11595[/attach]
作者:
Hsieh
時間:
2012-7-6 10:36
回復
1#
luke
Sub ex()
Dim Rng As Range, r&, ar(), i%, j%, k%, n%, m$
Set Rng = Range("A:C").SpecialCells(xlCellTypeConstants)
r = 2
For i = 1 To Rng.Areas.Count
ar = Rng.Areas(i).Value
For j = 1 To UBound(ar, 1)
k = 1
Do Until Asc(Mid(ar(j, 3), k)) >= 1 And Asc(Mid(ar(j, 3), k)) <= 256
k = k + 1
Loop
m = Mid(ar(j, 3), k)
n = Application.Match(ar(j, 1), Array("巴士", "站牌起點", "站牌中繼A", "站牌中繼B", "站牌終點"), 0)
Cells(r, n + 4).Resize(3, 1) = Application.Transpose(Array(ar(j, 1), m, ar(j, 2)))
Next
r = r + 3
Next
End Sub
複製代碼
作者:
luke
時間:
2012-7-7 15:18
回復
2#
Hsieh
謝謝H大
若C欄區塊資料中部分有英文字開頭如 "XY" (粉紅字所示), 說明如下:
1.C1儲存格 "XY站牌接駁運送組99LA68XY美而美"
要取 "99LA68XY美而美" (紅字所示)
C7儲存格 "XY等候停車亭CC1-B25 Z1"
要取 "CC1-B25 Z1" (紅字所示)
C14儲存格 "XY短暫休息OAK-B21"
要取 "OAK-B21" (紅字所示)
2.進行轉置重組後. E ~ I 欄顯示資料不變的話, 應 如何修改VBA程式?
煩請先進 大大指導
[attach]11610[/attach]
作者:
GBKEE
時間:
2012-7-7 17:08
回復
3#
luke
Option Explicit
Sub Ex()
Dim Ar(2 To 3), E As Range
With sheet1
Ar(2) = .Columns(2) 'B欄資料 置入陣列
Ar(3) = .Columns(3) 'C欄資料 置入陣列
.Columns(2) = Ar(3) 'B欄資料轉成C欄資料
.Columns(3) = Ar(2) 'C欄資料轉成B欄資料
.Columns(2).Replace "*運送組", "" 'B欄資料 消除字串 *運送組
.Columns(2).Replace "*停車亭", "" 'B欄資料 消除字串 *停車亭
.Columns(2).Replace "*休息", "" 'B欄資料 消除字串 *休息
.Range("E:I").Clear
For Each E In .Range("A:C").SpecialCells(xlCellTypeConstants).Areas
'Areas 屬性 傳回 Areas 集合,此集合代表多重範圍中的所有範圍。唯讀。
E.Copy '複製
With .Range("E" & .Rows.Count).End(xlUp).Offset(1) 'E欄由下往上
.PasteSpecial , Transpose:=True '轉置
If .Cells(1, 3) = "站牌終點" Then .Cells(1, 3).Resize(3).Cut Destination:=.Cells(1, 5)
.Resize(3, 5).Borders.LineStyle = xlNone '消除框線
.Resize(3, 5).BorderAround 1 '製定外框線
End With
Next
.Range("E:I").EntireColumn.AutoFit
.Range("E1").Select
.Columns(2) = Ar(2) '還原B欄資料
.Columns(3) = Ar(3) '還原C欄資料
End With
End Sub
複製代碼
作者:
Hsieh
時間:
2012-7-8 00:13
回復
3#
luke
Sub ex()
Dim Rng As Range, r&, ar(), i%, j%, k%, n%, m$
Set Rng = Range("A:C").SpecialCells(xlCellTypeConstants)
r = 2
For i = 1 To Rng.Areas.Count
ar = Rng.Areas(i).Value
For j = 1 To UBound(ar, 1)
k = 1
Do Until (Asc(Mid(ar(j, 3), k)) < 0 Or Asc(Mid(ar(j, 3), k)) > 256) And Asc(Mid(ar(j, 3), k + 1)) >= 0 And Asc(Mid(ar(j, 3), k + 1)) <= 256
k = k + 1
Loop
m = Mid(ar(j, 3), k + 1)
n = Application.Match(ar(j, 1), Array("巴士", "站牌起點", "站牌中繼A", "站牌中繼B", "站牌終點"), 0)
Cells(r, n + 4).Resize(3, 1) = Application.Transpose(Array(ar(j, 1), m, ar(j, 2)))
Next
r = r + 3
Next
End Sub
複製代碼
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)