找回密碼 或 安全提問
 註冊
|註冊|登錄

伊莉討論區

搜索
感激所有對伊莉作出奉獻的人發表文章前請先閱讀相關版規尊貴會員無限下載附件
ge火影忍者mega 無中文adobe
犬夜叉:傲慢な怪身為要的是小廢土3cammy夏休み明

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

(4月新番)[繁]為美好

(4月新番)[簡]怪異與

[超清繁中]霹靂英雄戰

(4月新番)[繁]狼與辛

[繁]怪異與少女與神隱

[繁]格林童話變奏曲02
C & C++ 語言C# 語言Visual Basic 語言PHP 語言JAVA 語言
查看: 2084|回復: 1
打印上一主題下一主題

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

Rank: 1

帖子
66
積分
91 點
潛水值
17187 米
跳轉到指定樓層
樓主
發表於 2019-12-12 11:24 PM|顯示全部樓層|倒序瀏覽
如果發覺自己無法使用一些功能或出現問題,請按重新整理一次,並待所有網頁內容完全載入後5秒才進行操作。

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


  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
複製代碼
以上為小弟目前為了擷取資料,根據網路上可找到的資訊所使用了方式,不知道各位高手能幫小弟精簡這些步驟,謝謝!


...
瀏覽完整內容,請先 註冊登入會員
附件: 你需要登錄才可以下載或查看附件。沒有帳號?註冊
分享分享0收藏收藏0支持支持0
成為伊莉的版主,你將獲得更高級和無限的權限。把你感興趣的版面一步步地發展和豐盛,那種滿足感等著你來嚐嚐喔。

使用道具檢舉

Rank: 1

帖子
66
積分
91 點
潛水值
17187 米
頭香
發表於 2019-12-24 08:28 AM|顯示全部樓層
tryit244178 發表於 2019-12-14 02:42 PM
下載: 訪客無法瀏覽下載點,請先 註冊登入會員

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

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

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

點評

tryit244178 那個j要改成i  發表於 2019-12-24 10:18 AM
所有積分大於負-100的壞孩子,將可獲得重新機會成為懲罰生,權限跟幼兒生一樣。

使用道具檢舉

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

Powered by Discuz!

© Comsenz Inc.

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