台灣最大程式設計社群網站
線上人數
884
 
會員總數:245217
討論主題:189089
歡迎您免費加入會員
討論區列表 >> office VBA / WinOS >> VBA新手請求協助簡化, 我寫的內容會跑到當機, 公司電腦不夠力
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
VBA新手請求協助簡化, 我寫的內容會跑到當機, 公司電腦不夠力
價值 : 50 QP  點閱數:308 回應數:2

樓主

Wales Ke
門外漢
0 1
6 0
發送站內信


Sub 效率總表G欄空白填上資料()
Application.ScreenUpdating = False
Dim i, j As Integer

For i = 2 To 32000
For j = 2 To 15000

If Worksheets("Page1").Cells(i, "G") = "" And Worksheets("Page1").Cells(i, "I") <> "全檢" _
And Worksheets("Page1").Cells(i, "F") = Worksheets("標準工時表").Cells(j, "F") Then

Worksheets("Page1").Cells(i, "G") = Worksheets("標準工時表").Cells(j, "K")

End If
Next
Next

Application.ScreenUpdating = True
End Sub



搜尋相關Tags的文章: [ VBA ] , [ 簡化 ] ,
本篇文章發表於2019-03-28 21:00
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
回應

Ysz
檢舉此回應
大大你好喔

我是新手,我什麼都不懂。
我是真的新手,我不騙你。

所以


看完你這個問題後,因為全部都看不懂。
所以我google到下列看了一下。
https://docs.microsoft.com/zh-tw/office/vba/api/excel.worksheet.cells
http://club.excelhome.net/thread-618202-1-1.html
https://docs.microsoft.com/zh-tw/office/vba/api/excel.application.screenupdating

請原諒我喔,不懂我怎幫你呢?


喔喔,原來Cells()是指 cells(列,欄)
所以你希望如果
工作表1的G欄某一列等於 沒資料
以及
工作表1的I欄某一列不等於 全檢
以及
工作表1的F欄某一列等於 標準工時表的F欄的所有列

把標準工時表的K欄的某一列的 資料 帶入 工作表1的G欄某一列


我是不知道你的資料量有多大啦?
把I與J訂這麼大是三小喔

要他跑480,000,000‬次,是林老師卡賀的喔?
(浪費電喔????? 跑不跑的動是一回事耶?不要開玩笑好嗎?你能接受嗎?)

這樣啦 ~ 因為我也沒看到你資料,所以不曉得他怎排的。
只知道是一直向下檢查麻?(這點是確定的)

然後每次檢查就是一整片(工作表1)來檢查的? 累啊~
(無言 .....................)

不如把 For i = 2 To 32000 ,改成 For i = 2 TO B 可以嗎?(拜托)
前面的宣告也加個B好嗎?

在進入迴圈之前先讓他是2可以嗎? b=2

然後在二行next之間在加一點東西可不可以?
Next
if Worksheets("Page1").Cells(i, "G") = Worksheets("標準工時表").Cells(j, "K")
then B=B+1
Next
這樣行嗎?



我想你大概知道我在說什麼啦
我是新手全沒接觸過VBA啦

這樣改有沒有bug我是不曉得,但你可以試試。
本篇文章回覆於2019-05-13 14:59
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
回應

Ysz
檢舉此回應
因為上則回覆滿滿的bug,所以google了一下找下列資料。
https://docs.microsoft.com/zh-tw/office/vba/api/excel.worksheetfunction.max
https://blog.xuite.net/yannfarn/excelvba/70624246-%E5%9C%A8VBA%E4%B8%AD%E5%8F%96%E5%BE%97Excel+Worksheet%E7%9A%84%E6%9C%80%E5%BE%8C%E4%B8%80%E6%AC%84%E6%88%96%E6%9C%80%E5%BE%8C%E4%B8%80%E5%88%97
https://docs.microsoft.com/zh-tw/dotnet/visual-basic/language-reference/statements/for-next-statement#BKMK_Counter

最後解決方式如下

Sub 效率總表G欄空白填上資料()
Application.ScreenUpdating = False
Dim i, j, b, c As Integer

b = Worksheets("Page1").UsedRange.Rows.Count + 1
c = Worksheets("標準工時表").UsedRange.Rows.Count + 1
For i = 2 To b
For j = 2 To c

If Worksheets("Page1").Cells(i, "G") = "" And Worksheets("Page1").Cells(i, "I") <> "全檢" _
And Worksheets("Page1").Cells(i, "F") = Worksheets("標準工時表").Cells(j, "F") Then

Worksheets("Page1").Cells(i, "G") = Worksheets("標準工時表").Cells(j, "K")

End If
Next
Next

Application.ScreenUpdating = True
End Sub


對不起,我是新手吼.. 一直錯~
本篇文章回覆於2019-05-13 15:38
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.