:D snasui.com ยินดีต้อนรับ :D
ยินดีต้อนรับสู่กระดานถามตอบ Excel and VBA และอื่น ๆ ที่เป็นมิตรกับทุกท่าน มีไฟล์แนบมหาศาล ช่วยให้ท่านค้นหาและติดตามศึกษาได้โดยง่าย :thup: สมาชิกท่านใดที่ยังไม่ได้ระบุ Version ของ Excel ที่ใช้งานจริง สามารถทำตาม Link นี้เพื่อจะได้รับคำตอบที่ตรงกับ Version ของท่านครับ :arrow: ระบุ Version ของ Excel
:!: โปรดทราบ :!:
  1. กรุณาอ่านกฎการใช้บอร์ด (Forum rules) ในตำแหน่งด้านบนของแต่ละบอร์ด
  2. การสมัครสมาชิก การ Login การกู้คืนรหัสผ่าน
    1. สมัครสมาชิกดูขั้นตอนได้ที่ :arrow: สมัครสมาชิก
    2. Login เข้าระบบโดยคลิกปุ่ม Login ตรงมุมขวาบนของหน้านี้ :roll:
    3. การ Login ผ่าน Facebook ดูวิธีที่ :arrow: Login ผ่าน Facebook
    4. ลืมรหัสผ่านสามารถรับรหัสใหม่ได้ที่ :arrow: Reset รหัสผ่าน
  3. มีปัญหาการใช้งาน แจ้งผู้ดูแลระบบได้ที่ :arrow: ติดต่อผู้ดูแลระบบ
  4. กำหนดการตั้งค่าส่วนตัว เช่นตั้งค่าภาษาเป็นไทยหรืออังกฤษดูได้ที่ :arrow: ตั้งค่าส่วนตัว
  5. การตั้งและตอบกระทู้ดูได้ที่ :arrow: วิธีการตั้งและตอบกระทู้
  6. การจัดรูปแบบตัวอักษรด้วย bbcode ในช่องแสดงความคิดเห็นดูได้ที่ :arrow: จัดรูปแบบตัวอักษร
  7. กำหนดขนาดตัวอักษรใน Browser ดูได้ที่ :arrow: กำหนดขนาดตัวอักษรใน Browser

ช่วยตรวจสอบไฟล์ว่า ทำงานช้าหรือไม่ครับ

ฟอรัมถาม-ตอบปัญหาการใช้งาน MS Excel and VBA
Forum rules
  1. ไม่อนุญาตให้ใช้ภาษาแชทในการถามและตอบปัญหา ไม่ใช้คำว่า "คับ" หรือ "อ่ะครับ" แทนคำว่า "ครับ" ไม่ใช้คำว่า "เด๋ว" แทนคำว่า "เดี๋ยว" เป็นต้น เนื่องจากเมื่อแปลเป็นภาษาต่างประเทศแล้วจะให้ความหมายผิดไปจากที่ควรจะเป็น
  2. ห้ามถามโดยระบุชื่อผู้ตอบและต้องตั้งชื่อกระทู้ให้สื่อถึงปัญหาที่จะถาม ไม่ตั้งชื่อว่า ช่วยด้วยครับ, มีปัญหามาปรึกษาครับ เป็นต้น
  3. กรุณาอธิบายปัญหาและระบุคำตอบที่ต้องการมาในกระทู้ด้วยเสมอถึงแม้จะอธิบายไว้ในไฟล์แนบแล้วก็ตาม ทั้งนี้เพื่ออำนวยความสะดวกแก่เพื่อนสมาชิกในการค้นหาข้อมูล
  4. กรุณาแนบไฟล์ตัวอย่างพร้อมแสดงคำตอบที่ถูกต้องมาในไฟล์ด้วยเพื่อให้ง่ายต่อการทำความเข้าใจและสะดวกต่อการตอบคำถาม (ขนาดไฟล์ไม่เกิน 500Kb ขนาดภาพไม่เกิน 800*600 Pixel) ไม่แนบเป็น Link มาจากแหล่งอื่นที่อาจจะถูกลบทิ้งไปโดยต้นทางในภายหลัง นอกจากนี้ไม่ควรแนบไฟล์ที่มีข้อมูลสำคัญอันก่อให้เกิดความเสียหายกับตนเองและผู้อื่น
  5. กรณีเป็นคำถามเกี่ยวกับ Programming เช่น VBA, VB.Net, C#, SQL ฯลฯ ต้องลองเขียนมาเองก่อนเสมอ ถามเฉพาะที่ติดปัญหา ระบุ Module, Procedure ที่ติดปัญหาให้ชัดเจน กรุณาโพสต์ Code ให้แสดงเป็น Code คือเปิดด้วย [code] และปิดด้วย [/code] ตัวอย่างเช่น [code]dim r as range[/code] เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)
  6. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
User avatar
tigerwit
Bronze
Bronze
Posts: 486
Joined: Wed Mar 31, 2010 10:51 pm
Location: สกลนคร
Excel Ver: 2019
Contact:

ช่วยตรวจสอบไฟล์ว่า ทำงานช้าหรือไม่ครับ

#1

Post by tigerwit »

จากไฟล์ที่แนบมา
มีโค๊ดสำหรับส่งข้อมูล และเคลียร์ข้อมูลในเซลล์
ซึ่งมีจำนวนแถวในการส่งข้อมูลไปอีกชีท ไม่มากนัก ไม่เกิน 25 แถว
มีความรู้สึกว่าไฟล์ทำงานช้า (เครื่องที่ใช้ I5 73000 Ram 16)
แค่ส่งข้อมูลข้ามชีท 10 แถวใช้เวลา เกือบ 2 นาที
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30988
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: ่ช่วยตรวจสอบไฟล์ว่า ทำงานช้าหรือไม่ครับ

#2

Post by snasui »

:D กรุณาแจ้ง Password ในการเข้าถึง Code ด้วยครับ

กรณีข้อมูลสำคัญให้แปลงไปเป็นข้อมูลอื่นแล้ว Save As มาเป็นไฟล์ใหม่แทนครับ
User avatar
tigerwit
Bronze
Bronze
Posts: 486
Joined: Wed Mar 31, 2010 10:51 pm
Location: สกลนคร
Excel Ver: 2019
Contact:

Re: ่ช่วยตรวจสอบไฟล์ว่า ทำงานช้าหรือไม่ครับ

#3

Post by tigerwit »

ผมลืมปลดล็อคครับ
ใช้ไฟล์นี้ครับผม
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30988
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: ่ช่วยตรวจสอบไฟล์ว่า ทำงานช้าหรือไม่ครับ

#4

Post by snasui »

:D ไฟล์นี้มีสูตรที่ทำงานหนักจำนวนมาก เช่น Frequency ร่วมกับ Index, Small หรือใช้ใน Aggregate เมื่อรวมกับสูตรอื่น ๆ แล้วมีถึง 29,077 สูตรที่เป็นภาระให้กับไฟล์ การปรับให้ทำงานเร็วควรใช้ Code มาช่วยทำงานแทนสูตรที่ทำงานหนัก ๆ ครับ

สิ่งสำคัญในการในการทำงานด้วย Code ควรปิดการคำนวณให้เป็น Manual เสียก่อนเพื่อหลีกเลี่ยงการเปลี่ยนไปคำนวณไป ทำงานเสร็จแล้วค่อยเปิดการคำนวณกลับมาเป็น Automatic เสียใหม่เพื่อคำนวณพร้อมกันทีเดียว

ลักษณะของ Code ก็จะเป็นเช่นด้านล่างครับ

Code: Select all

'Other code
Application.Calculation = xlCalculationManual
Range("E9:F33").ClearContents
For i = 2 To 5000
    If Sheets("database").Range("A" & i).Value = Sheets("baibake").Range("M8") Then
        Sheets("database").Range("D" & i).Copy
        Sheets("baibake").Range("E" & Rows.Count).End(xlUp).Offset(1, 0) _
        .PasteSpecial xlPasteValues
        Sheets("database").Range("G" & i).Copy
        Sheets("baibake").Range("F" & Rows.Count).End(xlUp).Offset(1, 0) _
        .PasteSpecial xlPasteValues
    End If
Next i
Range("M2").Select
Application.Calculation = xlCalculationAutomatic
'Other code
User avatar
tigerwit
Bronze
Bronze
Posts: 486
Joined: Wed Mar 31, 2010 10:51 pm
Location: สกลนคร
Excel Ver: 2019
Contact:

Re: ่ช่วยตรวจสอบไฟล์ว่า ทำงานช้าหรือไม่ครับ

#5

Post by tigerwit »

ขอบคุณมากครับ
ได้ลองทำตามคำแนะนำแล้ว
จากไฟล์ที่แนบมา
1. ต้องการส่งข้อมูลจาก sheet1 ไปไว้ที่ Sheet2 ที่คลอลัมน์ Q ต้องปรับแก้อย่างไรครับ
2. ที่ sheet3 ถ้าคลอลัมน์ที่ค้นหาเปลี่ยนเป็น คลอลัมน์ D และคลอลัมน์ที่จะวางค่า เป็นคลอลัมน์ Q อย่างไร

Code: Select all

Sub Duplicate()
Dim lngLastRow As Long, lngLoopRow As Long
Dim lngWriteRow As Long
Dim rngFindRange
lngWriteRow = 2
lngLastRow = Cells(Rows.Count, 2).End(xlUp).Row

Range("D2:D" & lngLastRow).ClearContents
For lngLoopRow = lngLastRow To 2 Step -1
    With Cells(lngLoopRow, 2)
        If Application.WorksheetFunction.CountIf(Range("B2:B" & lngLastRow), .Value) > 1 Then
            If Range("D:D").Find(.Value, lookat:=xlWhole) Is Nothing Then
                Cells(lngWriteRow, 4) = .Value
                lngWriteRow = lngWriteRow + 1
            End If
        End If
    End With
Next lngLoopRow
End Sub
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30988
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: ่ช่วยตรวจสอบไฟล์ว่า ทำงานช้าหรือไม่ครับ

#6

Post by snasui »

:D ตัวอย่าง Code ครับ

Code: Select all

Sub Test0()
    With Sheets("Sheet2")
        .Range("b:b").Value = Sheets("Sheet1").Range("b:b").Value
        With .Range("b2").CurrentRegion
            .RemoveDuplicates Columns:=1, Header:=xlNo
        End With
    End With
End Sub
User avatar
tigerwit
Bronze
Bronze
Posts: 486
Joined: Wed Mar 31, 2010 10:51 pm
Location: สกลนคร
Excel Ver: 2019
Contact:

Re: ่ช่วยตรวจสอบไฟล์ว่า ทำงานช้าหรือไม่ครับ

#7

Post by tigerwit »

ขอบพระคุณครับ
ทดสอบตามโค๊ดที่แนะนำ
ไม่ทราบว่าทำไมถึงมาหมด
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30988
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: ่ช่วยตรวจสอบไฟล์ว่า ทำงานช้าหรือไม่ครับ

#8

Post by snasui »

:D ตัวอย่างการปรับ Code ครับ

Code: Select all

'Other code
With .Range("B2", .Range("b" & .Rows.Count).End(xlUp))
    .RemoveDuplicates Columns:=1, Header:=xlNo
End With
'Other code
User avatar
tigerwit
Bronze
Bronze
Posts: 486
Joined: Wed Mar 31, 2010 10:51 pm
Location: สกลนคร
Excel Ver: 2019
Contact:

Re: ่ช่วยตรวจสอบไฟล์ว่า ทำงานช้าหรือไม่ครับ

#9

Post by tigerwit »

ใช้งานได้แล้วครับ ขอบคุณครับ

สอบถามเพิ่มเติมครับว่า รกณีกรณีของไฟล์นี้
เราจัดรูปแบบปลายทางไว้อย่างหนึ่งพอดึงข้อมูลไปวางแล้ว
รูปแบบที่จัดไว้เปลี่ยนไป เกิดจากสาเหตุใด และจะมีวิธีแก้ไขอย่างไรครับ
(ชีท Database คลอลัมน์ Q จะเปลี่ยนเป็ํนรูปวันที่ จัดรูปแบบใหม่ให้เป็นข้อความแล้ว
พอดึงข้อมูลอีกครั้งก็เปลี่ยนไปเหมือนเดิม)
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30988
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: ช่วยตรวจสอบไฟล์ว่า ทำงานช้าหรือไม่ครับ

#10

Post by snasui »

:D ตัวอย่างการปรับ Code เพื่อให้แสดงรูปแบบเป็น Text พร้อมหมายเลขกำกับบรรทัดเป็นค่าคงที่แทนสูตรครับ

Code: Select all

Sub AStock()
    With Sheets("Database")
        .Columns("p").Clear
        .Range("q:q").NumberFormat = "@"
        .Range("Q:Q").Value = .Range("A:A").Value
        With .Range("Q2", .Range("Q" & .Rows.Count).End(xlUp))
            .RemoveDuplicates Columns:=1, Header:=xlNo
        End With
        If .Range("q2").Value <> "" Then
            With .Range("q2").CurrentRegion.Offset(0, -1)
                .Formula = "=Rows(r2c:rc)"
                .Value = .Value
            End With
        End If
    End With
End Sub
Post Reply