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]
เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)
กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
neziices
Member
Posts: 14 Joined: Wed Nov 08, 2023 5:41 pm
Excel Ver: 2016
#1
Post
by neziices » Wed Nov 08, 2023 6:13 pm
Book4.xlsx
รบกวนสอบถามค่ะ
1.ต้องการ run macro หลังจากกด Enter โดยไม่สร้างปุ่มสามารถทำได้มั้ยคะ
2.ถ้าต้องการเพิ่มชื่อจาก column C6 เขียนแบบนี้ถูกมั้ยคะ
Code: Select all
Sub test()
Dim WS As Worksheet
Set WS = ActiveSheet
WS.Name = WS.Range("I6").Value & " " & ActiveSheet.Rang("C6").Value
End Sub
You do not have the required permissions to view the files attached to this post.
snasui
Site Admin
Posts: 30987 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:
#2
Post
by snasui » Wed Nov 08, 2023 8:13 pm
กรุณาแนบไฟล์มาใหม่เป็นนามสกุล .xls
m โดยต้องมี Code ไว้ในไฟล์นั้นเรียบร้อยแล้วจะได้ตอบต่อไปจากนั้นครับ
neziices
Member
Posts: 14 Joined: Wed Nov 08, 2023 5:41 pm
Excel Ver: 2016
#3
Post
by neziices » Thu Nov 09, 2023 9:40 am
ขออภัยค่ะ
You do not have the required permissions to view the files attached to this post.
snasui
Site Admin
Posts: 30987 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:
#4
Post
by snasui » Thu Nov 09, 2023 1:46 pm
ตัวอย่าง Code สั่งให้รันเมื่อคีย์ค่าลงในเซลล์ใด ๆ แล้ว Enter ครับ
Code: Select all
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim WS As Worksheet
Set WS = ActiveSheet
WS.Name = WS.Range("I6").Value & " " & WS.Range("C6").Value
End Sub
ควรอธิบายขั้นตอนการทำงานมาอย่างละเอียดว่าการ Enter ที่กล่าวถึงนั้น ต้องทำงานไหน กับชีตใด เซลล์ได อย่างไร ก่อนหรือไม่ ไม่เช่นนั้นจะไม่ได้คำตอบที่เฉพาะเจาะจงครับ
neziices
Member
Posts: 14 Joined: Wed Nov 08, 2023 5:41 pm
Excel Ver: 2016
#5
Post
by neziices » Thu Nov 09, 2023 2:31 pm
ิสิ่งที่ต้องการคือเมื่อมีการแก้ไขในเซลล์ I6 หลังจากกด enter ชื่อ Sheet1 เปลี่ยนตามค่ะ
snasui
Site Admin
Posts: 30987 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:
#6
Post
by snasui » Thu Nov 09, 2023 8:28 pm
แนบไฟล์ล่าสุดหลังจากปรับปรุง Code มาแล้ว แจ้งมาด้วยว่า I6 ของชีตใด ชื่อชีตจะเปลี่ยนเป็นค่าใด จะได้ดูต่อไปจากนั้นครับ
neziices
Member
Posts: 14 Joined: Wed Nov 08, 2023 5:41 pm
Excel Ver: 2016
#7
Post
by neziices » Fri Nov 10, 2023 9:46 am
I6 ของ Sheet1 ค่ะ ชื่อชีตจะเปลี่ยนเป็น PV2312001 Social Security Office
ลองทดสอบโค้ดแล้วมีป้อปอัพขึ้นค่ะ
You do not have the required permissions to view the files attached to this post.
snasui
Site Admin
Posts: 30987 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:
#8
Post
by snasui » Fri Nov 10, 2023 10:02 am
ตัวอย่างการปรับ Code ครับ
Code: Select all
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim WS As Worksheet
Set WS = ActiveSheet
If Sh.Name = Sheets(1).Name Then
If Target.Address(0, 0) = "I6" Then
WS.Name = VBA.Left(WS.Range("I6").Value & " " & WS.Range("C6").Value, 31)
End If
End If
End Sub
Code นี้จะทำงานเมื่อมีการเปลี่ยนค่าใน Sheet1 เซลล์ I6 เท่านั้น
เดิมที่เกิดปัญหาเพราะว่ากำหนดให้ชื่อชีตมีจำนวนมากกว่า 31 อักขระซึ่งมากกว่าข้อกำหนดของชื่อชีต Code ด้านบนได้ตัดให้เหลือเพียง 31 อักขระเรียบร้อยแล้วครับ
neziices
Member
Posts: 14 Joined: Wed Nov 08, 2023 5:41 pm
Excel Ver: 2016
#9
Post
by neziices » Fri Nov 10, 2023 11:49 am
อาจารย์คะ แล้วถ้าในกรณีที่ชื่อชีทไม่ใช่ Sheet1 ตัวอย่างเช่นเดิมป็นชื่อ PV2312001 Social Security Office
โค้ด If Sh.Name = Sheets(1).Name Then จะต้องเปลี่ยนเป็น If Sh.Name = " ".Name Then ถูกมั้ยคะ
แล้วแล้วในกรณีที่มีหลายชีทถ้าอยากจะกำหนดให้ในการแก้ไขเซลล์ I6 กับ C6 สามารถเปลี่ยนทุกชีท ไม่ใช่เฉพาะ sheet1 จะเพิ่มโค้ดอย่างไรคะ
Code: Select all
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim WS As Worksheet
Set WS = ActiveSheet
If Sh.Name = " ".Name Then
If Target.Address(0, 0) = "I6" Then
WS.Name = VBA.Left(WS.Range("I6").Value & " " & WS.Range("C6").Value, 31)
End If
End If
End Sub
snasui
Site Admin
Posts: 30987 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:
#10
Post
by snasui » Fri Nov 10, 2023 2:11 pm
neziices wrote: Fri Nov 10, 2023 11:49 am
ถ้าในกรณีที่ชื่อชีทไม่ใช่ Sheet1 ตัวอย่างเช่นเดิมป็นชื่อ PV2312001 Social Security Office
โค้ด If Sh.Name = Sheets(1).Name Then จะต้องเปลี่ยนเป็น If Sh.Name = " ".Name Then ถูกมั้ยคะ
กรณีเช่นนี้
ไม่จำเป็นต้องมีบรรทัดนี้ สามารถลบทิ้งหรือทำให้เป็น Comment รวมถึงลบหรือทำ End If ที่สัมพันธ์กับ If ตัวนี้ให้เป็น Comment เสียด้วยครับ
neziices
Member
Posts: 14 Joined: Wed Nov 08, 2023 5:41 pm
Excel Ver: 2016
#11
Post
by neziices » Fri Nov 10, 2023 2:50 pm
ทำได้แล้วค่ะอาจารย์ ขอบคุณมากค่ะ
เพิ่มเติมอีกนิดค่ะ ถ้าอยากจะให้ข้อความสั้นลงแก้ไขตรงเลข 31 จากโค้ด .Value, 31 ถูกมั้ยคะ
แล้วถ้าเราต้องการเพิ่มสูตรตัดข้อความจาก spacebar ในโค้ด ต้องใช้สูตรไหนคะ
เพราะลองใช้สูตร =trim กับ =left แล้วจะต้องกำหนดจำนวนตัวอักษร
ตัวอย่างเช่น ค่าที่ต้องการคือ PV2312001 Social
You do not have the required permissions to view the files attached to this post.
snasui
Site Admin
Posts: 30987 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:
#12
Post
by snasui » Fri Nov 10, 2023 3:27 pm
ตัวอย่าง Code เฉพาะที่ต้องปรับครับ
WS.Name = WS.Range("I6").Value & " " & VBA.Left(WS.Range("C6").Value, InStr(WS.Range("C6").Value, " "))
ในโอกาสถัดไปจำเป็นจะต้องปรับ Code ตามความต้องการมาเองก่อน ติดปัญหาแล้วค่อยถามกัน ปรับได้เท่าไรก็เท่านั้น ถือว่าได้ปรับมาเองก่อนแล้วตามกฎการใช้บอร์ดข้อ 5 ด้านบน
ครับ
neziices
Member
Posts: 14 Joined: Wed Nov 08, 2023 5:41 pm
Excel Ver: 2016
#13
Post
by neziices » Fri Nov 10, 2023 4:42 pm
snasui wrote: Fri Nov 10, 2023 3:27 pm
WS.Name = WS.Range("I6").Value & " " & VBA.Left(WS.Range("C6").Value, InStr(WS.Range("C6").Value, " "))
รบกวนอาจารย์ช่วยอธิบายโค้ดนี้หน่อยได้มั้ยคะ
snasui
Site Admin
Posts: 30987 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:
#14
Post
by snasui » Fri Nov 10, 2023 7:57 pm
neziices wrote: Fri Nov 10, 2023 4:42 pm
InStr(WS.Range("C6").Value, " ")
แปลว่าให้หาว่าค่าวรรคอยู่ในลำดับที่เท่าไรของ
WS.Range("C6").Value
สมมุติว่าผลลัพธ์คือ 20 เมื่อแทนค่านี้ลงใน Code ที่ครอบอยู่ด้านนอกเป็น
VBA.Left(WS.Range("C6").Value, 20)
แปลว่าให้ตัดอักขระด้านซ้ายของ
WS.Range("C6").Value
มา 20 อักขระครับ
neziices
Member
Posts: 14 Joined: Wed Nov 08, 2023 5:41 pm
Excel Ver: 2016
#15
Post
by neziices » Mon Nov 13, 2023 10:17 am
ขอบคุณมากค่ะอาจารย์
สอบถามเพิ่มเติมค่ะถ้าจะต้องการหาค่าเว้นวรรคสองค่า
เพื่อให้ได้ค่าที่ต้องการ ตัวอย่างเช่น PV2312003 Social Security
ตรงโค้ดเราจะเพิ่มเงื่อนไข
Code: Select all
WS.Name = WS.Range("I6").Value & " " & VBA.Left(WS.Range("C6").Value, InStr(WS.Range("C6").Value, " "&" "))
ได้มั้ยคะ หรือจะต้องกำหนดจำนวนอักขระเท่านั้นคะ
You do not have the required permissions to view the files attached to this post.
puriwutpokin
Guru
Posts: 3792 Joined: Fri Jan 04, 2013 9:49 pm
Location: Bangkok
Excel Ver: MS.365
#16
Post
by puriwutpokin » Mon Nov 13, 2023 12:28 pm
ลองปรับส่วนนี้ดูครับ
Code: Select all
WS.Name = WS.Range("I6").Value & " " & Application.Trim(Left(Application.Substitute(WS.Range("C6").Value, " ", Application.Rept(" ", 99)), 150))
neziices
Member
Posts: 14 Joined: Wed Nov 08, 2023 5:41 pm
Excel Ver: 2016
#17
Post
by neziices » Mon Nov 13, 2023 1:26 pm
puriwutpokin wrote: Mon Nov 13, 2023 12:28 pm
ลองปรับส่วนนี้ดูครับ
Code: Select all
WS.Name = WS.Range("I6").Value & " " & Application.Trim(Left(Application.Substitute(WS.Range("C6").Value, " ", Application.Rept(" ", 99)), 150))
ขอบคุณมากค่ะคุณ puriwutpokin
ช่วยอธิบายโค้ดนี้หน่อยได้มั้ยคะ
puriwutpokin
Guru
Posts: 3792 Joined: Fri Jan 04, 2013 9:49 pm
Location: Bangkok
Excel Ver: MS.365
#18
Post
by puriwutpokin » Mon Nov 13, 2023 2:12 pm
neziices wrote: Mon Nov 13, 2023 1:26 pm
puriwutpokin wrote: Mon Nov 13, 2023 12:28 pm
ลองปรับส่วนนี้ดูครับ
Code: Select all
WS.Name = WS.Range("I6").Value & " " & Application.Trim(Left(Application.Substitute(WS.Range("C6").Value, " ", Application.Rept(" ", 99)), 150))
ขอบคุณมากค่ะคุณ puriwutpokin
ช่วยอธิบายโค้ดนี้หน่อยได้มั้ยคะ
Application.Substitute(WS.Range("C6").Value, " ", Application.Rept(" ", 99)) ตรงนี้ เป็นการเพิ่มช่องว่างเข้าไป99 ช่องว่างครับ
จะได้ค่าเป็น
แล้วมา Left ที่ตำแหน่ง มากกว่า 99 หรือ 99*2 ก็ได้ครับ
แล้วได้ค่าแล้วมา Trim เอาค่าว่างออกครับจะได้ The Revenue
ประมาณนี้ครับ
neziices
Member
Posts: 14 Joined: Wed Nov 08, 2023 5:41 pm
Excel Ver: 2016
#19
Post
by neziices » Mon Nov 13, 2023 3:51 pm
ขอบคุณอาจารย์ Santipong และคุณ puriwutpokin มากๆค่ะ สูตรที่ให้มาใช้ได้ตามความต้องการค่ะ