: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

Lookup ข้อมูล

ฟอรัมถาม-ตอบปัญหาการใช้งาน 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
snasui
Site Admin
Site Admin
Posts: 30920
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: Lookup ข้อมูล

#161

Post by snasui »

:D ขอแชร์เกี่ยวกับคีย์ผิดแล้วแก้ไม่ได้ครับ งานบางอย่างการแก้ไขทำโดย Admin เข้าไปแก้ในระบบให้เลย ซึ่งต้องทำหนังสือกันเป็นเรื่องเป็นราวหากต้องแก้ไขบางข้อมูล ไม่ได้เปิดให้ผู้ใช้เข้าไปแก้ไขเอง ในการกรอกข้อมูลจึงต้องมีผู้กรอก ผู้อนุมัติ แล้วส่งเข้าระบบ

หรืออีกแนวทางผู้ใช้สามารถแก้ไขได้ แต่ต้องทำโปรแกรมให้รองรับโดยจะมีการเปิดงวดให้เข้าไปแก้ไขโดย Admin อีกเช่นกัน

และถ้าต้องให้ผู้ใช้แก้ไขเองต้องเขียนระบบให้รองรับ เช่นการโพสต์บัญชี การปรับปรุงบัญชี แต่ต้องผ่านการอนุมัติการบันทึกบัญชีของผู้มีอำนาจสำหรับเรื่องนั้น ๆ

กลับมาที่งานนี้ หากต้องการให้แก้ไขยอดยกมาเนื่องจากมีการคีย์ผิดก็สามารถเขียนโปรแกรมได้ครับ ลองเขียนมาเองก่อน ติดตรงไหนก็ถามกันมาได้ครับ กรณียอดยกมาของปีงบประมาณใหม่ก็เช่นกัน สามารถจะเขียนให้มีปุ่มเลือกได้ว่าจะเป็นของปีงบประมาณไหนก็ย่อมทำได้ หากมีแล้วจะฟ้องอีกว่ามีอยู่แล้วต้องการวางทับหรือไม่ก็ย่อมทำได้เช่นกัน ค่อย ๆ ต่อยอดไปเรื่อย ๆ ครับ
joo
Gold
Gold
Posts: 1213
Joined: Sat Apr 17, 2010 3:50 pm

Re: Lookup ข้อมูล

#162

Post by joo »

ทดลองทำโค๊ดมาหลายวันแล้วยังไม่ได้เลยครับช่วยแนะนำด้วยครับ :P

Code: Select all

Sub PasteData()
Dim rSource As Range
Dim rTarget As Range
Dim Lc As Integer, Ac As Integer
Dim FisYear As String
FisYear = InputBox("Please enter Year", "Year for UpdateStock")
    If FisYear = "" Then
        Exit Sub
    End If
    Range("A11:C60").Select
    Selection.ClearContents
Application.ScreenUpdating = True
Lc = Sheets("StockDay").Range("A65536").End(xlUp).Value + 1
With Worksheets("Report1")
    Ac = Application.CountIf(.Range("B:B"), Lc)
    Af = Application.Match(Lc, .Range("B:B"), 0)
End With
If Ac = 0 Then
    MsgBox "No data for paste."
       Exit Sub
End If
Set rSource = Sheets("Report1").Range( _
        "B" & Af & ":C" & Ac + Af - 1 & ",G" & Af & ":G" & Ac + Af - 1)
    Set rTarget = Sheets("StockDay").Range("A65536").End(xlUp).Offset(1, 0)
    rSource.Copy
    rTarget.PasteSpecial xlPasteValues
    Application.CutCopyMode = False
    MsgBox "Record Complete"
    Application.ScreenUpdating = True
End Sub
User avatar
snasui
Site Admin
Site Admin
Posts: 30920
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: Lookup ข้อมูล

#163

Post by snasui »

:D ขอเงื่อนไขด้วยครับ Code ที่ต้องการให้ตรวจสอบค่าใด อย่างไร เพื่อจะได้เข้าใจตรงกันและเขียน Code ได้ตรงตามที่ต้องการ
joo
Gold
Gold
Posts: 1213
Joined: Sat Apr 17, 2010 3:50 pm

Re: Lookup ข้อมูล

#164

Post by joo »

เงื่อนไขที่คิดไว้คือเมื่อต้องการที่จะ Update ข้อมูลในซีท StockDay ก็ให้เลือกว่าจะ Update เป็นของปีงบประมาณไหนหรือว่าจะเลือกทั้งหมด
หากในซีท StockDayมีข้อมูลของปีที่เลือกแล้วให้แจ้งเตือนว่ามีข้อมูลอยู่แล้วต้องการวางทับหรือไม่ ประมาณนี้ครับ :D
User avatar
snasui
Site Admin
Site Admin
Posts: 30920
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: Lookup ข้อมูล

#165

Post by snasui »

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

Code: Select all

Sub EditOldStockDay()
Dim rs As Integer, i As Integer
Dim j As Integer, k As Integer
On Error Resume Next
rs = InputBox("Enter year for copy.")
i = Application.Match(rs, Worksheets("Report1") _
    .Range("B:B"), 0)
j = Application.CountIf(Worksheets("Report1") _
    .Range("B:B"), rs)
k = Application.Match(rs, Worksheets("StockDay") _
    .Range("A:A"), 0)
If j = 0 Then
    MsgBox "Year not found."
    Exit Sub
End If
Worksheets("Report1").Cells(i, 2).Resize(j).Copy
Worksheets("StockDay").Cells(k, 1).PasteSpecial xlPasteValues
Worksheets("Report1").Cells(i, 3).Resize(j).Copy
Worksheets("StockDay").Cells(k, 2).PasteSpecial xlPasteValues
Worksheets("Report1").Cells(i, 7).Resize(j).Copy
Worksheets("StockDay").Cells(k, 3).PasteSpecial xlPasteValues
Application.CutCopyMode = False
MsgBox "Finish."
End Sub
joo
Gold
Gold
Posts: 1213
Joined: Sat Apr 17, 2010 3:50 pm

Re: Lookup ข้อมูล

#166

Post by joo »

ขอบคุณครับท่านอาจารย์ ทดลองแล้วสามารถทำงานได้ดีตามที่ต้องการครับ :D
joo
Gold
Gold
Posts: 1213
Joined: Sat Apr 17, 2010 3:50 pm

Re: Lookup ข้อมูล

#167

Post by joo »

ใช้งานไประยะหนึ่งพบปัญหาเพิ่มครับ คือว่าเมื่อมีบุคคลย้ายเพิ่มเข้ามาในหน่วยงานทำให้ผลการคำนวณที่ซีท Report1 ,Report3 แสดงค่าผิดพลาดครับ
ต้องปรับแก้ไขสูตรอย่างไรดีครับ :D
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30920
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: Lookup ข้อมูล

#168

Post by snasui »

:D จากเงื่อนไขในไฟล์แนบผมลอง Filter ดูพบว่าให้คำตอบที่ถูกต้องแล้วครับ
You do not have the required permissions to view the files attached to this post.
joo
Gold
Gold
Posts: 1213
Joined: Sat Apr 17, 2010 3:50 pm

Re: Lookup ข้อมูล

#169

Post by joo »

อาจารย์ครับยังไม่ตรงกับเงื่อนไขที่ต้องการครับ :D
เมื่อมีบุคคลย้ายเพิ่มเข้ามาในหน่วยงานทำให้ผลการคำนวณที่ซีท Report1 ,Report3 แสดงค่าผิดพลาดครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 30920
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: Lookup ข้อมูล

#170

Post by snasui »

:lol: จะทราบได้อย่างไรว่ามีบุคคลใหม่เข้ามาครับ :?:

ช่วยแนบไฟล์ในสภาพที่แสดงค่าไม่ถูกต้องมาครับ เพื่อน ๆ จะได้ช่วยกันหาสาเหตุได้ครับ
User avatar
bank9597
Guru
Guru
Posts: 3868
Joined: Wed Aug 17, 2011 11:49 am

Re: Lookup ข้อมูล

#171

Post by bank9597 »

:D ผมช่วยเข้าไปดูแล้ว แต่ก็ยังไม่เข้าใจสาเหตุที่แท้จริง เช่นใน report1 ให้แสดงค่าจากชีืท Stockday ซึ่งรหัสของผู้ืที่ย้ายเข้ามาใหม่นั้นไม่ได้อยู่ในชีทดังกล่าว การใช้สูตรจึงแสดงออกมาเออร์เรอร์ ตอนนี้กำลังรอดูบทสรุปถึงปัญหาอยู่ครับ หากช่วยเหลืออะไรได้ก็จะช่วยอีกแรงครับ :D
Forum Rules
  1. อย่าใช้ภาษาแชทในการตอบ-ถาม
  2. ตั้งชื่อกระทู้ให้สื่อถึงปัญหาและไม่เจาะจงตัวผู้ตอบ
  3. ให้อธิบายปัญหาและระบุคำตอบที่ต้องการมาในฟอรัม
  4. ควรแนบไฟล์ตัวอย่างมาที่ฟอรั่ม
  5. หากใช้ VBA ให้ลองเขียนมาเองก่อนเสมอ
  6. แจ้งผลการใช้งานทุกครั้งเมื่อได้รับคำตอบ
joo
Gold
Gold
Posts: 1213
Joined: Sat Apr 17, 2010 3:50 pm

Re: Lookup ข้อมูล

#172

Post by joo »

:lol: จะทราบได้อย่างไรว่ามีบุคคลใหม่เข้ามาครับ :?:
ดูได้จากซีท Personal ครับ รหัส 50203 ได้เพิ่มเข้ามาในระบบและรหัสนี้ก็ได้มีการลาเกิดขึ้นทำให้ซีทสรุป Report1 และ Report3 เกิด Error ครับ :D
User avatar
snasui
Site Admin
Site Admin
Posts: 30920
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: Lookup ข้อมูล

#173

Post by snasui »

:shock: ชีท Report1 ดึงข้อมูลมาจากชีท Stockday และพบว่าชีท Stockday ไม่มีรหัส 50203 จึงมีค่าเป็น 0

และเมื่อคลิกปุ่ม UpdateStock ที่ชีท Stockday จะเป็นการเพิ่มข้อมูลปีงบประมาณ 2555 เข้ามาที่ A32:D36 ในชีท Stockday โดยรหัส 50203 จะอยู่ที่เซลล์ B36

ในชีท Report1 เซลล์ D31 เป็นการดึงยอดยกมาจากงบประมาณปี 2554 (2555-1) จึงแสดงรหัส 50203 ด้วยยอดสะสมยกมาเป็น 0 ซึ่งถูกต้องแล้ว เพราะว่ารหัส 50203 ไม่มียอดยกไปในปีงบประมาณ 2554
joo
Gold
Gold
Posts: 1213
Joined: Sat Apr 17, 2010 3:50 pm

Re: Lookup ข้อมูล

#174

Post by joo »

ผมขออธิบายรายละเอียดใหม่นะครับ...คือแบบนี้ครับในช่วงปีงบประมาณ 2554 บุคคลรหัส 50203 ยังไม่ได้ย้ายเข้ามาทำงานในแผนกนี้ แต่พอปีงบประมาณ 2555 บุคคลรหัส 50203 ได้ย้ายเข้ามาทำงานที่แผนกนี้และมีวันลาพักร้อนสะสมมาด้วยรายละเอียดดังซีท Personal เซลล์ T5 มียอดสะสมมา 8 วัน และเมื่อบุคคลรหัสนี้ได้ทำการลาไป 2 วัน ยอดที่แสดงในซีท Report1 และ Report3 ที่เซลล์ D31 ก็ควรจะแสดงยอดสะสมยกมาเป็น 8 วัน แต่ระบบที่ใส่สูตรเดิมไว้กลับคำนวณผิดพลาด ซึ่งถ้ามีบุคคลเพิ่มเข้ามาในซีท Personal อีกสัก 2-3 คน ข้อมูลของบุคคลที่เพิ่มเข้ามาก็จะคำนวณผิดพลาดหมดตรงนี้ครับคือปัญหาจะต้องปรับแก้ไขสูตรอย่างไรดีครับ :D
User avatar
snasui
Site Admin
Site Admin
Posts: 30920
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: Lookup ข้อมูล

#175

Post by snasui »

joo wrote:คือแบบนี้ครับในช่วงปีงบประมาณ 2554 บุคคลรหัส 50203 ยังไม่ได้ย้ายเข้ามาทำงานในแผนกนี้ แต่พอปีงบประมาณ 2555 บุคคลรหัส 50203 ได้ย้ายเข้ามาทำงานที่แผนกนี้และมีวันลาพักร้อนสะสมมาด้วยรายละเอียดดังซีท Personal เซลล์ T5 มียอดสะสมมา 8 วัน และเมื่อบุคคลรหัสนี้ได้ทำการลาไป 2 วัน ยอดที่แสดงในซีท Report1 และ Report3 ที่เซลล์ D31 ก็ควรจะแสดงยอดสะสมยกมาเป็น 8 วัน :D
เมื่อย้ายมากลางปีก็ต้องไปเพิ่มเป็นยอดยกไปในปี 2554 ครับซึ่งจะแสดงเป็นยอดยกมาในปี 2555 ครับ เพราะสูตรที่เขียนเป็นการดึงยอดยกไปของปีเก่าหรือยอดยกมาในปีนี้ เช่นตามด้านล่าง

=LOOKUP(9.9999999999999E+307,CHOOSE({1,2},0,INDEX(StockDay!$C$2:$C$34,MATCH(1,IF(StockDay!$A$2:$A$34=Report1!B31-1,IF(StockDay!$B$2:$B$34=Report1!C31,1)),0))))

จากสูตรจะนำปีของคอลัมน์ B แล้วหักออกด้วย 1 นั่นแสดงว่าเป็นการนำยอดยกมาของปีก่อนมาแสดง ถ้าปีนี้เป็นปี 2555 ก็จะนำยอดยกไปของปี 2554 มาแสดง ถ้าไม่มีข้อมูลในปี 2554 ก็จะได้ยอดเป็น 0 หากบอกว่าย้ายมากลางปี 2555 ก็จะต้องกลับไปเพิ่มให้บุคคลที่เพิ่งย้ายเข้ามามียอดยกไปของปี 2554 ด้วย อันนี้สำหรับเพื่อให้สามารถใช้คำนวณได้ ทั้งนี้เพราะยอดยกมายกไปนี้เป็นการอ้างถึงปีเป็นหลักครับ
joo
Gold
Gold
Posts: 1213
Joined: Sat Apr 17, 2010 3:50 pm

Re: Lookup ข้อมูล

#176

Post by joo »

จากสูตรจะนำปีของคอลัมน์ B แล้วหักออกด้วย 1 นั่นแสดงว่าเป็นการนำยอดยกมาของปีก่อนมาแสดง ถ้าปีนี้เป็นปี 2555 ก็จะนำยอดยกไปของปี 2554 มาแสดง ถ้าไม่มีข้อมูลในปี 2554 ก็จะได้ยอดเป็น 0 หากบอกว่าย้ายมากลางปี 2555 ก็จะต้องกลับไปเพิ่มให้บุคคลที่เพิ่งย้ายเข้ามามียอดยกไปของปี 2554 ด้วย อันนี้สำหรับเพื่อให้สามารถใช้คำนวณได้ ทั้งนี้เพราะยอดยกมายกไปนี้เป็นการอ้างถึงปีเป็นหลักครับ
ตรงจุดนี้มีวิธีการเพิ่มอย่างไรครับ :?:
แลัวที่ซีท Report3 เซลล์ D31 ซึ่งมีสูตรที่อ้างอิงมาจากคอลัมภ์ด้านบนซึ่งข้อมูลของบุคคลรหัส 50203 ก็ไม่มีจึงเกิดการ Error #N/A มีวิธีปรับแก้ไขสูตรอย่าไรครับ :?:
User avatar
snasui
Site Admin
Site Admin
Posts: 30920
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: Lookup ข้อมูล

#177

Post by snasui »

:lol: สูตรด้านบนเขียนโดยอ้างอิงถึงชีทใดแสดงว่านำค่าของชืทนั้นมาแสดง การเพิ่มค่าใด ๆ ก็ต้องเพิ่มในชีทที่ดึงค่ามาครับ แก้ตรงจุดนี้ให้สำเร็จก่อนแล้วค่อยมาดูกันต่อที่ชีท Report3 ครับ
joo
Gold
Gold
Posts: 1213
Joined: Sat Apr 17, 2010 3:50 pm

Re: Lookup ข้อมูล

#178

Post by joo »

ผมใช้วิธีแบบ Manual โดยคีย์ข้อมูลของรหัส 50203 เข้าไปในซีท StockDay โดยคีย์ต่อท้ายข้อมูลเดิมครับ ทำให้ค่าที่เซลล์ D31 ของ Report1 ก็สามารถแสดงค่าได้ตรงกับที่ต้องการ แต่ก็ไม่แน่ใจว่าทำถูกวิธีไหม :lol:
ส่วนที่ Report3 ยังหาวิธีปรับแก้ไขสูตรอยู่ยังไม่สำเร็จครับ :P
User avatar
snasui
Site Admin
Site Admin
Posts: 30920
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: Lookup ข้อมูล

#179

Post by snasui »

:D ลองส่งไฟล์ที่ Update ล่าสุดแล้วมาด้วยครับ จะได้ช่วยดูกันต่อสำหรับ Report3 ครับ
joo
Gold
Gold
Posts: 1213
Joined: Sat Apr 17, 2010 3:50 pm

Re: Lookup ข้อมูล

#180

Post by joo »

รบกวนท่านอาจารย์ช่วยดูสูตรของซีท Report3 ที่เซลล์ D31 ด้วยครับจะต้องปรับแก้ไขอย่างไรดี :D
You do not have the required permissions to view the files attached to this post.
Post Reply