資料剖析(TextToColumns)對象可以不是儲存格嗎?
- 帖子
- 41
- 主題
- 11
- 精華
- 0
- 積分
- 83
- 點名
- 0
- 作業系統
- windows
- 軟體版本
- xp
- 閱讀權限
- 20
- 註冊時間
- 2012-12-20
- 最後登錄
- 2019-12-17
|
資料剖析(TextToColumns)對象可以不是儲存格嗎?
請教各位前輩
Selection.TextToColumns
其中Selection似乎一定要是range,那有辦法直接對陣列變數進行資料剖析嗎?
ex:dim A(3) as double
A(0)="1,2,3"
想不透過sheet把資料剖析成A(1)=2、A(2)=2、A(3)=3
有辦法這樣做嗎?
謝謝 |
|
|
|
|
|
|
- 帖子
- 41
- 主題
- 11
- 精華
- 0
- 積分
- 83
- 點名
- 0
- 作業系統
- windows
- 軟體版本
- xp
- 閱讀權限
- 20
- 註冊時間
- 2012-12-20
- 最後登錄
- 2019-12-17
|
13#
發表於 2013-2-18 15:37
| 只看該作者
例如t = 6
if 的時候
if (t<="10") then....
會變成
if ("6"<="10") then....
而不是
if (6<=10) then....
kimbal 發表於 2013-2-16 17:07 
謝謝各位前輩,我暸解了!
但似乎一步一步執行程式,在If t <= 10跟If t <= "10"中t的型態都還是variant/Integer,可是實際上在If t <= "10"時VBA是用variant/String去判斷?- Sub test()
- Dim t As Variant
- For t = 1 To 10
- If t <= 10 Then MsgBox t & " <= 10"
- If t <= "10" Then MsgBox t & " <= 10"
- Next t
- End Sub
複製代碼 |
|
|
|
|
|
|
- 帖子
- 472
- 主題
- 5
- 精華
- 0
- 積分
- 485
- 點名
- 0
- 作業系統
- Windows
- 軟體版本
- MS Office
- 閱讀權限
- 100
- 性別
- 男
- 來自
- 香港
- 註冊時間
- 2010-7-4
- 最後登錄
- 2014-12-28

|
12#
發表於 2013-2-16 17:07
| 只看該作者
回復 GBKEE
謝謝G大,新年快樂,
圖中Variant/Integer不是代表此變數目前是Integer的狀態嗎 ...
chiata 發表於 2013-2-9 16:23 
t 是 variant/Integer 是對的.
但是當 在if 的時候
因為右方 "10" 是 文字, 不是數字, if會把t轉為文字再對比 (VBA來看, " "裡的是文字)
例如t = 6
if 的時候
if (t<="10") then....
會變成
if ("6"<="10") then....
而不是
if (6<=10) then....
而文字"6" 第1個字 即 "6" 比 "10"的第1個字 "1" 大
換句話說 "6"<="10" 就是等於FALSE
TEST要這樣寫才可以得出效果- Option Explicit '強制需宣告變數
- Sub test()
- Dim t As Integer
- For t = 1 To 110
- If t <= 15 Then MsgBox t
- Next t
- End Sub
- Sub test2()
- Dim t As Variant
- For t = 1 To 110
- If t <= 15 Then MsgBox t & " <= 10"
- Next t
- End Sub
複製代碼 不指明類型,是會比較方便些, 但是會增加像這樣的錯誤機會.
微軟近年來對Variant的方針也是變來變去. |
|
|
|
|
|
|
- 帖子
- 5923
- 主題
- 13
- 精華
- 1
- 積分
- 5986
- 點名
- 0
- 作業系統
- win10
- 軟體版本
- Office 2010
- 閱讀權限
- 150
- 性別
- 男
- 來自
- 台灣基隆
- 註冊時間
- 2010-5-1
- 最後登錄
- 2022-1-23
        
|
11#
發表於 2013-2-11 14:22
| 只看該作者
回復 10# chiata - Sub test1()
- Dim t As Integer
- For t = 1 To 110
- If t <= "9" Then MsgBox t & " <= 9"
- If t <= "10" Then MsgBox t & " <= 10"
- Next t
- End Sub
- Sub test2()
- 't 沒有明確宣告
- For t = 1 To 110
- If t > "30" Then MsgBox t & " > 30" '當t<=9 為1位數 比對字串的第一位 "3"
- If t <= "9" Then MsgBox t & " <= 9" '當t<=9 為1位數 比對字串的第一位 "9"
- If t <= "10" Then MsgBox t & " <= 10" '當t<=9 為1位數 比對字串的第一位 "1"
- MsgBox TypeName(t)
- Next t
- End Sub
複製代碼 |
|
|
|
|
|
|
- 帖子
- 41
- 主題
- 11
- 精華
- 0
- 積分
- 83
- 點名
- 0
- 作業系統
- windows
- 軟體版本
- xp
- 閱讀權限
- 20
- 註冊時間
- 2012-12-20
- 最後登錄
- 2019-12-17
|
10#
發表於 2013-2-9 16:23
| 只看該作者
回復 9# GBKEE
謝謝G大,新年快樂,
圖中Variant/Integer不是代表此變數目前是Integer的狀態嗎?
我以為Variant是先埠指定變數型態,待程式執行後會自動判斷此變數合適型態,例如integer、string...等,使用上比較有彈性。
還是我觀念錯誤?? |
|
|
|
|
|
|
- 帖子
- 5923
- 主題
- 13
- 精華
- 1
- 積分
- 5986
- 點名
- 0
- 作業系統
- win10
- 軟體版本
- Office 2010
- 閱讀權限
- 150
- 性別
- 男
- 來自
- 台灣基隆
- 註冊時間
- 2010-5-1
- 最後登錄
- 2022-1-23
        
|
9#
發表於 2013-2-9 15:24
| 只看該作者
回復 8# chiata
你沒有宣告 變數t的型態為數字,vba將視為 字串的對字串的比對- Option Explicit '強制需宣告變數
- Sub test()
- Dim t As Integer
- For t = 1 To 110
- If t <= "15" Then MsgBox t
- Next t
- End Sub
- Sub test2()
- Dim t As Variant ' Variant 資料型態是所有沒被明確宣告為其他型態 **等同沒有宣告變數***
- For t = 1 To 110
- If t <= "10" Then MsgBox t & " <= 10"
- If t <= "20" Then MsgBox t & " <= 20"
- If t <= "30" Then MsgBox t & " <= 30"
- Next t
- End Sub
複製代碼 |
|
|
|
|
|
|
- 帖子
- 41
- 主題
- 11
- 精華
- 0
- 積分
- 83
- 點名
- 0
- 作業系統
- windows
- 軟體版本
- xp
- 閱讀權限
- 20
- 註冊時間
- 2012-12-20
- 最後登錄
- 2019-12-17
|
8#
發表於 2013-2-8 14:10
| 只看該作者
回復 7# GBKEE - Sub test()
- For t = 1 To 110
- If t <= "10" Then MsgBox t
- Next t
-
- End Sub
- Sub test2()
- For t = 1 To 110
- If t <= Val("10") Then MsgBox t
- Next t
-
- End Sub
複製代碼 小弟遇到的問題...test只有t=1跟10會跳msgbox出來,test2就t=1~10都會跳,不知道是哪邊出問題...
謝謝 |
|
|
|
|
|
|
- 帖子
- 5923
- 主題
- 13
- 精華
- 1
- 積分
- 5986
- 點名
- 0
- 作業系統
- win10
- 軟體版本
- Office 2010
- 閱讀權限
- 150
- 性別
- 男
- 來自
- 台灣基隆
- 註冊時間
- 2010-5-1
- 最後登錄
- 2022-1-23
        
|
7#
發表於 2013-2-5 16:36
| 只看該作者
本帖最後由 GBKEE 於 2013-2-5 16:37 編輯
回復 6# chiata
使用發現字串可以運算,但不能做<、=、>等判斷- Option Explicit
- Sub Ex()
- Dim A As String, B As Variant
- A = "A5"
- B = "10"
- ' MsgBox A * B '** VBA 傳回: 錯誤值13 "型態不符合"
- If IsNumeric(A) And IsNumeric(B) Then MsgBox A * B Else MsgBox "型態不符合"
- A = "5"
- B = "10"
- If IsNumeric(A) And IsNumeric(B) Then MsgBox A * B Else MsgBox "型態不符合"
- A = "1,2,3,4,5,6,7,8,9,10"
- B = Split(A, ",")
- MsgBox B(0) * B(UBound(B))
- MsgBox B(0) < B(UBound(B)) '1 < 10 =True
- MsgBox B(0) > B(UBound(B)) '1 > 10 =False
- MsgBox B(0) = B(UBound(B)) '1 = 10 =False
- A = "1,2,3,4,5,6,7,8,9,A10"
- B = Split(A, ",")
- MsgBox B(0) * B(UBound(B)) '** VBA 傳回: 錯誤值13 "型態不符合"
- End Sub
複製代碼 |
|
|
|
|
|
|
- 帖子
- 41
- 主題
- 11
- 精華
- 0
- 積分
- 83
- 點名
- 0
- 作業系統
- windows
- 軟體版本
- xp
- 閱讀權限
- 20
- 註冊時間
- 2012-12-20
- 最後登錄
- 2019-12-17
|
6#
發表於 2013-2-5 16:24
| 只看該作者
回復 5# Hsieh
謝謝,我理解了!
剛剛使用發現字串可以運算,但不能做<、=、>等判斷,只能要判斷時使用val或是像H大所說的存成另一個陣列來使用。 |
|
|
|
|
|
|