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]
เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)
กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
yangkodza
Bronze
Posts: 372 Joined: Tue Feb 10, 2015 10:37 am
Excel Ver: 2021
#1
Post
by yangkodza » Sun Aug 27, 2017 7:59 pm
Code: Select all
Sub คะแนน()
Sheets("รวม 12 วิชา").Select
' ส15101 สังคม
Range("j2").Select
ActiveCell.FormulaR1C1 = "=[ส15101.xls]ห้อง" & Right(Sheets("รายชื่อนักเรียน").Range("e3"), 1) & "!R[6]C[32]"
Selection.AutoFill Destination:=Range("j2:j51")
End Sub
จาก Code ดังกล่าว การทำงานถูกต้อง
ชื่อแผ่นงานในไฟล์ ส15101.xls จะเป็น ห้อง1 ห้อง2 ห้อง3 ตามลำดับ
ถ้าแปลี่ยนชื่อแผ่นงานเป็น C1 C2 C3 ผมเปลี่ยน คำว่า "ห้อง" เป็น "C" ยังคงทำงานตามปกติได้อยู่
แต่ผมต้องปรับเป็น c1t1 c2t1 c3t1 ตามลำดับ
ผมต้องการเปลี่ยนชื่อแผ่นงาน ทำให้การอ้างอิงผิดไป
ผมต้องปรับสูตรแบบไหนครับ
snasui
Site Admin
Posts: 30744 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:
#2
Post
by snasui » Sun Aug 27, 2017 8:12 pm
แนบไฟล์ตัวอย่างที่มีชื่อชีตตามที่ต้องการจะใช้จริงมาด้วยจะได้สะดวกในการตอบครับ
yangkodza
Bronze
Posts: 372 Joined: Tue Feb 10, 2015 10:37 am
Excel Ver: 2021
#3
Post
by yangkodza » Sun Aug 27, 2017 8:36 pm
ไฟล์แนบครับ
01 ครูประจำชั้น.xls
รายชื่อประถม.xlsx
ส15101.xls
ไฟล์ Run คือ ครูประจำชั้น ลองกดเปลี่ยนห้องเป็น 5-1 หรือ 5-2 ดูครับ จะปกติ
เพราะว่าชื่อแผ่นงานใน ส15101 เป็น C1 C2
แต่ผมต้องการเปลี่ยนชื่อแผ่นงาน จาก C1 เป็น C1T1 และ C2 เป็น C2T1
ทำให้ไม่สามารถอ้างอิงคะแนนได้ครับ
มาโครอยู่ในไฟล์ ครูประจำชั้น ชื่อมาโครมา คะแนน
You do not have the required permissions to view the files attached to this post.
snasui
Site Admin
Posts: 30744 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:
#4
Post
by snasui » Sun Aug 27, 2017 9:36 pm
สุตรในไฟล์ ครูประจำชั้น ติดการอ้างอิงแบบ Error ที่น่าจะเกิดการลบชีตทิ้งไป กรุณาแนบมาใหม่ครับ
yangkodza
Bronze
Posts: 372 Joined: Tue Feb 10, 2015 10:37 am
Excel Ver: 2021
#5
Post
by yangkodza » Sun Aug 27, 2017 9:55 pm
snasui wrote: สุตรในไฟล์ ครูประจำชั้น ติดการอ้างอิงแบบ Error ที่น่าจะเกิดการลบชีตทิ้งไป กรุณาแนบมาใหม่ครับ
01 ครูประจำชั้น.xls
รบกวนด้วยครับ
You do not have the required permissions to view the files attached to this post.
snasui
Site Admin
Posts: 30744 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:
#6
Post
by snasui » Mon Aug 28, 2017 7:14 pm
เปลี่ยนบรรทัดนี้ครับ
ActiveCell.FormulaR1C1 = "='" & CurrDir & "\[รายชื่อประถม.xlsx]ป." & ClassRoom & "'!R3c2:r52C5"
เปลี่ยนเป็น
ActiveCell.FormulaR1C1 = "='" & CurrDir & "\[รายชื่อประถม.xlsx]" & ClassRoom & "'!R3c2:r52C5"
โดยไฟล์ที่จะ Link ข้อมูลมาใช้คือ [รายชื่อประถม.xlsx] และชีตที่จะนำข้อมูลมาใช้คือ C1T1, C2T1 และถ้าไม่มีชีตชื่อนี้จะติด Error ครับ
yangkodza
Bronze
Posts: 372 Joined: Tue Feb 10, 2015 10:37 am
Excel Ver: 2021
#7
Post
by yangkodza » Mon Aug 28, 2017 7:29 pm
snasui wrote: เปลี่ยนบรรทัดนี้ครับ
ActiveCell.FormulaR1C1 = "='" & CurrDir & "\[รายชื่อประถม.xlsx]ป." & ClassRoom & "'!R3c2:r52C5"
เปลี่ยนเป็น
ActiveCell.FormulaR1C1 = "='" & CurrDir & "\[รายชื่อประถม.xlsx]" & ClassRoom & "'!R3c2:r52C5"
โดยไฟล์ที่จะ Link ข้อมูลมาใช้คือ [รายชื่อประถม.xlsx] และชีตที่จะนำข้อมูลมาใช้คือ C1T1, C2T1 และถ้าไม่มีชีตชื่อนี้จะติด Error ครับ
กำลังงงครับ ว่า แล้วดึงข้อมูลจากไฟล์ ส15101.xls แผ่นงาน C1T1, C2T1 มาตอนไหนครับ
ตอนนี้ยังดึงคะแนนไม่มาครับ
snasui
Site Admin
Posts: 30744 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:
#8
Post
by snasui » Mon Aug 28, 2017 7:49 pm
ผมเขียนอธิบายไว้แล้วกรุณาอ่านทบทวนอีกครั้ง จะเป็นไฟล์ใดก็นำไปใช้ใน Code ได้ตามที่ต้องการ ขอให้ไฟล์นั้นมีชีต C1T1, C2T1 หรืออื่น ๆ ตามต้องการ
yangkodza
Bronze
Posts: 372 Joined: Tue Feb 10, 2015 10:37 am
Excel Ver: 2021
#9
Post
by yangkodza » Mon Aug 28, 2017 8:52 pm
snasui wrote: ผมเขียนอธิบายไว้แล้วกรุณาอ่านทบทวนอีกครั้ง จะเป็นไฟล์ใดก็นำไปใช้ใน Code ได้ตามที่ต้องการ ขอให้ไฟล์นั้นมีชีต C1T1, C2T1 หรืออื่น ๆ ตามต้องการ
Untitled.gif
ผมพยายามอ่านอย่างช้าๆ หลายครั้งแล้วครับ แต่ยังทำไม่ได้สักที
ตอนนี้ยังไม่ผ่านครับ
R3c2:r52C5 เป็นข้อมูล รายชื่อนักเรียน อย่างเดียว
ยังไม่มีการดึงคะแนนเข้ามาใน G2 ครับ
รบกวนช่วยดู มาโคร คะแนน ในไฟล์ ส15101.xls ด้วยครับ
ถ้า ชื่อแผ่นงานเป็น C1T1, C2T1
You do not have the required permissions to view the files attached to this post.
snasui
Site Admin
Posts: 30744 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:
#10
Post
by snasui » Mon Aug 28, 2017 9:34 pm
แนบไฟล์ทั้งหมดมาใหม่ ด้วยชื่อชีตปัจจุบันที่ต้องการจะใช้งาน โดยได้ปรับ Code มาเองแล้ว จะได้ตอบต่อไปจากนั้นครับ
yangkodza
Bronze
Posts: 372 Joined: Tue Feb 10, 2015 10:37 am
Excel Ver: 2021
#11
Post
by yangkodza » Mon Aug 28, 2017 10:35 pm
01 ครูประจำชั้น.xls
ส15101.xls
รายชื่อประถม.xlsx
การทำงาน
เปิดไฟล์ 01 ครูประจำชั้น.xls
กดตัวการ์ตูนสีเขียว พิมพ์ 5-1 แล้วกด Enter
จะเจอหน้าต่างเลือกแผ่นงาน (ตรงส่วนนี้ต้องการให้ถ้าเราเลือก 5-1 ก็เรียกข้อมูลในแผ่นงาน C1t1 มาเลย
หรือถ้าเรา
กดตัวการ์ตูนสีเขียว พิมพ์ 5-2 แล้วกด Enter ก็เรียกข้อมูลในแผ่นงาน C2t1 มาเลย
โดยข้อมูลไปวางที่แผ่นงาน รวม 12 วิชา วางที่ Cell G2:G51 ครับ
ส่วนมาโครปัญหา
น่าจะเป็น มาโครชื่อคะแนน ในไฟล์ 01 ครูประจำชั้น.xls
Code: Select all
Sub คะแนน()
Sheets("รวม 12 วิชา").Select
' ส15101 สังคม
Range("G2").Select
ActiveCell.FormulaR1C1 = "=[ส15101.xls]C" & Right(Sheets("รายชื่อนักเรียน").Range("e3"), t1) & "!R[6]C[35]"
Selection.AutoFill Destination:=Range("G2:G51")
End Sub
ขอบคุณมากครับ
You do not have the required permissions to view the files attached to this post.
snasui
Site Admin
Posts: 30744 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:
#12
Post
by snasui » Mon Aug 28, 2017 10:41 pm
ตัวอย่าง Code ครับ
Code: Select all
Sub เปลี่ยนห้อง()
'
' เปลี่ยนห้อง แมโคร
'
CurrDir = Application.ActiveWorkbook.Path
Classroom = InputBox("ตัวอย่าง ห้องเรียน ป.1/1 พิมพ์ 1-1")
'ClassRoom = o6
'
Range("b3").Select
ActiveCell.FormulaR1C1 = "='" & CurrDir & "\[รายชื่อประถม.xlsx]ป." & Classroom & "'!R3c2:r52C5"
Range("b3").Select
Selection.AutoFill Destination:=Range("b3:E3"), Type:=xlFillDefault
Range("b3:E3").Select
Selection.AutoFill Destination:=Range("b3:E52")
Range("b3:E52").Select
Range("b3").Select
'Call Module14.คะแนน
Sheets("รวม 12 วิชา").Select
' ส15101 สังคม
Range("G2").Select
If Classroom = "5-1" Then
ActiveCell.FormulaR1C1 = "=[ส15101.xls]" & "C1T1" & "!R[6]C[35]"
ElseIf Classroom = "5-2" Then
ActiveCell.FormulaR1C1 = "=[ส15101.xls]" & "C2T1" & "!R[6]C[35]"
End If
Selection.AutoFill Destination:=Range("G2:G51")
End Sub
yangkodza
Bronze
Posts: 372 Joined: Tue Feb 10, 2015 10:37 am
Excel Ver: 2021
#13
Post
by yangkodza » Tue Aug 29, 2017 8:04 pm
จากที่อาจารย์ปรับแก้ไขให้สามารถทำงานได้ดีครับ
Code: Select all
Sheets("รวม 12 วิชา").Select
' คะแนนสังคม เทอม1
Range("G2").Select
On Error Resume Next
Set WB = Workbooks("01สังคม_ป4.xlsm")
If Err <> 0 Then GoTo สุขศึกษา
If Classroom = "5-1" Then
ActiveCell.FormulaR1C1 = "=[01สังคม_ป4.xlsm]" & "สรุป1" & "!R[2]C[-5]" 'ok =B4
ElseIf Classroom = "5-2" Then
ActiveCell.FormulaR1C1 = "=[01สังคม_ป4.xlsm]" & "สรุป1" & "!R[2]C[-2]" 'ok =E4
ElseIf Classroom = "5-3" Then
ActiveCell.FormulaR1C1 = "=[01สังคม_ป4.xlsm]" & "สรุป1" & "!R[2]C[1]" 'ok =H4
ElseIf Classroom = "5-4" Then
ActiveCell.FormulaR1C1 = "=[01สังคม_ป4.xlsm]" & "สรุป1" & "!R[2]C[4]" 'ok =K4
ElseIf Classroom = "5-5" Then
ActiveCell.FormulaR1C1 = "=[01สังคม_ป4.xlsm]" & "สรุป1" & "!R[2]C[7]" 'ok =N4
End If
Selection.AutoFill Destination:=Range("G2:G51")
สุขศึกษา:
Set WB = Workbooks("01สังคม_ป4.xlsm")
ActiveCell.FormulaR1C1 = "=[
01สังคม_ป4.xlsm ]" & "สรุป1" & "!R[2]C[-5]" 'ok =B4
แต่ผมอยากปรับในส่วนของ code เพิ่มเติมให้กระชับขึ้น
โดยถ้าเราประกาศตัวแปรเข้าไป แล้วนำมาใช้งาน
ในส่วนที่ผมทำข้อความสีแดง ต้องปรับอย่างไรครับ
snasui
Site Admin
Posts: 30744 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:
#14
Post
by snasui » Tue Aug 29, 2017 9:40 pm
yangkodza wrote: Set WB = Workbooks("01สังคม_ป4.xlsm")
ActiveCell.FormulaR1C1 = "=[01สังคม_ป4.xlsm]" & "สรุป1" & "!R[2]C[-5]" 'ok =B4
ตัวอย่างการปรับ Code ครับ
จาก
ActiveCell.FormulaR1C1 = "=[01สังคม_ป4.xlsm]" &...
ปรับเป็น
ActiveCell.FormulaR1C1 = "=["&WB.Name&"]" &...
yangkodza
Bronze
Posts: 372 Joined: Tue Feb 10, 2015 10:37 am
Excel Ver: 2021
#15
Post
by yangkodza » Tue Aug 29, 2017 10:26 pm
ขอถามเพิ่มเติมครับ
Code: Select all
ActiveCell.FormulaR1C1 = "=[01สังคม_ป4.xlsm]" & "สรุป1" & "!R[2]C[-5]" 'ok =B4
ถ้าเราต้องการอ้างอิงแบบปกติ ไม่เอารูปแบบ R1C1 เราต้องปรับสูตรอย่างไรครับ
จาก
คือ เซล B4
ขอบคุณครับ
snasui
Site Admin
Posts: 30744 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:
#16
Post
by snasui » Tue Aug 29, 2017 10:32 pm
ตัวอย่างกาปรับ Code ครับ
ActiveCell.Formula = "=[01สังคม_ป4.xlsm]" & "สรุป1" & "!B4"
yangkodza
Bronze
Posts: 372 Joined: Tue Feb 10, 2015 10:37 am
Excel Ver: 2021
#17
Post
by yangkodza » Tue Aug 29, 2017 11:23 pm
snasui wrote: ตัวอย่างกาปรับ Code ครับ
ActiveCell.Formula = "=[01สังคม_ป4.xlsm]" & "สรุป1" & "!B4"
ส่วนนี้ทำได้แล้วครับ
ผมก็ติดอยู่นาน แก้แต่ทางด้านหลัง ไม่ได้แก้ที่ด้านหน้าด้วย
002.GIF
เหลือตรงตัวแปรครับ ลองใส่แล้วฟ้องข้อความแดงครับผม
You do not have the required permissions to view the files attached to this post.
snasui
Site Admin
Posts: 30744 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:
#18
Post
by snasui » Tue Aug 29, 2017 11:28 pm
คีย์ให้มีวรรคคั่นระหว่างระหว่างเครื่องหมาย
&
กับข้อความอื่นครับ
yangkodza
Bronze
Posts: 372 Joined: Tue Feb 10, 2015 10:37 am
Excel Ver: 2021
#19
Post
by yangkodza » Tue Aug 29, 2017 11:37 pm
ขอบคุณมากครับอาจารย์
ผมลองปรับกรณีเป็น 2 วิชา
สามารถทำงานได้ตามปกติ
พรุ่งนี้ค่อยเพิ่มวิชาที่เหลืออีกทีครับผม
นอนดึก แต่คุ้มค่ามากๆครับ
yangkodza
Bronze
Posts: 372 Joined: Tue Feb 10, 2015 10:37 am
Excel Ver: 2021
#20
Post
by yangkodza » Fri Oct 13, 2017 5:07 pm
ดึงคะแนนไม่ได้ครับ
ผมจะลองดึง 3 วิชา
ถ้ากรณีไม่เจอชื่อไฟล์ ก็ให้ไปดึงคะแนนถัดไปได้เลย
Code: Select all
Sub ดึง()
CurrDir = Application.ActiveWorkbook.Path
Classroom = [z4].Value
Range("J4").Select
On Error Resume Next
Set wb = Workbooks("01สังคม_ป1.xlsm")
If Err <> 0 Then GoTo สุขศึกษา
If Classroom = "1" Then
ActiveCell.Formula = "=[" & wb.Name & "]" & "สรุป1" & "!ห้อง1เทอม1"
ElseIf Classroom = "2" Then
ActiveCell.Formula = "=[" & wb.Name & "]" & "สรุป1" & "!ห้อง2เทอม1"
ElseIf Classroom = "3" Then
ActiveCell.Formula = "=[" & wb.Name & "]" & "สรุป1" & "!ห้อง3เทอม1"
ElseIf Classroom = "4" Then
ActiveCell.Formula = "=[" & wb.Name & "]" & "สรุป1" & "!ห้อง4เทอม1"
ElseIf Classroom = "5" Then
ActiveCell.Formula = "=[" & wb.Name & "]" & "สรุป1" & "!ห้อง5เทอม1"
End If
Selection.AutoFill Destination:=Range("J4:J53"), Type:=xlFillDefault
สุขศึกษา:
Classroom = [z4].Value
Range("L4").Select
On Error Resume Next
Set wb = Workbooks("02สุขศึกษา_ป1.xlsm")
If Err <> 0 Then GoTo ศิลปะ
If Classroom = "1" Then
ActiveCell.Formula = "=[" & wb.Name & "]" & "สรุป1" & "!ห้อง1เทอม1"
ElseIf Classroom = "2" Then
ActiveCell.Formula = "=[" & wb.Name & "]" & "สรุป1" & "!ห้อง2เทอม1"
ElseIf Classroom = "3" Then
ActiveCell.Formula = "=[" & wb.Name & "]" & "สรุป1" & "!ห้อง3เทอม1"
ElseIf Classroom = "4" Then
ActiveCell.Formula = "=[" & wb.Name & "]" & "สรุป1" & "!ห้อง4เทอม1"
ElseIf Classroom = "5" Then
ActiveCell.Formula = "=[" & wb.Name & "]" & "สรุป1" & "!ห้อง5เทอม1"
End If
Selection.AutoFill Destination:=Range("L4:L53"), Type:=xlFillDefault
ศิลปะ:
Classroom = [z4].Value
Range("M4").Select
On Error Resume Next
Set wb = Workbooks("03ศิลปะ_ป1.xlsm")
If Err <> 0 Then GoTo จบ
If Classroom = "1" Then
ActiveCell.Formula = "=[" & wb.Name & "]" & "สรุป1" & "!ห้อง1เทอม1"
ElseIf Classroom = "2" Then
ActiveCell.Formula = "=[" & wb.Name & "]" & "สรุป1" & "!ห้อง2เทอม1"
ElseIf Classroom = "3" Then
ActiveCell.Formula = "=[" & wb.Name & "]" & "สรุป1" & "!ห้อง3เทอม1"
ElseIf Classroom = "4" Then
ActiveCell.Formula = "=[" & wb.Name & "]" & "สรุป1" & "!ห้อง4เทอม1"
ElseIf Classroom = "5" Then
ActiveCell.Formula = "=[" & wb.Name & "]" & "สรุป1" & "!ห้อง5เทอม1"
End If
Selection.AutoFill Destination:=Range("M4:M53"), Type:=xlFillDefault
จบ:
End Sub
คะแนน.rar
You do not have the required permissions to view the files attached to this post.