: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

การ replace ข้อมูลโดย code vba

ฟอรัมถาม-ตอบปัญหาการใช้งาน Macro และ 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. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
natthaporn
Member
Member
Posts: 187
Joined: Sun Jul 15, 2012 10:54 pm

การ replace ข้อมูลโดย code vba

#1

Post by natthaporn »

From FJAN

To FFEB

A B C
11 22.00
22 44.00
33 66.00

ดิฉันอยากจะขอคำแนะนำท่านผู้รู้ เกี่ยวกับเรื่องการเขียน code เพื่อ replace ข้อมูลคะ
ข้อมูลที่ต้องการ replace คือ FJAN, FFEB, FMAR,… ซึ่งจะต้องทำการ replace สลับไปมาระหว่างกัน
โดยเงื่อนไขตามนี้คะ
ดิฉันจะต้องดูว่าสูตร ณ ปัจจุบันอยู่ที่สูตร ถ้าอยู่ที่ FJAN และดิฉันต้องการที่จะเปลี่ยนเป็น FFEB
ก็จะเลือกที่ C2 = FJAN และที่ C4 = FFEB
โดยดิฉันทดลองเขียน code ได้ตามนี้คะ

Private Sub CommandButton1_Click()
If ActiveSheet.Range("C2") = "FJAN" And Range("C4") = "FFEB" Then
Application.Goto Reference:="Source"
Selection.Replace What:=ActiveSheet.Range("C2"), Replacement:=ActiveSheet.Range("C4"), LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
End If
End Sub

ซึ่ง code ที่ดิฉันเขียนสามารถ run ได้เพียงแค่ครั้งเดียว แต่ดิฉันต้องการที่จะเปลี่ยนจาก FFEB เป็นเดือนอื่น
จะต้องเขียน code อย่างไรคะ
การที่ดิฉันไม่ replace ข้อมูลแบบ mannual คือ กด ctrl+H เนื่องจาก file ดังกล่าวนี้จะมีผู้อื่นใช้ร่วมด้วยหลายคน
ซึ่งบางคนยังไม่ค่อยคล่องเกี่ยวกับการใช้ excel เท่าได้นัก และข้อมูลที่จะ replace ก็มีเป็นจำนวนมากคะ
Attachments
การ replace ข้อมูลโดยใช้ code vba.xlsm
(39.16 KiB) Downloaded 27 times
User avatar
snasui
Site Admin
Site Admin
Posts: 31253
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: การ replace ข้อมูลโดย code vba

#2

Post by snasui »

:D ลองปรับ Code โดยนำ If ออกไป เนื่องจาก Code ต้องการที่จะเปลี่ยนข้อมูลจาก Range Name ใน C2 ไปเป็น Range Name ใน C4 อยู่แล้ว โดยทั้งสองค่าจะเป็นอะไรก็ไม่น่าจะมีปัญหา

แต่ปัญหาคือ Range Name ที่เขียนไว้ถูกต้องหรือไม่ต้องตรวจสอบด้วยครับ นอกจากนี้สิ่งที่ต้องการ Replace มีลักษณะเป็นอย่างไร ตั้งใจจะเปลี่ยนค่าใดเป็นค่าใด ปกติการ Replace จะเป็นการเปลี่ยนอักขระใด ๆ ในพื้นที่ใด ๆ เป็นค่าที่ต้องการ
natthaporn
Member
Member
Posts: 187
Joined: Sun Jul 15, 2012 10:54 pm

Re: การ replace ข้อมูลโดย code vba

#3

Post by natthaporn »

หลังจากที่ตัด if ออกตามที่อาจารย์แนะนำแล้ว แต่พอดิฉันจะ replace จาก FFEB ไป FMAR ทำไม่ได้คะ เพราะใน code นั้น range ที่กำหนดไว้ที่ C2 และ C 4 นั้น ระบุไว้แล้วว่า
C2 = "FMAR" และ C4 = "FFEB"
หรือจะreplace จาก FMAR ไป FJAN ก็ทำไม่ได้คะ

Private Sub CommandButton1_Click()
ActiveSheet.Range("C2") = "FMAR" And Range("C4") = "FFEB"
Application.Goto Reference:="Source"
Selection.Replace What:=ActiveSheet.Range("C2"), Replacement:=ActiveSheet.Range("C4"), LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False

End Sub

ส่วน range name ของ C2 และ C4 นั้น ดิฉันไม่ได้ตั้งไว้ จึงอยากจะรบกวนขอคำแนะนำจากอาจารย์ด้วยคะ

ส่วนข้อมูลที่ต้องการ replace (C7:E9) เป็นสูตรซึ่งดึงข้อมูลมาจาก sheet data คะ มีสูตรดังนี้คะ
FMAR = {SUM(($B7=CODEMAR)*(C$6=CONMAR)*AMOUNTMAR)}
FFEB = {SUM(($B7=CODEFEB)*(C$6=CONFEB)*AMOUNTFEB)}
FMAR = {SUM(($B7=CODEMAR)*(C$6=CONMAR)*AMOUNTMAR)}
User avatar
snasui
Site Admin
Site Admin
Posts: 31253
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: การ replace ข้อมูลโดย code vba

#4

Post by snasui »

:D
natthaporn wrote:ส่วน range name ของ C2 และ C4 นั้น ดิฉันไม่ได้ตั้งไว้ จึงอยากจะรบกวนขอคำแนะนำจากอาจารย์ด้วยคะ
ไม่จำเป็นต้องตั้ง Range Name สำหรับเซลล์ดังกล่าวครับ
natthaporn wrote:ส่วนข้อมูลที่ต้องการ replace (C7:E9) เป็นสูตรซึ่งดึงข้อมูลมาจาก sheet data คะ มีสูตรดังนี้คะ
FMAR = {SUM(($B7=CODEMAR)*(C$6=CONMAR)*AMOUNTMAR)}
FFEB = {SUM(($B7=CODEFEB)*(C$6=CONFEB)*AMOUNTFEB)}
FMAR = {SUM(($B7=CODEMAR)*(C$6=CONMAR)*AMOUNTMAR)}
การตั้ง Range Name ลักษณะนี้ไม่สามารถใช้ได้ครับ ถ้าต้องการผลลัพธ์จากสูตร Array ให้ลองใช้ Sumproduct แทน Sum

ลองอธิบายขั้นตอนการทำงานมาอีกรอบว่าต้องการจะทำอะไร จากไหนไปไหน คำว่า Replace คือการ Copy ค่าในช่วงเซลล์ใด ๆ มาแทนที่ค่าเดิมใช่หรือไม่ โดยการ Replace จากใดเป็นค่าใดให้ดูใน C2 และ C4 ซึ่งได้ตั้งเป็น Range Name เอาไว้แล้ว ดังนี้เป็นต้น

หากเป็นการ Replace ลักษณะนี้ยังไม่เห็นมีความจำเป็นที่จะต้องบอกว่า Replace จากค่าใดเป็นค่าใด เราสามารถบอกว่า นำค่าใดมาแสดงได้เลย โดยดูจาก Range Name ในเซลล์ที่กำหนด
natthaporn
Member
Member
Posts: 187
Joined: Sun Jul 15, 2012 10:54 pm

Re: การ replace ข้อมูลโดย code vba

#5

Post by natthaporn »

อาจารย์คะดิฉันเข้าใจความหมายของอาจารย์แล้วคะ ต้องขอบคุณมากจริง ๆ ตอนนี้ดิฉันสามารถ replace ได้แล้วคะ แค่เปลี่ยน code เป็น ดังนี้คะ
Private Sub CommandButton1_Click()
Application.Goto Reference:="Source"
Selection.Replace What:=ActiveSheet.Range("C2"), Replacement:=ActiveSheet.Range("C4"), LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False

End Sub

ิดิฉันคิดมากไปเอง คำแนะนำของอาจารย์ทำให้ดิฉันคิดออกคะ ขอบคุณคะ
หมายเหตุ code อันนี้ดิฉันไม่ได้เขียนเองคะ แต่ลองใช้ macro แล้วนำมาประยุกต์ใช้อีกทีคะ
Post Reply