找回密碼
 註冊
|註冊|登錄

伊莉討論區

搜索
尊貴會員無限使用任何功能認識好友、聊天,分享生活趣事迅雷電影正式開放,齊來分享!
無碼rioncosplay暗殺教室火影忍者動物方城冰與火之
諾曼第大dasd 394mifd 028hjmo 368大嫌この不條寶可夢劍

休閒聊天興趣交流學術文化旅遊交流飲食交流家庭事務PC GAMETV GAME
熱門線上其他線上感情感性寵物交流家族門派動漫交流貼圖分享BL/GL
音樂世界影視娛樂女性頻道潮流資訊BT下載區GB下載區下載分享短片
電腦資訊數碼產品手機交流交易廣場網站事務長篇小說體育運動時事經濟
上班一族博彩娛樂
C & C++ 語言C# 語言Visual Basic 語言PHP 語言JAVA 語言
查看: 612|回復: 2

[求助] 請幫我簡化資料擷取時間並排序的步驟[複製鏈接]

Rank: 1

帖子
61
積分
89 點
潛水值
13577 米
發表於 2019-12-12 11:24 PM|顯示全部樓層
所有積分大於負-100的壞孩子,將可獲得重新機會成為懲罰生,權限跟幼兒生一樣。

原始資料為左邊,為了擷取出時間並補空號排序,目前我用了五個步驟,因此想請問各位高手,能更簡化嗎?
目前第一步:從原始資料右邊將數字擷取出來,並排序。


  1. Sub 留下數字()
  2.     For i = 1 To 30
  3.         '1.字數迴圈範圍
  4.         s = ""
  5.         For j = 1 To Len(Cells(i, "C"))
  6.             '2.判斷是否為數字
  7.             If VBA.Asc(Mid(Cells(i, "C"), j, 1)) > 47 And VBA.Asc(Mid(Cells(i, "C"), j, 1)) < 58 Then
  8.                 '3.如果是就+1
  9.                 s = s & Mid(Cells(i, "C"), j, 1)
  10.             End If
  11.         Next
  12.         '4.傳給B欄i列的儲存格
  13.         Cells(i, "B") = s
  14.     Next
  15.     Worksheets("簽到表").Range("C1:I30").ClearContents
  16.     Range("A1:B30").Select
  17. Selection.Sort Key1:=Range("B1"), Order1:=xlAscending, Header:=xlGuess, _
  18. OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _
  19. :=xlStroke, DataOption1:=xlSortNormal
  20. End Sub
複製代碼
第二步:為了擷取時間,利用空格將資料切成3分,為避免蓋掉剛剛擷取出的號碼,所以我先插入三行空白。
  1. Sub insert()
  2. With Range("B:D")
  3.     .insert xlShiftDown
  4.     .ClearFormats
  5. End With
  6. End Sub
複製代碼
第三步:利用資料中日期、上午、時間中的空格,將資料分成3分。只是這個寫法,資料較少時,有時會跳出偵錯;沒跳出偵錯,最後兩筆資料則沒分割到,只能手動貼上。
  1. Sub MySplit()

  2. For i = 1 To Len(Cells(1, "A"))
  3.   ' 取得原始資料
  4.   rawData = Cells(i, 1)

  5.   ' 使用 Split 分割欄位
  6.   fieldArray = Split(rawData, " ")

  7.   ' 將各個欄位填入對應的儲存格
  8.   For j = 0 To 2
  9.     Cells(i, j + 2).Value = fieldArray(j)
  10.   Next j
  11. Next i

  12. End Sub
複製代碼
第四步:刪除原來的時間資料根被分割出來的前兩欄資料。
  1. Sub delete()
  2. Columns("A:C").Select
  3. Selection.delete Shift:=xlToLeft
  4. End Sub
複製代碼
第五步:因為資料中間有跳號,所以將空號補齊。這個寫法如果開頭是4,他就會補齊4以後的空號,但1-3號就不會補,該怎麼修正才會從1號開始補齊呢?
  1. Sub 補空號()
  2.   Dim xRow&, xR As Range, j&, Jm&, Xm&
  3.   xRow = [B30].End(xlUp).Row
  4.   If xRow = 1 Then Exit Sub
  5.   Application.ScreenUpdating = False
  6.   '↓檢測缺號,補足列數及填入編號
  7.   For j = xRow - 1 To 2 Step -1
  8.       Set xR = Range("B" & j)
  9.       Xm = Val(xR(2)) - Val(xR)
  10.       If Xm > 1 Then
  11.         xR(2).Resize(Xm - 1).EntireRow.insert
  12.         xR.AutoFill Destination:=xR.Resize(Xm), Type:=xlFillSeries
  13.         Jm = Jm + Xm - 1
  14.       End If
  15.   Next j
  16.   Application.ScreenUpdating = True
  17.   End Sub
複製代碼
以上為小弟目前為了擷取資料,根據網路上可找到的資訊所使用了方式,不知道各位高手能幫小弟精簡這些步驟,謝謝!


...
瀏覽完整內容,請先 註冊登入會員
附件: 你需要登錄才可以下載或查看附件。沒有帳號?註冊

使用道具檢舉

Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6

帖子
111
積分
1289 點
潛水值
33565 米
發表於 2019-12-14 02:42 PM|顯示全部樓層
若有安裝色情守門員,可用無界、自由門等軟件瀏覽伊莉。或使用以下網址瀏覽伊莉: http://www.eyny.com:81/index.php
本帖最後由 tryit244178 於 2019-12-27 10:09 AM 編輯

這還不簡單,你只要這樣做
  1. Public Sub Simplify()
  2.         留下數字()
  3.         insert()
  4.         MySplit()
  5.         delete()
  6.         補空號()
  7. End Sub
複製代碼
你看,五個步驟就變成一個步驟了

話說這樣東找西找,能夠湊出來,你也蠻厲害的
提供另一個給你,不過有點小缺點…不難,你可以自已寫看看
  1. Public Sub GetTimeAndSort()
  2.    Dim index As Integer
  3.   
  4.    For i = 1 To 30
  5.       index = Int(Right(Cells(i, "C"), 2))
  6.       Worksheets("目的地").Range("A" & index) = Trim(Right(Cells(i, "A"), 8))
  7.       Worksheets("目的地").Range("B" & index) = Cells(i, "C")
  8.    Next
  9. End Sub
複製代碼
因為我現在跳槽到LibreOffice,沒在用一點都不硬的Office,所以沒辦法測程式碼對不對。
如果有錯就…自已改一下XD...
瀏覽完整內容,請先 註冊登入會員
哇~~是不會說謝謝的朋友~~
成為伊莉的版主,你將獲得更高級和無限的權限。把你感興趣的版面一步步地發展和豐盛,那種滿足感等著你來嚐嚐喔。

使用道具檢舉

Rank: 1

帖子
61
積分
89 點
潛水值
13577 米
發表於 2019-12-24 08:28 AM|顯示全部樓層
如果發覺自己無法使用一些功能或出現問題,請按重新整理一次,並待所有網頁內容完全載入後5秒才進行操作。
tryit244178 發表於 2019-12-14 02:42 PM
下載: 訪客無法瀏覽下載點,請先 註冊登入會員

這還不簡單,你只要這樣做你看,五個步驟就變成一個步驟了

話說這樣東找西找,能夠湊出來,你也蠻厲 ...

...
瀏覽完整內容,請先 註冊登入會員

點評

tryit244178 那個j要改成i  發表於 2019-12-24 10:18 AM

使用道具檢舉

您需要登錄後才可以回帖 登錄 | 註冊

Powered by Discuz!

© Comsenz Inc.

重要聲明:本討論區是以即時上載留言的方式運作,對所有留言的真實性、完整性及立場等,不負任何法律責任。而一切留言之言論只代表留言者個人意見,並非本網站之立場,用戶不應信賴內容,並應自行判斷內容之真實性。於有關情形下,用戶應尋求專業意見(如涉及醫療、法律或投資等問題)。 由於本討論區受到「即時上載留言」運作方式所規限,故不能完全監察所有留言,若讀者發現有留言出現問題,請聯絡我們。有權刪除任何留言及拒絕任何人士上載留言,同時亦有不刪除留言的權利。切勿撰寫粗言穢語、誹謗、渲染色情暴力或人身攻擊的言論,敬請自律。本網站保留一切法律權利。
回頂部