snasui.com ยินดีต้อนรับ
ยินดีต้อนรับสู่กระดานถามตอบ Excel and VBA และอื่น ๆ ที่เป็นมิตรกับทุกท่าน มีไฟล์แนบมหาศาล ช่วยให้ท่านค้นหาและติดตามศึกษาได้โดยง่าย สมาชิกท่านใดที่ยังไม่ได้ระบุ Version ของ Excel ที่ใช้งานจริง สามารถทำตาม Link นี้เพื่อจะได้รับคำตอบที่ตรงกับ Version ของท่านครับ ระบุ Version ของ Excel
ฟอรัมถาม-ตอบปัญหาการใช้งาน MS Excel and VBA
Forum rules
ไม่อนุญาตให้ใช้ภาษาแชทในการถามและตอบปัญหา ไม่ใช้คำว่า "คับ" หรือ "อ่ะครับ" แทนคำว่า "ครับ" ไม่ใช้คำว่า "เด๋ว" แทนคำว่า "เดี๋ยว" เป็นต้น เนื่องจากเมื่อแปลเป็นภาษาต่างประเทศแล้วจะให้ความหมายผิดไปจากที่ควรจะเป็น
ห้ามถามโดยระบุชื่อผู้ตอบและต้องตั้งชื่อกระทู้ให้สื่อถึงปัญหาที่จะถาม ไม่ตั้งชื่อว่า ช่วยด้วยครับ, มีปัญหามาปรึกษาครับ เป็นต้น
กรุณาอธิบายปัญหาและระบุคำตอบที่ต้องการมาในกระทู้ด้วยเสมอถึงแม้จะอธิบายไว้ในไฟล์แนบแล้วก็ตาม ทั้งนี้เพื่ออำนวยความสะดวกแก่เพื่อนสมาชิกในการค้นหาข้อมูล
กรุณาแนบไฟล์ตัวอย่างพร้อมแสดงคำตอบที่ถูกต้องมาในไฟล์ด้วยเพื่อให้ง่ายต่อการทำความเข้าใจและสะดวกต่อการตอบคำถาม (ขนาดไฟล์ไม่เกิน 500Kb ขนาดภาพไม่เกิน 800*600 Pixel) ไม่แนบเป็น Link มาจากแหล่งอื่นที่อาจจะถูกลบทิ้งไปโดยต้นทางในภายหลัง นอกจากนี้ไม่ควรแนบไฟล์ที่มีข้อมูลสำคัญอันก่อให้เกิดความเสียหายกับตนเองและผู้อื่น
กรณีเป็นคำถามเกี่ยวกับ Programming เช่น VBA, VB.Net, C#, SQL ฯลฯ ต้องลองเขียนมาเองก่อนเสมอ ถามเฉพาะที่ติดปัญหา ระบุ Module, Procedure ที่ติดปัญหาให้ชัดเจน กรุณาโพสต์ Code ให้แสดงเป็น Code คือเปิดด้วย [code]
และปิดด้วย [/code]
ตัวอย่างเช่น [code]dim r as range[/code]
เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)
กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
san02551
Member
Posts: 120 Joined: Fri May 06, 2011 2:15 pm
#21
Post
by san02551 » Wed Jan 07, 2015 2:58 pm
สวัสดีปีใหม่ ครับ
จากไฟล์ที่แนบ ผมต้องการค้นหาข้อมูล จากกลุ่มคำครับ เช่น กระดาษ ก็แสดงข้อมูลที่มีคำว่า กระดาษ แสดง ครับ
โดยใส่คำค้นหาที่ N5 ข้อมูลจะแสดงที่ N7:P50 หรือจากจำนวนข้อมูลที่มี ครับ
You do not have the required permissions to view the files attached to this post.
logic
Gold
Posts: 1510 Joined: Thu Mar 18, 2010 1:57 pm
Excel Ver: 365
#22
Post
by logic » Wed Jan 07, 2015 3:43 pm
ลองทดสอบสูตรนี้ที่ N7 ครับ
=IFERROR(INDEX(Sheet2!A$3:A$19,SMALL(IF(ISNUMBER(SEARCH($N$5,Sheet2!$A$3:$A$19)),ROW(Sheet2!$A$3:$A$19)-ROW(Sheet2!$A$3)+1),ROWS(N$7:N7))),"")
เป็นสูตรอาร์เรย์ต้องกดแป้น Ctrl+Shift+Enter แล้วค่อย Copy ไปวางด้านขวาและด้านล่าง
san02551
Member
Posts: 120 Joined: Fri May 06, 2011 2:15 pm
#23
Post
by san02551 » Thu Jan 08, 2015 2:21 pm
ข้อมูลมีประมาณ 2000 แถว ครับ ดึงข้อมูลรอนานมากครับ พอจะมีวิธีการอื่นไหม ครับ
snasui
Site Admin
Posts: 30917 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:
#24
Post
by snasui » Thu Jan 08, 2015 2:53 pm
การใช้สูตรกับข้อมูลปริมาณมากๆ จะเกิดการคำนวณนาน ยิ่งข้อมูลมากก็จะยิ่งช้า หากต้องการให้เร็วคงต้องหันมาใช้ VBA ลองเขียนมาเองก่อน ติดตรงไหนค่อยถามกันต่อครับ
san02551
Member
Posts: 120 Joined: Fri May 06, 2011 2:15 pm
#25
Post
by san02551 » Thu Jan 08, 2015 7:26 pm
ที่ Sheet1 cell b1 พิมพ์คำว่า กระดาษ คลิกปุ่มค้นหา
ให้โชว์ข้อมูล หมวดกระดาษที่ b3:d50
(หรือเท่าจำนวนที่มี ครับ)
You do not have the required permissions to view the files attached to this post.
snasui
Site Admin
Posts: 30917 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:
#26
Post
by snasui » Thu Jan 08, 2015 9:33 pm
ตัวอย่าง Code ตามด้านล่างครับ
Code: Select all
Sub Rectangle1_Click()
Dim r As Range, rall As Range
Dim rcheck As Range
Set rcheck = Sheets(1).Range("b1")
Sheets(1).Range("b3").Resize(1000, 3).ClearContents
With Sheets(2)
Set rall = .Range("a3", .Range("a" & .Rows.Count).End(xlUp))
For Each r In rall
If InStr(r.Value, rcheck) > 0 Then
With Sheets(1)
.Range("b" & .Rows.Count).End(xlUp).Offset(1, 0).Resize(1, 3).Value _
= r.Resize(1, 3).Value
End With
End If
Next r
End With
End Sub
san02551
Member
Posts: 120 Joined: Fri May 06, 2011 2:15 pm
#27
Post
by san02551 » Sun Jan 11, 2015 8:26 am
Code: Select all
Sub Rectangle1_Click()
Dim r As Range, rall As Range
Dim rcheck As Range
Set rcheck = Sheets(Edit).Range("b1")
Sheets(Edit).Range("b3").Resize(1000, 3).ClearContents
With Sheets(raca)
Set rall = .Range("a3", .Range("a" & .Rows.Count).End(xlUp))
For Each r In rall
If InStr(r.Value, rcheck) > 0 Then
With Sheets(Edit)
.Range("b" & .Rows.Count).End(xlUp).Offset(1, 0).Resize(1, 3).Value _
= r.Resize(1, 3).Value
End With
End If
Next r
End With
End Sub
You do not have the required permissions to view the files attached to this post.
san02551
Member
Posts: 120 Joined: Fri May 06, 2011 2:15 pm
#28
Post
by san02551 » Sun Jan 11, 2015 8:27 am
พอดีผมได้เพิ่ม Sheet ขึ้นมาอีก เพื่อนำไปใช้งานจริง และก็ได้เปลี่ยนชื่อ Sheet ใหม่ ที่code ผมได้แก้ไข แต่ผมไม่เข้าใจครับ
snasui
Site Admin
Posts: 30917 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:
#29
Post
by snasui » Sun Jan 11, 2015 8:45 am
เท่าที่เห็นชื่อชีทยังไม่ถูกต้อง จะต้องครอบด้วยฟันหนู ไม่เช่นนั้นก็ต้องใส่ลำดับของชีทนั้น ๆ ตามตัวอย่างที่ให้ไปครับ
san02551
Member
Posts: 120 Joined: Fri May 06, 2011 2:15 pm
#30
Post
by san02551 » Sun Jan 11, 2015 9:12 am
ขอคุณครับ ลองทำดูก่อน ติดตรงไหน ผมขอรบกวนอีกครั้ง เป็นโปรแกรมจัดซื้อจัดจ้างของโรงเรียนครับ
snasui
Site Admin
Posts: 30917 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:
#31
Post
by snasui » Sun Jan 11, 2015 9:15 am
snasui wrote: เท่าที่เห็นชื่อชีทยังไม่ถูกต้อง จะต้องครอบด้วยฟันหนู ไม่เช่นนั้นก็ต้องใส่ลำดับของชีทนั้น ๆ ตามตัวอย่างที่ให้ไปครับ
ผมหมายถึงชื่อชีทที่เขียนไว้ใน Code นะครับ
san02551
Member
Posts: 120 Joined: Fri May 06, 2011 2:15 pm
#32
Post
by san02551 » Sun Jan 11, 2015 7:35 pm
ไฟล์ที่ทำการแก้ไขแล้ว ครับ
Code: Select all
Sub Rectangle1_Click()
Dim r As Range, rall As Range
Dim rcheck As Range
Set rcheck = Sheets("edit").Range("b1")
Sheets("edit").Range("b3").Resize(1000, 4).ClearContents
With Sheets("raca")
Set rall = .Range("a3", .Range("a" & .Rows.Count).End(xlUp))
For Each r In rall
If InStr(r.Value, rcheck) > 0 Then
With Sheets("edit")
.Range("b" & .Rows.Count).End(xlUp).Offset(1, 0).Resize(1, 4).Value _
= r.Resize(1, 4).Value
End With
End If
Next r
End With
End Sub
You do not have the required permissions to view the files attached to this post.
san02551
Member
Posts: 120 Joined: Fri May 06, 2011 2:15 pm
#33
Post
by san02551 » Tue Jan 13, 2015 9:25 am
เรียน ทุกๆท่าน ที่เคารพ
ผมต้องการพิมพ์ข้อมูลที่ Sheet print โดยสร้างปุ่มสั่งพิมพ์ไว้ที่ Sheet menu เวลาสั่งพิมพ์ ผมไม่ต้องการให้ โชว์ Sheet print และ พอจะเขียน Code สั่งให้พิมพ์ เฉพาะที่มีข้อมูลใน cell ได้ไหม ครับ
ผมเขียน Code ให้พิมพ์ตั้งแต่ b2:f338 ครับ (เพราะต้องเพิ่มข้อมูลอีก ครับ)
Code: Select all
Sub Rectangle1_Click()
Application.ScreenUpdating = False
Sheets("print").Visible = True
Sheets("print").Select
ActiveSheet.PageSetup.PrintArea = "$b$2:$f$338"
ActiveWindow.SelectedSheets.PrintOut copies:=1, collate:=True
Sheets("print").Visible = True
Application.ScreenUpdating = True
End Sub
You do not have the required permissions to view the files attached to this post.
snasui
Site Admin
Posts: 30917 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:
#34
Post
by snasui » Tue Jan 13, 2015 7:00 pm
ตัวอย่างการปรับ Code ครับ
Code: Select all
Sub Rectangle1_Click()
Application.ScreenUpdating = False
Sheets("print").Visible = True
Sheets("print").Select
ActiveSheet.PageSetup.PrintArea = ActiveSheet.Range("b2").CurrentRegion.Address
ActiveWindow.SelectedSheets.PrintOut copies:=1, collate:=True
Sheets("print").Visible = True
Application.ScreenUpdating = True
End Sub
san02551
Member
Posts: 120 Joined: Fri May 06, 2011 2:15 pm
#35
Post
by san02551 » Wed Jan 14, 2015 7:23 am
ส่วนก่อนนั้น ทำได้แล้วครับ
แต่ผมต้องการแทรกข้อความท้ายหน้าของแต่ละหน้า โดยถ้ามีข้อมูล ให้แทรกข้อความ
แตไม่มีข้อมูลก็ไม่ต้องแทรกข้อความ
(ส่วนหัวตารางทำได้แล้วครับ) ตัวอย่างจะอยู่ที่ Sheet data ครับ
You do not have the required permissions to view the files attached to this post.
snasui
Site Admin
Posts: 30917 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:
#36
Post
by snasui » Wed Jan 14, 2015 8:24 pm
คำว่า มีข้อมูลหรือไม่มีข้อมูล ตรวจสอบจากเซลล์ใดหรือตรวจสอบอย่างไรครับ
san02551
Member
Posts: 120 Joined: Fri May 06, 2011 2:15 pm
#37
Post
by san02551 » Thu Jan 15, 2015 7:00 am
ตรวจสอบจาก Sheet print ตั้งแต่ b6:f2000 ( เพราะจ่าจะมีการเพิ่มข้อมูลสินค้า เรื่อยๆ ครับ)
เช่น มีข้อมูลสั่งพิมพ์ 3 หน้า ก็ให้มีการแทรกข้อความที่ หัวตาราง กับท้ายตารางโดยอัตโนมัติ ครับ
ตัวอย่าง เอกสารที่ต้องการพิมพ์ อยู่ที่ Sheet data ครับ
snasui
Site Admin
Posts: 30917 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:
#38
Post
by snasui » Thu Jan 15, 2015 7:48 pm
แนบ Code มาใหม่ แสดงให้เห็นว่าได้เขียน Code การตรวจสอบข้อมูลมาแล้วจะได้ตอบต่อไปจากนั้นครับ
san02551
Member
Posts: 120 Joined: Fri May 06, 2011 2:15 pm
#39
Post
by san02551 » Fri Jan 16, 2015 11:11 am
Code: Select all
Sub Rectangle1_Click()
Application.ScreenUpdating = False
Sheets("print").Visible = True
Sheets("print").Select
ActiveSheet.PageSetup.PrintArea = ActiveSheet.Range("b2").CurrentRegion.Address
ActiveWindow.SelectedSheets.PrintOut copies:=1, collate:=True
Sheets("print").Visible = True
Application.ScreenUpdating = True
End Sub
snasui
Site Admin
Posts: 30917 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:
#40
Post
by snasui » Fri Jan 16, 2015 7:30 pm
san02551 wrote: ตรวจสอบจาก Sheet print ตั้งแต่ b6:f2000 ( เพราะจ่าจะมีการเพิ่มข้อมูลสินค้า เรื่อยๆ ครับ)
เช่น มีข้อมูลสั่งพิมพ์ 3 หน้า ก็ให้มีการแทรกข้อความที่ หัวตาราง กับท้ายตารางโดยอัตโนมัติ
Code นี้ไม่ได้ต่างไปจากเดิม ไม่มีบรรทัดใดที่แสดงว่ามีการตรวจสอบข้อมูลตามทีแจ้งมา ลองพยายามมาใหม่ครับ
อ่านโพสต์นี้อีกครั้งครับ
snasui wrote:
แนบ Code มาใหม่ แสดงให้เห็นว่าได้เขียน Code การตรวจสอบข้อมูลมาแล้วจะได้ตอบต่อไปจากนั้นครับ