: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

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. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่

Post a reply


This question is a means of preventing automated form submissions by spambots.
Smilies
:D :thup: :cp: :flw: :rz: :sg: :tt: :) ;) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :!: :?: :idea: :arrow: :ard: :arl: :aru: :| :mrgreen: :geek: :ugeek:

BBCode is ON
[img] is ON
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: การแสดงข้อมูลที่ Filter

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

#50

by snasui » Sun Aug 07, 2011 7:06 am

:D สามารถใช้ With เข้ามาช่วยเพื่อไม่ต้องอ้างถึง Object ซ้ำ ๆ ตามตัวอย่างด้านล่างครับ

Code: Select all

Selection.EntireColumn.AutoFit
With Selection
   .Borders(xlEdgeLeft).LineStyle = xlContinuous
   .Borders(xlEdgeTop).LineStyle = xlContinuous
   .Borders(xlEdgeBottom).LineStyle = xlContinuous
   .Borders(xlEdgeRight).LineStyle = xlContinuous
   .Borders(xlInsideHorizontal).LineStyle = xlContinuous
   .Borders(xlInsideVertical).LineStyle = xlContinuous
End With

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

#49

by Bafnet » Sun Aug 07, 2011 1:36 am

สวัสดีอีกครั้งครับ..อาจารย์
ประเด็นที่1.สั้นกว่า...พยายามได้ดังนี้ครับ

Private Sub Report()
Dim ri As Range
On Error Resume Next
With Worksheets("Sheet1")
Set ri = .Range(.Range("B1"), .Range("I65536") _
.End(xlUp)).SpecialCells(xlCellTypeVisible)
End With
ri.Select
Selection.EntireColumn.AutoFit
ri.Borders(xlDiagonalDown).LineStyle = xlNone
ri.Borders(xlDiagonalUp).LineStyle = xlNone
ri.Borders(xlEdgeLeft).LineStyle = xlContinuous
ri.Borders(xlEdgeTop).LineStyle = xlContinuous
ri.Borders(xlEdgeBottom).LineStyle = xlContinuous
ri.Borders(xlEdgeRight).LineStyle = xlContinuous
ri.Borders(xlInsideHorizontal).LineStyle = xlContinuous
ri.Borders(xlInsideVertical).LineStyle = xlContinuous
ri.PrintPreview
End Sub

มีสั้นกว่าอีกมั๊ยครับอาจารย์ ผมรบกวนอาจารย์อีกเรื่องนะครับ จากคำสั่งข้างต้น ผมต้องเขียน ri.ทุกครั้งที่มีคำสั่ง
รบกวนสอนวิธีเขียนแบบว่า ri.คำสั่งแรก, คำสั่งที่2, คำสั่งที่3... (ri.ครั้งเดียว ไม่ต้องชี้ข้อมูลทุกครั้ง :lol: )

ขอบคุณครับ...1.35 ไปนอนก่อนนะครับ :D

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

#48

by Bafnet » Sun Aug 07, 2011 12:54 am

สวัสดีครับ.(อีกครั้ง)
ประเด็นที่2 ได้แล้วครับ

Private Sub Report()
Dim ri As Range
On Error Resume Next
With Workbooks("DumP.xlsm").Worksheets("Report")
Set ri = .Range(.Range("A1"), .Range("I65536") _
.End(xlUp)).SpecialCells(xlCellTypeVisible)
End With
ri.Select
Selection.EntireColumn.AutoFit

:lol: ขอบคุณมากๆครับ รบกวนอาจารย์ประเด็นที่ 1 นะครับ(ที่สั้นกว่านั้น)

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

#47

by Bafnet » Sun Aug 07, 2011 12:30 am

สวัสดีครับอาจารย์
อ่า...อันนี้ต้องให้อาจารย์ช่วยครับ

Private Sub Report()
Dim ri As Range
On Error Resume Next
With Workbooks("DumP.xlsm").Worksheets("Report")
Set ri = .Range(.Range("A1"), .Range("I65536") _
.End(xlUp)).SpecialCells(xlCellTypeVisible)
End With
ri.Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlInsideVertical)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlInsideHorizontal)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
ri.PrintOut
End Sub

อาจารย์ครับมีสั้นและกระชับกว่านี้ไหมครับ เพื่อกำหนดให้ ri มีเส้นตาราง ขอจริงๆครับ

ประเด็นที่ 2 Worksheets("Report") เป็นชีทที่รับค่าข้อมูล ซึ่งข้อมูลมีลักษณะต่างกันตามข้อมูลที่ผู้ใช้เรียก
ความต้องการคือ หลังจาก

Private Sub Report()
Dim ri As Range
On Error Resume Next
With Workbooks("DumP.xlsm").Worksheets("Report")
Set ri = .Range(.Range("A1"), .Range("I65536") _
.End(xlUp)).SpecialCells(xlCellTypeVisible)
End With
ri.Select
จะกำหนดค่าอย่างไรให้ ช่วงความกว้างของ Columm ของช่วงข้อมูล ri มีความกว้างพอดีกับเนื้อหา
(เนื้อหาที่มากที่สุดของแต่ละคอลัมม์)


รบกวนด้วยนะครับ ช่วยด้วยนะครับ :flw:

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

#46

by snasui » Sat Aug 06, 2011 12:00 am

:D ผมอาจจะพูดย่อไปหน่อยครับ เหมือนตารางหมายถึงมีลักษณะแถวและคอลัมน์ครับ :P

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

#45

by Bafnet » Fri Aug 05, 2011 11:35 pm

:lol: ผมก็เลยงง. เพราะตอนหัดเขียนVB ได้ตำราของVB6 ตอนนั้นไม่มีหนังสือ Excell ก็เห็น Properties/Gridline ของ ListBox
ผมทราบตั้งแต่แรกครับว่าในexell Properties/Gridline ของ ListBox ในexell ไม่มี
snasui wrote::D เราสามารถทำ ListBox ให้มีลักษณะเหมือนตารางได้ตามจำนวนคอลัมน์และจำนวน List ได้ครับ
ลองส่งไฟล์ตัวอย่างมาดูจะได้ทดสอบได้สะดวกครับ
เลยคิดว่ามีวิธี
เดี๋ยวมาใหม่ครับ ไปทำต่อจะได้มีปัญหาๆๆมาถามอาจารย์ต่อ :lol:
ขอบคุณครับ

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

#44

by snasui » Fri Aug 05, 2011 11:04 pm

Bafnet wrote:หรืออาจารย์จะบอกว่า เมื่อไม่มี Properties/Gridline ของ ListBox ก็จะกำหนดให้ ListBox มีเส้นตารางไม่ได้
ครับ เข้าใจถูกต้องร้อยเปอร์เซ็นต์เต็มเปรี๊ยะไม่มีหย่อนแม้แต่นิดเดียวครับ :lol:

ดูเหมือนจะงงเรื่อง Properties อยู่นะครับ :?

Properties คือคุณลักษณะที่มีของ Object เพื่อให้เรากำหนดค่าได้ เช่น กว้าง, สูง, ชิดซ้าย, ชิดขวา, เอียง, บาง, หนา ฯลฯ

ส่วน Method คือ Action หรือการกระทำของ Object เช่น Copy, Paste, Add, Delete, Refresh เป็นต้น

ซึ่ง Properties และ Method นี้แต่ละ Object มีไม่เหมือนกัน เช่น ListBox โดยค่า Default แล้วไม่มี Properties ที่เป็น Greidline หรือเส้นตาราง ก็ไม่สามารถกำหนดค่าให้มันมีได้ หากจะกำหนดให้มีก็อาจจะใช้เทคนิคอื่นเข้ามาช่วย ยกตัวอย่างเช่นเขียน Class เพื่อสร้าง Gridline ขึ้นมาใช้กับ ListBox เองหรือไปเรียกฟังก์ชั่นของ Windows ผ่านฟังก์ชั่นที่เรียกว่า API (Application Programming Interface) มาใช้

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

#43

by Bafnet » Fri Aug 05, 2011 10:49 pm

สวัสดีครับ...อาจารย์ครับที่บอกว่า
"ไม่มี Properties ในการกำหนด Gridline ของ ListBox ครับ"
ไม่เข้าใจจริงๆครับ :roll:
ผมลองดูใน Properties ของ ListBox ด้านซ้ายมือ ก็ไม่เจอ Properties/Gridline ของ ListBox
หรืออาจารย์จะบอกว่า เมื่อไม่มี Properties/Gridline ของ ListBox ก็จะกำหนดให้ ListBox มีเส้นตารางไม่ได้
ถ้าตามไฟล์ตัวอย่างที่ผมส่งไป ถ้าเราจะให้ ListBox มีเส้นตารางเหมือนข้อมูลที่ชีทที่เป็น Rowsource
ไม่เข้าใจครับ ขออภัยจริงๆ

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

#42

by snasui » Fri Aug 05, 2011 9:39 pm

Bafnet wrote:ผมได้ไปตามกระทู้ที่อาจารย์บอกครับ(เป็นเรื่องราวของการบันทึกลูกค้าและพนักงาน รายการอาหาร
และได้ลองอ่านดู ไม่พบประเด็นของการกำหนดให้ listbox มีเส้นตารางเลยครับ
ไม่มี Properties ในการกำหนด Gridline ของ ListBox ครับ
Bafnet wrote:การที่เราใช้คำสั่งที่ บันทึกจากมาโคร มันมีความเสถียรแตกต่างกับการใช้คำสั่งที่เราเขียนตรงใน VBA ไหมครับ
ความเสถียรไม่น่าจะต่างกัน หากเขียน Code เองได้อย่างแม่นยำครับ สำหรับ Code ที่ได้จากการบันทึก Macro ย่อมมั่นใจได้ว่า Code มีความแม่นยำ ทำงานได้ถูกต้องแน่นอน แต่อาจจะได้ Code ที่เกินความจำเป็นมาให้ด้วย ซึ่งเราควรที่จะปรับออกไปให้เหลือเท่าที่จำเป็นเพื่อให้มีความกระชับทำงานได้รวดเร็ว

ผมสังเกตพบว่าส่วนใหญ่ที่ไม่เสถียรเกิดจากการเขียนของเราเองทั้งนั้นครับ เช่นเขียนวนลูบไม่รู้จักจบจนเครื่องแฮงก์ไปเอง การไม่ประกาศตัวแปร หรือประกาศตัวแปรไม่เหมาะสม ทำให้การใช้งานหน่วยความจำสิ้นเปลือง ส่งผลให้ Code ทำงานช้า นอกจากนั้นแล้วการกลับมาแก้ไขภายหลังก็ช้าด้วย เพราะจะแกะไม่ออกว่าตัวแปรที่กำลังติดตามนั้นคืออะไร :lol:

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

#41

by Bafnet » Fri Aug 05, 2011 8:57 pm

สวัสดีครับ
ผมได้ไปตามกระทู้ที่อาจารย์บอกครับ(เป็นเรื่องราวของการบันทึกลูกค้าและพนักงาน รายการอาหาร
และได้ลองอ่านดู ไม่พบประเด็นของการกำหนดให้ listbox มีเส้นตารางเลยครับ
นอกจากประเด็น
1.การบันทึกข้อมูล
2.การกำหนดให้ Userform แสดงเต็มจอ
3.การกำหนด Rowsource ให้กับ listbox (ซึ่งในกระทู้ข้างต้นมี Listbox อยู่อันเดียว)
แต่กระทู้ข้างต้นก็ทำให้ผมเห็นการบันทึกในคำสั่งที่ใช้ Offset และส่งค่าข้อมูลจาก TextBox ไปยังตำแหน่งที่ต้องการโดยตรง
ซึ่งต่างจากคำสั่งที่ผมใช้คือ textbox ส่งค่ามาที่ Range จากนั้นจึงส่ง Range ที่กำหนดไปบันทึก ซึ่งเป็นวิธีที่อาจารย์สอนผมในคราวแรก
ข้อแตกต่างที่ได้คือการใช้ Offset ดูจะเป็นกระบวนการที่กระชับ ทุกอย่างเก็บค่าอยู่ใน Userform ชอบครับ :lol:

รบกวนเรื่องlistbox นะครับ
...อาจารย์ครับการที่เราใช้คำสั่งที่ บันทึกจากมาโคร มันมีความเสถียรแตกต่างกับการใช้คำสั่งที่เราเขียนตรงใน VBA ไหมครับ
:roll:

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

#40

by snasui » Thu Aug 04, 2011 10:56 pm

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

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

#39

by Bafnet » Thu Aug 04, 2011 10:43 pm

สวัสดีครับอาจารย์
หายไปวันกว่าๆไม่สบาย
วันนี้ส่งไฟล์ตัวอย่างมาให้ครับ(LIstBox)
ขอบคุณมากครับ
สมุดงาน2.xlsm
(21.92 KiB) Downloaded 16 times

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

#38

by snasui » Mon Aug 01, 2011 7:45 pm

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

ลองส่งไฟล์ตัวอย่างมาดูจะได้ทดสอบได้สะดวกครับ

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

#37

by Bafnet » Mon Aug 01, 2011 1:11 am

: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

ขอบคุณครับ

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

#36

by snasui » Sun Jul 31, 2011 11:37 pm

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

สำหรับ Code ที่ถามมา ถ้าไม่มีปัญหาใดก็ใช้ได้ครับ ปกติเราไม่ต้องเน้นพิศดาร เขียนให้เข้าใจง่าย มี Comment ไว้ตามสมควร เพื่อว่าเมื่อต้องปรับปรุงภายหลังจะได้สะดวก

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

#35

by Bafnet » Sun Jul 31, 2011 11:22 pm

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

ต่อไปก็เข้าสู่หน้ารายได้รายจ่ายครับ
ถามเลยนะครับ :lol:
บน Userform ประกอบด้วย TextBox จำนวนหลายตัว ดั่งภาพ
2.jpg
(203.69 KiB) Downloaded 16 times
ตรงสดมม์ มูลค่า ถ้าผู้ใช้คีย์จำนวนเงิน แล้วจะให้ 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:

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

#34

by snasui » Sat Jul 30, 2011 8:40 pm

: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

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

#33

by Bafnet » Sat Jul 30, 2011 7:51 pm

สวัสดีครับ
อาจารย์ครับ ตอนนี้เกิดปัญหามากมายเลยครับ ตั้งแต่การ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 ตามตัวย่างที่เคยแนบนะครับ
ขอบคุณครับ

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

#32

by snasui » Sat Jul 30, 2011 11:48 am

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

เมื่อทำงานจบแล้วจึงค่อยมากำหนดให้แสดงทำงานตามปกติด้วย Code ==> Application.ScreenUpdating = True

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

#31

by Bafnet » Sat Jul 30, 2011 11:27 am

สวัสดีครับ
ขอรบกวนถามอะไรหน่อยนะครับ
Application.ScreenUpdating = True
Application.ScreenUpdating = False
ความหมายคืออะไร
ต่างกันอย่างไร
ใช้ในโอกาสใดจึงเหมาะสม
ขอบคุณครับ

Top