標題:
[發問]
有關資料剖析
[打印本頁]
作者:
tommy.lin
時間:
2012-3-27 11:23
標題:
有關資料剖析
想要教Column A(整欄位)的資料分割到B/C/D 欄位
A欄位資料內容為日期格式 使用VB寫的話應該怎麼寫?分割依據為"/" 但是沒法順利切割開
不知道我寫的是否正確想請教板上專家
Sub AA()
Range("A:A").TextToColumns Destination:=Range("B"), OtherChar _
:="/"
End Sub
作者:
hugh0620
時間:
2012-3-27 11:42
本帖最後由 hugh0620 於 2012-3-27 11:47 編輯
回復
1#
tommy.lin
A欄位是日期格式~ 代表的就是年月日
你要拆解的BCD欄位也就是年月日~
用一般最簡單的方式~來拆解就可以了~
若你A資料是從資料庫倒出來的~ 可能會是文字格式~有可能要修改一下~
如果可以~ 請提供資料的範例~
Sub EX_1()
For Each a In Range("A:A")
If a <> "" Then
a.Offset(0, 1) = Year(a)
a.Offset(0, 2) = Month(a)
a.Offset(0, 3) = Day(a)
End If
Next
End Sub
複製代碼
作者:
tommy.lin
時間:
2012-3-27 11:48
回復
2#
hugh0620
檔案已上傳
作者:
hugh0620
時間:
2012-3-27 12:03
本帖最後由 hugh0620 於 2012-3-27 12:17 編輯
回復
3#
tommy.lin
B欄位~ 請改成數值格式~
題供兩種方式給你參考~
Sub EX_1()
For Each a In Range("A2:A65536")
If a <> "" Then
a.Offset(0, 1) = Year(a)
a.Offset(0, 2) = Month(a)
a.Offset(0, 3) = Day(a)
End If
Next
End Sub
複製代碼
Sub xx() '將字串分割成子字串
For Each a In Range("A:A")
h = Split(a, "/", 3, vbDatabaseCompare)
i = 1
For Each b In h
a.Offset(columnoffset:=i) = b
i = i + 1
Next
Next
End Sub
複製代碼
作者:
tommy.lin
時間:
2012-3-27 13:04
可以了...Thanks lots..不過看不懂語法
作者:
mark15jill
時間:
2012-3-27 13:35
本帖最後由 mark15jill 於 2012-3-27 13:36 編輯
回復
5#
tommy.lin
直接把程式丟進VBA內..
sub xxg
Columns("a:a").Select
Selection.TextToColumns Destination:=Range("G1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
:="/", FieldInfo:=Array(Array(1, 2), Array(2, 2), Array(3, 2)), _
TrailingMinusNumbers:=True
end sub
作用:用 / 為判斷符號 加以切割
作者:
tommy.lin
時間:
2012-3-27 13:52
我有試著用巨集錄製成上面這樣子但實際執行時會出現error....
作者:
mark15jill
時間:
2012-3-27 15:41
本帖最後由 mark15jill 於 2012-3-27 15:49 編輯
回復
7#
tommy.lin
麻煩貼圖 看哪邊有錯..
Sub xyw()
Columns("g:g").Select
Selection.TextToColumns Destination:=Range("m1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
:="/", FieldInfo:=Array(Array(3, 2), Array(2, 2), Array(1, 2)), _
TrailingMinusNumbers:=True
sy = Columns("o:o").Value
Columns("t:t") = sy
sm = Columns("n:n").Value
Columns("u:u") = sm
sd = Columns("m:m").Value
Columns("v:v") = sd
Columns("m:o").Clear
End Sub
作者:
tommy.lin
時間:
2012-3-28 10:10
問題好像解開了...原本我有四個日期欄位需要資料剖析原本錄製的方式是一次全部做完
但是好像會有錯亂的現象(執行到一半卡住或是後面的插入欄位錯位)我的步驟如下
在每個日期欄位後面插入五個空白欄位資料剖析後刪除最後兩個預留欄位.以上步驟重覆四次
後來我分四次錄製在串接起來沒有錯誤發生.anyway 感謝板上高手協助
作者:
freeffly
時間:
2012-3-28 16:47
回復
4#
hugh0620
大大下面兩的可以解釋一下嗎
vbDatabaseCompare & columnoffset
不太曉得用法
作者:
GBKEE
時間:
2012-3-28 17:09
回復
10#
freeffly
VBA 的說明
Split 函數 傳回一個陳列索引從零開始的一維陣列,它包含指定數目的子字串。
語法
Split(expression[, delimiter[, limit[, compare]]])
Split 函數語法有如下幾個指名引數:
請查看VBA 的說明
Offset 屬性 傳回 Range 物件,用以代表某個指定區域以外的範圍。唯讀。
expression.Offset(RowOffset, ColumnOffset)
expression 必選。該運算式傳回 Range 物件。
RowOffset 選擇性的 Variant。用列數表示的區域位移 (正值、負數或零 (0))。正值表示向下位移,負值表示向上位移。預設值為 0。
ColumnOffset 選擇性的 Variant。用欄數表示的區域位移 (整數、負數或 0 (零))。正值表示右位移,負值表示左。預設值為 0。
Option Explicit
Sub Ex() '將字串分割成子字串
Dim A As Range
'SpecialCells 方法 此物件代表與指定型態及值相符合的所有儲存格。Range 物件。
For Each A In Range("A:A").SpecialCells(xlCellTypeConstants) 'xlCellTypeConstants。包含常數的儲存格
'If IsDate(A) Then '是日期型態
If InStr(A, "/") Then '字串中有 "/"
'InStr 函數 傳回在某字串中一字串的最先出現位置,此位置為 Variant (Long)。
With A.Offset(, 1).Resize(, 3)
'以A.Offset(, 1):[B欄],Resize(, 3):擴充3欄的Range範圍
.Value = Split(A, "/") '以 "/" 分割字串
.Value = .Value '變更為數字
End With
'Split 函數 傳回一個陳列索引從零開始的一維陣列 , 它包含指定數目的子字串
End If
Next
End Sub
複製代碼
作者:
freeffly
時間:
2012-3-28 17:36
回復
11#
GBKEE
謝謝版主解釋
好像還要花點時間理解
先收下來慢慢品嚐一下
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)