返回列表 上一主題 發帖

修改程式

修改程式

因檔案越來越大, 目的資料己到了115000筆, 而每個月的來源資料至少都有9000多筆, 用以下的程式來run, 每次都要跑2~3小時.
不知高手們是否可以教導修改程式,可以讓資料的輸入速度可以快一些 ?


Public put_column, row_clear, row_index, put_row, row_search As Long
Sub 抓資料()
put_column = Sheets("作業區").Range("b1").Value
Sheets("Summary").Activate
ans0 = MsgBox("確定是Load至【" & put_column & "】欄嗎?", vbYesNo, "請確認")
If ans0 <> 6 Then

    Sheets("作業區").Activate
    Range("b1").Select
    ans2 = MsgBox("請重新輸入正確的欄位!")
    End
End If
ans = MsgBox("要清空 【" & put_column & "】欄的資料嗎?" & Chr(13) & Chr(13) & "【是】→ 清空,再放入數據" & Chr(13) & Chr(13) & "【否】→ 不清空,數據繼續累加", vbYesNo, "請確認")
If ans = 6 Then
    row_clear = 3
    While Cells(row_clear, 1).Value <> ""
        row_clear = row_clear + 1
    Wend
    Range(put_column & Format(3) & ":" & put_column & Format(row_clear)).ClearContents
    load_data
Else
    load_data
End If
End Sub
Sub load_data()
row_index = 2
'從data的第二列開始尋找,一直找至Total為止
While Left(Sheets("data").Cells(row_index, 9).Value, 5) <> "Total"
    Prod = Sheets("data").Cells(row_index, 3).Value
    If Prod = "Electro-Dip" Or Prod = "Electro" Then
        '將四個欄位連結起來
        data_four_column = Sheets("data").Cells(row_index, 2).Value & Sheets("data").Cells(row_index, 3).Value & Sheets("data").Cells(row_index, 4).Value & Sheets("data").Cells(row_index, 9).Value
        '如果Summary的a3儲存格是空白
        If Sheets("Summary").Cells(3, 1).Value = "" Then
        '就直接將找到的第一筆資料放進第三列
            Sheets("Summary").Cells(3, 1).Value = Sheets("data").Cells(row_index, 2).Value
            Sheets("Summary").Cells(3, 2).Value = Sheets("data").Cells(row_index, 3).Value
            Sheets("Summary").Cells(3, 3).Value = Sheets("data").Cells(row_index, 4).Value
            Sheets("Summary").Cells(3, 4).Value = Sheets("data").Cells(row_index, 9).Value
            Sheets("Summary").Range(put_column & Format(3)).Value = Sheets("data").Cells(row_index, 10).Value
        '否則
        Else
            '從第三列開始找起
            row_search = 3
            got_it = False
            '一直找到空白為止
            While Sheets("Summary").Cells(row_search, 1).Value <> ""
                '將Summary的四個欄位連結起來
                four_column = Sheets("Summary").Cells(row_search, 1).Value & Sheets("Summary").Cells(row_search, 2).Value & Sheets("Summary").Cells(row_search, 3).Value & Sheets("Summary").Cells(row_search, 4).Value
                '如果在data找到的資料跟在Summary找到的相同,就把數量相加
                If data_four_column = four_column Then
                    got_it = True
                    Sheets("Summary").Range(put_column & Format(row_search)).Value = Sheets("Summary").Range(put_column & Format(row_search)).Value + Sheets("data").Cells(row_index, 10).Value
                End If
                    row_search = row_search + 1
            Wend
            '如果沒有找到相同的
            If got_it = False Then
                '就在最後一列新增一筆
                Sheets("Summary").Cells(row_search, 1).Value = Sheets("data").Cells(row_index, 2).Value
                Sheets("Summary").Cells(row_search, 2).Value = Sheets("data").Cells(row_index, 3).Value
                Sheets("Summary").Cells(row_search, 3).Value = Sheets("data").Cells(row_index, 4).Value
                Sheets("Summary").Cells(row_search, 4).Value = Sheets("data").Cells(row_index, 9).Value
                Sheets("Summary").Range(put_column & Format(row_search)).Value = Sheets("data").Cells(row_index, 10).Value
                row_search = row_search + 1
            End If
        End If
    End If
    row_index = row_index + 1
Wend
ans = MsgBox("已完成!")
End Sub

程式修改.zip (435.06 KB)

fangac

回復 2# GBKEE

感謝版主的指導, 但這樣改好像只是將來源資料從目的工作表的最後一列開始load資料
並沒有去比對4個key值如果相同的話,就放進指定的欄位, 如果找不到4個key值,就到目前資料的最後一列新增一筆.
           將Summary的四個欄位連結起來
           如果在data找到的資料跟在Summary找到的相同,就把數量相加
           如果沒有找到相同的
            就在最後一列新增一筆

程式修改.zip (435.06 KB)

fangac

TOP

回復 4# GBKEE

不好意思,請見附檔. 謝謝.

程式修改.zip (585.35 KB)

fangac

TOP

回復 6# GBKEE

感謝版主,原本要run 2~3小時,現在只要3秒.實在厲害. 真的好比是兎子跟烏龜的速度相比.令人望塵莫及.
不過要看懂你的程式, 我還要認真的研讀.
因為目地工作表的列資料太大,發生"溢位"的錯誤訊息, 所以我將 row_search As Integer 改為 Long.
感謝!!
fangac

TOP

回復 8# Hsieh

感謝版主,真的超級厲害的快,想說按下執行鍵,可以拿起杯子喝口水,哪知杯子還沒到嘴邊,程式就跑完了.
程式看起來還是難懂, 要認真的爬文了.  謝謝哦!!
fangac

TOP

        靜思自在 : 一個人不怕錯,就怕不改過,改過並不難。
返回列表 上一主題