: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
🪷 คำแสดงเจตนา
ขอผลแห่งการให้ความรู้นี้ จงกลับไปยังผู้ที่เป็นเจ้าของเดิม แม้ข้าพเจ้าจะไม่รู้จักท่านก็ตาม ขอให้แสงแห่งปัญญาที่ท่านเคยจุดไว้ ได้กลับไปเติมเต็มชีวิตของท่านอีกครั้ง และขอให้เจตนาของข้าพเจ้าเป็นการคืนความดีอย่างสงบ

การแสดงข้อมูลที่ Filter

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

Re: การแสดงข้อมูลที่ Filter

#21

Post by snasui »

Bafnet wrote:Sheet10.Cells(r, 6).Formula = "=VLOOKUP(" & Sheet10.Cells(r, 1) & "),FileB!A:T,3,0)"
จากตัวอย่าง Code ข้างบน กรณีอ้างอิงตำแหน่งเซลล์ใน Vlookup ลองปรับเป็น
Sheet10.Cells(r, 6).Formula = "=VLOOKUP(" & Sheet10.Cells(r, 1).Address & "),FileB!A:T,3,0)"
Bafnet
Member
Member
Posts: 167
Joined: Thu Jun 09, 2011 11:52 pm

Re: การแสดงข้อมูลที่ Filter

#22

Post by Bafnet »

อาจารย์ครับ ลองทดสอบดูเป็นเพราะที่ range(A:A) ที่ชีท FileBเป็นตัวเลขที่อยู่ในรูปข้อความ
พอแก้เป็นตัวเลขก็ใช้ได้ แต่ผมไม่อยากแก้ให้อยู่ในรูปแบบตัวเลข เพราะมันมีเป็นหมื่นรายการ
และกลัวว่าคำสั่งที่เกี่ยวข้องกับ range(A:A) ที่ FileB ที่ประกาศตัวแปรเป็น String จะมีผล
ขอVLOOkUp ข้อความนะครับ :tt:
:lol:
User avatar
snasui
Site Admin
Site Admin
Posts: 31175
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: การแสดงข้อมูลที่ Filter

#23

Post by snasui »

:lol: เริ่มงงครับ :P

กรณีผลจากการแปลสูตรที่ได้จาก Code ในความเห็นก่อนคือ =VLOOKUP(40014235,FileB!A:T,3,0) ซึ่งจะเห็นว่า 40014235 เป็น Number หากเป็นข้อความจะกลายเป็น "40014235"

การบังคับให้ Sheet9.Cells(r, 3) เป็น Text สามารถกำหนดเป็น

Cstr(Sheet9.Cells(r, 3)) เพื่อจะใช้ Vlookup กับค่า Text

หรือจะกำหนดให้เป็น Number สามารถกำหนดเป็น

Clng(Sheet9.Cells(r, 3)) เพื่อจะใช้ Vlookup กับ Number
Bafnet
Member
Member
Posts: 167
Joined: Thu Jun 09, 2011 11:52 pm

Re: การแสดงข้อมูลที่ Filter

#24

Post by Bafnet »

Debug ครับ
ที่เรียนอาจารย์ว่าเป็นข้อความเพราะว่าตามตัวอย่าง1.Xlsm ที่แนบ
ที่Colum A จะเห็นว่าตัวเลขถูกเก็บไว้ในรูปแบบข้อความ หรือมีอัญประกาศเดี่ยวนำหน้า (คอมเมนต์มันบอกครับ :lol: )
ก็เลยลองนั่ง Delete อะไรก็ตามที่อยู่หน้าตัวเลข ทั้งๆที่มองไม่เห็น :roll: ไปที่ละบรรทัด
ก็สังเกตุว่าที่Colum A หลังจากDelete ตัวเลขก็เขยิบมาชิดขวา และเมื่อรัน สูตรVlookUpในtolone ก็ได้ผลครับ

อาจารย์ครับตอนนี้ได้ผลแล้วครับ
Sheet10.Cells(r, 6).Formula = "=VLOOKUP(" & Sheet10.Cells(r, 1).Address & "),FileB!A:T,3,0)"

ต้องเอา ) หลัง ).Address & " ออกครับ
Sheet10.Cells(r, 6).Formula = "=VLOOKUP(" & Sheet10.Cells(r, 1).Address & ",FileB!A:T,3,0)"

ขอบคุณครับ ไม่มีอาจารย์ไม่รู้จะทำไงดี ไปทำต่อนะครับเดี๋ยวมาใหม่ ตีสองตีสามทุกคืน :lol:
User avatar
snasui
Site Admin
Site Admin
Posts: 31175
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: การแสดงข้อมูลที่ Filter

#25

Post by snasui »

:shock: โอ้ว...โทษทีครับ ผม Copy มาจาก Link นี้ viewtopic.php?p=8265#p8265 โดยไม่ได้สังเกตว่าของเดิมมีวงเล็บอยู่ด้วย เลยทำให้งงกันไปใหญ่ เมื่อแก้ปัญหาได้แล้วก็ดีใจด้วยครับ :P
Bafnet
Member
Member
Posts: 167
Joined: Thu Jun 09, 2011 11:52 pm

Re: การแสดงข้อมูลที่ Filter

#26

Post by Bafnet »

มาอีกแล้ว :lol:
ได้แบบนี้ครับ

Sub Tolone()
Dim r As Integer
Dim i As Single
Dim y As Single
With Workbooks("DumP.xlsm").Worksheets("FileB")
Sheet9.Range("T1").Value = "˹ÕéÃÇÁ"
r = 2
Do Until Sheet9.Cells(r, 1).Value = ""
i = Sheet9.Cells(r, 12).Value
y = Sheet9.Cells(r, 14).Value
Sheet9.Cells(r, 20).Value = i + y
Sheet9.Cells(r, 15).Formula = "=VLOOKUP(" & Sheet9.Cells(r, 3) & ",FileA!A:G,5,0)"
Sheet9.Cells(r, 16).Formula = "=VLOOKUP(" & Sheet9.Cells(r, 3) & ",FileA!A:G,7,0)"
r = r + 1
Loop
End With
With Workbooks("DumP.xlsm").Worksheets("FileC")
Sheet10.Range("F1").Value = "àÅ¢·ÐàºÕ¹"
Sheet10.Range("G1").Value = "ª×èÍ-Ê¡ØÅ"
Sheet10.Range("H1").Value = "·ÕèÍÂÙè"
Sheet10.Range("I1").Value = "ÃËÑÊâ¤Ã§¡ÒÃ"
r = 2
Do Until Sheet10.Cells(r, 1).Value = ""
Sheet10.Cells(r, 6).Formula = "=VLOOKUP(" & Sheet10.Cells(r, 1).Address & ",FileB!A:T,3,0)"
Sheet10.Cells(r, 7).Formula = "=VLOOKUP(" & Sheet10.Cells(r, 1).Address & ",FileB!A:T,15,0)"
Sheet10.Cells(r, 8).Formula = "=VLOOKUP(" & Sheet10.Cells(r, 1).Address & ",FileB!A:T,16,0)"
Sheet10.Cells(r, 9).Formula = "=VLOOKUP(" & Sheet10.Cells(r, 1).Address & ",FileB!A:T,17,0)"
r = r + 1
Loop
End With
End Sub

แต่นานมากจนน่ากลัว จะไม่ถามนะครับว่ามีวิธีไหนเร็วกว่า :lol:
แต่อยากถามว่า มีเครื่องมือไหนบ้าง เช่น ProgressBar ที่เราจะสร้างบนUSERFORM เพื่อให้ผู้ใช้ทราบว่าโปรแกรมกำลังประมวลผล
คล้ายเวลาเราติดตั้งโปรแกรม :lol:
User avatar
snasui
Site Admin
Site Admin
Posts: 31175
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: การแสดงข้อมูลที่ Filter

#27

Post by snasui »

:D สำหรับวิธีที่เร็วกว่า เราจะหลีกเลี่ยงการ Vlookup ทั้งคอลัมน์อย่างที่เขียนมาครับ เช่น A:T แต่จะกำหนดช่วงข้อมูลไว้ล่วงหน้าเช่น A1:T1000 จะเห็นผลต่างชัดเจน หรือจะกำหนดตัวแปรไว้ก่อนก็จะดีครับ จะได้เพิ่มลดได้ตามปริมาณข้อมูลที่มีซึ่งยืดหยุ่นกว่าการกำหนดตายตัวแบบ A1:T1000

ส่วนการทำ Progress Bar ลองศึกษาดูต้นฉบับที่นี่ http://spreadsheetpage.com/index.php/ti ... indicator/ และลองดูการปรับใช้ที่กระทู้นี้ครับ http://www.snasui.com/viewtopic.php?p=5703#p5703
Bafnet
Member
Member
Posts: 167
Joined: Thu Jun 09, 2011 11:52 pm

Re: การแสดงข้อมูลที่ Filter

#28

Post by Bafnet »

อ่า...เห็นด้วยครับคราวแรกผมก็ตั้งใจจะกำหนดข้อมูลเหมือนที่อาจารย์แนะนำ
แต่ก็ไม่ทราบว่าจะกำหนดขอบเขตข้อมูลอย่างไร เฉพาะหน่วยอำเภออย่างของผม ชีทFileC มี 8,000 กว่ารายการ
จากจำนวนลูกค้า 1,700 คน
แต่ถ้าเกิดเป็นสาขาแถวภาคกลาง อีสาน ลูกค้าเกษตรกร หมื่นกว่าคน ชีทFileC ก็จะประมาณ 47,000 กว่ารายการ
นี่ล่ะครับที่บอกว่าช้าจนน่ากลัว ปัตตานีสร้างโปรแกรมแล้วอีสานใช้ไม่ได้ แบงค์เอาผมตายเลยครับ :lol:
แต่คาดว่าต้องเปลี่ยนครับ คือไปVlookUp หลังกรองข้อมูลจะดีกว่า ข้อมูลอาจน้อยลงพอที่เราจะกำหนดขอบเขตได้

:roll: แต่จะว่าไปมัน Loop และ Vlookup ตามเซลที่ไม่ว่างไม่ใช่หรอครับ
Do Until Sheet9.Cells(r, 1).Value = ""
ไม่ใช่สิ.อาจารย์น่าจะหมายถึงตอนให้มันVlookup มันต้องวิ่งดูข้อมูลทั้ง Range..อืมใช่ๆๆ :lol:

ขอบคุรมากครับ
เดี๋ยวจะไปตามลิงค์ที่อาจารย์บอกครับ
Bafnet
Member
Member
Posts: 167
Joined: Thu Jun 09, 2011 11:52 pm

Re: การแสดงข้อมูลที่ Filter

#29

Post by Bafnet »

ไปอ่านมาแล้วครับ
แต่ผมก็งงๆ ขั้นตอนการสร้างฟอร์มเข้าใจ แต่คำสั่งครับไม่ทราบจะนำมาใช้กับ Tolone อย่างไร
เพราะ Tolone ทำงานกับสองชีทคือ FileB และ FileC

Sub Tolone()
Dim Counter As Integer
Dim RowMax As Integer, ColMax As Integer
Dim c As Integer
Dim r As Integer
Dim i As Single
Dim Y As Single
Dim PctDone As Single
Application.ScreenUpdating = False
Counter = 1 ' คืออะไร
RowMax = 100 'ผมคิดว่าน่าจะแทนด้วย RowMax = Sheets("FileB").Range("AA1").value โดยให้ Sheets("FileB").Range("AA1")= COUNTA(A:A)
ColMax = 25 'ผมไม่เข้าใจ คืออะไร
With Workbooks("DumP.xlsm").Worksheets("FileB")
Sheets("FileB").Activate
Sheet9.Range("O:P").Value = ""
Sheet9.Range("T1").Value = "˹ÕéÃÇÁ"
Sheet9.Range("O1").Value = "ª×èÍÊ¡ØÅ"
Sheet9.Range("P1").Value = "·ÕèÍÂÙè"
r = 2
Do Until r = Rowmax
i = Sheet9.Cells(r, 12).Value
Y = Sheet9.Cells(r, 14).Value
Sheet9.Cells(r, 20).Value = i + Y
Sheet9.Cells(r, 15).Formula = "=VLOOKUP(" & Sheet9.Cells(r, 3) & ",FileA!A:G,5,0)"
Sheet9.Cells(r, 16).Formula = "=VLOOKUP(" & Sheet9.Cells(r, 3) & ",FileA!A:G,7,0)"
PctDone = Counter / (RowMax * ColMax)
With UserForm1
.FrameProgress.Caption = Format(PctDone, "0%")
.LabelProgress.Width = PctDone * (.FrameProgress.Width - 10)
End With
' The DoEvents statement is responsible for the form updating
DoEvents
r = r + 1
Loop
End With

แล้วคำสั่งที่ Vlookup FileC จะไปยังไง งงงงงงๆ :roll:

Unload UserForm1
End Sub

มีอีกอย่างที่ผมคิดนะครับ คือที่่ Sheets("FileB").Range("AA1")= COUNTA(A:A)
เมื่อสั่งรัน Tolone ตัวเลขในเซลAA1 ก็วิ่งตามรายการที่เกิดขึ้น ทำอย่างไรจะให้ตัวเลขนี้แสดงบน UserForm
ผมเขียนคำสั่งเพิ่ม ต่อจาก VlookUp ก่อนบรรทัด r = r+1
....
TextBox7.value = Sheet9.Range("AA1").value
r = r+1
Loop
มันก็แสดงผลนะครับ แต่เป็นตอนจบเลยทีเดียว :lol:

:roll: อยากได้ครับ :oops:
Bafnet
Member
Member
Posts: 167
Joined: Thu Jun 09, 2011 11:52 pm

Re: การแสดงข้อมูลที่ Filter

#30

Post by Bafnet »

ได้แล้วครับ
แต่ใช้การรันของเลขแทยครับ
ขอบคุณมากครับ
:lol:
Bafnet
Member
Member
Posts: 167
Joined: Thu Jun 09, 2011 11:52 pm

Re: การแสดงข้อมูลที่ Filter

#31

Post by Bafnet »

สวัสดีครับ
ขอรบกวนถามอะไรหน่อยนะครับ
Application.ScreenUpdating = True
Application.ScreenUpdating = False
ความหมายคืออะไร
ต่างกันอย่างไร
ใช้ในโอกาสใดจึงเหมาะสม
ขอบคุณครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 31175
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: การแสดงข้อมูลที่ Filter

#32

Post by snasui »

8-)
Bafnet wrote:Application.ScreenUpdating = False
ใช้เมื่อไม่ต้องการให้หน้าจอแสดงอาการวูบวาบเมื่อ Code กำลังทำงานครับ ยกตัวอย่างเช่นใน Code มีการเขียนเพื่อให้มีการ Activate, Select, Copy ข้ามไฟล์ ข้ามชีท ฯลฯ อาการวูบวาบตามการกระทำของโปรแกรมเช่นนี้จะเป็นตัวหน่วงให้ Code ทำงานได้ช้า หากต้องการให้เร็วขึ้นก็ต้องไปกำหนดให้โปรแกรมไม่ต้อง Update Screen ที่กำลังทำงาน

เมื่อทำงานจบแล้วจึงค่อยมากำหนดให้แสดงทำงานตามปกติด้วย Code ==> Application.ScreenUpdating = True
Bafnet
Member
Member
Posts: 167
Joined: Thu Jun 09, 2011 11:52 pm

Re: การแสดงข้อมูลที่ Filter

#33

Post by Bafnet »

สวัสดีครับ
อาจารย์ครับ ตอนนี้เกิดปัญหามากมายเลยครับ ตั้งแต่การFilter นั่งทำพอบันทึก exell ก็บอกว่าเกิดข้อผิดพลาดอย่างร้ายแรง :flw:
กำลังรื้อหน้านี้ใหม่ครับ
รบกวนสอบถามเรื่อง filter ครับ จากmacro

Sheets("FileB").Activate
Columns("E:E").Select
Range("E:E").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range( _
"W1"), Unique:=True
Columns("G:G").Select
Columns("G:G").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("X1" _
), Unique:=True
Columns("Q:Q").Select
Columns("Q:Q").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("Y1" _
), Unique:=True
Sheet17.Range("BC:BC").Value = Sheet9.Range("W:W").Value
Sheet17.Range("BD:BD").Value = Sheet9.Range("X:X").Value
Sheet17.Range("BE:BE").Value = Sheet9.Range("Y:Y").Value
Sheets("Coplone").Activate
Columns("BC:BC").Select
Selection.Sort Key1:=Range("BC2"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Columns("BD:BD").Select
Selection.Sort Key1:=Range("BD2"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Columns("BE:BE").Select
Selection.Sort Key1:=Range("BE2"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
MsgBox "ÃǺÃÇÁ¢éÍÁÙÅÊÁºÙóì", vbOKOnly, "DumP"
Label18.Caption = "¢éÍÁÙÅÃÒ§ҹÊÁºÙóì"

ความต้องการคือแยกข้อมูลในคอลัมที่กำหนด ให้เหลือค่าที่ไม่ซ้ำเพื่อที่ผมจะนำค่าที่ได้ไปเป็นRowsource ให้กับCombobox
มีวิธีเขียน คำสั่งโดยตรงให้ผมหน่อยนะครับ ชีทFileB ตามตัวย่างที่เคยแนบนะครับ
ขอบคุณครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 31175
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: การแสดงข้อมูลที่ Filter

#34

Post by snasui »

:D ผมลองทดสอบ Code ด้านล่างนี้ทำงานถูกต้องครับ

Code: Select all

Sheets("FileB").Activate
 Columns("E:E").Select
 Range("E:E").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range( _
 "W1"), Unique:=True
 Columns("G:G").Select
 Columns("G:G").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("X1" _
 ), Unique:=True
 Columns("Q:Q").Select
 Columns("Q:Q").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("Y1" _
 ), Unique:=True
และ Code ด้านล่าง

Code: Select all

Sheet17.Range("BC:BC").Value = Sheet9.Range("W:W").Value
 Sheet17.Range("BD:BD").Value = Sheet9.Range("X:X").Value
 Sheet17.Range("BE:BE").Value = Sheet9.Range("Y:Y").Value
ควรจะเปลี่ยนเป็น

Code: Select all

Sheet9.Range("W:W").Copy Sheet17.Range("BC:BC")
 Sheet9.Range("X:X").Copy Sheet17.Range("BD:BD")
 Sheet9.Range("Y:Y").Copy Sheet17.Range("BE:BE")
ซึ่งเป็นการ Copy ไปวางทั้งหมด หากต้องการ Copy ไปวางเฉพาะ Value ให้เปลี่ยนเป็น

Code: Select all

Sheet9.Range("W:W").Copy
Sheet17.Range("BC:BC").PasteSpecial xlPasteValues
Sheet9.Range("X:X").Copy
Sheet17.Range("BD:BD").PasteSpecial xlPasteValues
Sheet9.Range("Y:Y").Copy
Sheet17.Range("BE:BE").PasteSpecial xlPasteValues
Bafnet
Member
Member
Posts: 167
Joined: Thu Jun 09, 2011 11:52 pm

Re: การแสดงข้อมูลที่ Filter

#35

Post by Bafnet »

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

ต่อไปก็เข้าสู่หน้ารายได้รายจ่ายครับ
ถามเลยนะครับ :lol:
บน Userform ประกอบด้วย TextBox จำนวนหลายตัว ดั่งภาพ
2.jpg
ตรงสดมม์ มูลค่า ถ้าผู้ใช้คีย์จำนวนเงิน แล้วจะให้ Textbox รวมโดยอัตโนมัติ ทำอย่างไรครับ
กำหนดให้ textBox ในฟิลด์มูลค่า คือ textbox1 และ 2 ,3 ลงมา และให้ TextBox10 คือรวม
ถ้าผมสร้างโมดูลที่ชื่อ Income
Sub Income
Dim a As Integer, b As Integer, c As Integer, d As Integer, e As Integer, f As Integer
Dim g As Integer, h As Integer, i As Integer, j As Integer, k As Integer, l As Integer, M As Integer
a = frmlone.TextBox1.Value
b = frmlone.TextBox2.Value
c = frmlone.TextBox3.Value
d = frmlone.TextBox4.Value
e = frmlone.TextBox5.Value
f = frmlone.TextBox6.Value
g = frmlone.TextBox7.Value
......
h = a+b+c+d+e+f+g 'การเขียนเพื่อรวมค่าทั้งหมดที่ถูกต้องเขียนอย่างไรครับ
frmlone.TextBox10.Value = h
End sub

แล้วที่ TextBox แต่ละตัวผมกำหนดแบบนี้
TextBox1_AfterUpdate()
TextBox1.Value = Format(TextBox1.Value, "#,##000")
Income.Income
End Sub

อาจารย์เห็นควรอย่างไรครับ ผมยังขาดพื้นฐานอีกมากหากมีอะไรชี้แนะผมด้วย ผมอยากให้มันเสถียรและไม่สับสนเหมือนคนเขียน :tt:
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 31175
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: การแสดงข้อมูลที่ Filter

#36

Post by snasui »

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

สำหรับ Code ที่ถามมา ถ้าไม่มีปัญหาใดก็ใช้ได้ครับ ปกติเราไม่ต้องเน้นพิศดาร เขียนให้เข้าใจง่าย มี Comment ไว้ตามสมควร เพื่อว่าเมื่อต้องปรับปรุงภายหลังจะได้สะดวก
Bafnet
Member
Member
Posts: 167
Joined: Thu Jun 09, 2011 11:52 pm

Re: การแสดงข้อมูลที่ Filter

#37

Post by Bafnet »

:o มิน่าๆ
ขอบคุณมากครับ
code ข้างต้นยังไม่ทราบว่าใช้ได้รึป่าว เพียงแต่คิดว่าน่าจะแบบนั้น :lol:
ไม่กล้า...เลยมาถามอาจารย์
มีอะไรพึ่งจะนึกออก ว่าจะถามอาจารย์หลายครั้งแล้วครับ
เรื่อง Listbox ครับ
1.เราสามารถกำหนดให้ Listbox มีเส้นตารางตามจำนวนคอลัมม์ และ จำนวน list ไหมครับ
2.เมื่อเราเลือกรายการใน Listbox ซึ่งมีคำสั่ง

Private Sub ListBox1_Click() 'แสดงผลข้อมูลลูกค้าจาก Range ที่กำหนด ซึ่งบางRange อาจเป็นค่าว่าง ผู้ใช้ต้องเติมข้อมูลผ่าน Textbox เพื่อ update ข้อมูลที่ไม่มี
On Error Resume Next
TextBox1.Value = Sheet15.Range("A3").Value
TextBox2.Value = Sheet15.Range("B3").Value
TextBox3.Value = Sheet15.Range("C3").Value
TextBox4.Value = Sheet15.Range("E3").Value
TextBox207.Value = Sheet15.Range("R3").Value
TextBox5.Value = TextBox207.Value
TextBox8.Value = Sheet15.Range("AC7").Text
TextBox9.Value = Sheet15.Range("AC9").Value
TextBox10.Value = Sheet15.Range("AC10").Value
TextBox11.Value = Sheet15.Range("AC11").Value
TextBox12.Value = Sheet15.Range("AC12").Value
TextBox13.Value = Sheet15.Range("AC13").Value
TextBox14.Value = Sheet15.Range("C30").Value
TextBox15.Value = Sheet15.Range("D30").Value
TextBox17.Value = Sheet15.Range("T3").Value (สมมติให้ range นี้เป็น "" คือไม่มีข้อมูล
TextBox16.Value = Sheet15.Range("B30").Value
TextBox18.Value = Sheet15.Range("S3").Value
TextBox19.Value = Sheet15.Range("F3").Value
TextBox20.Value = Sheet15.Range("D3").Value
TextBox21.Value = Sheet15.Range("H3").Value
TextBox22.Value = Sheet15.Range("G14").Value
ComboBox1.Value = Sheet15.Range("K3").Value
ListBox1.Clear 'เดิมไม่มีคำสั่งนี้ และเคยเขียน ListBox1.ClearSelect แต่ Debug
End Sub

ปัญหาที่เกิดคือ พอเราคีย์ข้อมูลใน Textbox ที่ว่าง ซึ่งใน Textbox ซึ่งมีคำสั่ง

Private Sub TextBox17_Change()
Sheet15.Range("T4").value = TextBox17.Value
End Sub
Textbox ไม่ยอมแสดงผลที่คีย์ มันกลายเป็นค่าที่ว่าง
คล้ายๆกับว่าคำสั่งของ Listbox ยังคงทำงานอยู่ ทำให้ TextBox มีค่าตามrange ที่ว่าง ตามคำสั่งของ listBox

หลังจากเลือกรายการใน ListBox เราจะเขียนคำสั่งใดครับให้ ListBox คืนค่าเหมือนก่อนที่จะเลือก(ไม่เป็นแถบสีฟ้า)
ListBox1.Clear :roll: ก่อน End sub

ขอบคุณครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 31175
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: การแสดงข้อมูลที่ Filter

#38

Post by snasui »

:D เราสามารถทำ ListBox ให้มีลักษณะเหมือนตารางได้ตามจำนวนคอลัมน์และจำนวน List ได้ครับ

ลองส่งไฟล์ตัวอย่างมาดูจะได้ทดสอบได้สะดวกครับ
Bafnet
Member
Member
Posts: 167
Joined: Thu Jun 09, 2011 11:52 pm

Re: การแสดงข้อมูลที่ Filter

#39

Post by Bafnet »

สวัสดีครับอาจารย์
หายไปวันกว่าๆไม่สบาย
วันนี้ส่งไฟล์ตัวอย่างมาให้ครับ(LIstBox)
ขอบคุณมากครับ
สมุดงาน2.xlsm
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 31175
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: การแสดงข้อมูลที่ Filter

#40

Post by snasui »

:D ผมเพิ่งตอบอีกกระทู้ไปพอดี ลองประยุกต์ดูจากตัวอย่างในความเห็นนี้ดูก่อนครับ ติดตรงไหนถามมาได้เรื่อย ๆ ครับ viewtopic.php?p=8401#p8401
Post Reply