วันอังคารที่ 23 กุมภาพันธ์ พ.ศ. 2564

เอ็กเซล กับการ ใส่รูปเข้าไปในเซลล์ Excel ภาพปรับขนาดตามการย่อขยายเซลล์ใด ๆ

 ผมเคยเขียนเกี่ยวกับเรื่องการแทรกรูปภาพในเซลล์ของเอ็กเซลไปแล้ว น่าจะเป็นเอ็กเซลเวอร์ชั่น 2016  และครั้งนั้นน่าจะเป็นการเขียนโค้ดด้วย vba เพื่อสั่งงานให้รูปภาพเข้าไปอยู่ในเซลล์แบบพอดิบพอดี..ซึ่งมีคนนำไปใช้จำนวนมาก ความจริงก็สามารถใช้ได้กับเอ็กเซลกับทุกเวอร์ชั่น..แต่พบปัญหาคือ ผู้ใช้ที่เป็นมือใหม่ เกิดความยุ่งยาก เพราะยังไม่คล่องกับการเขียนโค้ด ไม่ชำนาญในการสลับไปมาระหว่างหน้าต่างเขียนโค้ดและโปรแกรมเอ็กเซล และบางคนนำโค้ดไปใช้โดยที่ไม่เข้าใจความหมายของโค้ด (แม้จะอธิบายไว้แล้วก็ตาม..ความไม่คุ้นเคยกับการเขียนโปรแกรม ทำให้ทุกอย่างดูยุ่งอยากเสมอสำหรับมือใหม่ทุกคน)

 คราวนี้จะสาธิตการใส่ภาพเข้าไปใน Cell(เซลล์) ของเอ็กเซล โดยไม่ต้องพึ่ง vba ซึ่งอาจจะใช้ได้กับ excel เวอร์ชั่นสูงๆ อย่างเช่นในบทความนี้ เป็นการสาธิตวิธีการด้วย เอ็กเซล 2019 และสามารถใช้ได้กับ excel 2016 ด้วย

อย่างที่เราคุ้นเคยกันดีว่า การแทรกรูปภาพผ่านแท็บ Insert ->pictures รูปภาพที่ปรากฏบน worksheet จะลอยตัวเหนือเซลล์

วิธีการที่จะเสนอต่อไปนี้ เมื่อเราใส่ภาพเข้าไปในเซลล์แล้ว เมื่อมีการขยายเซลล์ในแนวแถว หรือคอลัมน์ รูปภาพจะยืดหดตามเซลล์ไปด้วย มาดูวิธีการทำกันเลยครับ

1.    เปิด Microsoft excel ขึ้นมา

2.    คลิ้กที่แท็บ Insert คลิ้กที่ Picture เพื่อแทรกภาพเข้ามาใน  worksheet ของ excel ผลลัพธ์ตามภาพด้านล่างนี้



3.    จากภาพนกด้านบน รูปภาพนกลอยตัวเหนือเซลล์..สมมติว่าเราต้องการให้ภาพนกอยู่ในเซลล์ A1 เมื่อเซลล์ A1 มีการย่อหรือขยาย รูปนกจะขยายตามความสูง ความกว้างของเซลล์ A1 ด้วย .. ขั้นแรกให้เราลากรูปนกไปวางบนเซลล์ A1 ก่อน

จากนั้นย่อขนาดรูปนกให้เล็กกว่าเซลล์ A1 ดังภาพด้านล่างนี้



4.    จากนั้นกดปุ่ม ALT ร่วมกับการใช้เม้าส์เพื่อขยายขนาดรูปภาพให้พอดีกับเซลล์ A1..การกดปุ่ม ALT ขณะที่เราขยายรูปภาพ จะทำให้ขอบรูปภาพด้านที่เราดึงกระโดดไปติดกับเส้นขอบเซลล์อัติโนมัติ (เรียกว่า snap) เมื่อเราดึงภาพเข้าใกล้เส้นขอบของเซลล์ด้านใดๆ..เมื่อขยายภาพทุกมุมเข้าไปในเซลล์ A1 แล้ว ก็จะผลลัพธ์ดังภาพด้านล่างนี้,


5.    ถึงตอนนี้ ดูเหมือนจะเสร็จแล้ว แต่ยังไม่เรียบร้อยครับ..เพราะเป้าหมายของเราคือ ให้ภาพนกที่อยู่ในเซลล์ A1 มีการปรับขนาดยืดหดตามการย่อขยายที่เกิดขึ้นกับเซลล์ A1 ด้วย..ถ้าย่อหรือขยายเซลล์ A1 ตอนนี้ เราจะพบว่า รูปภาพนก จะมีขนาดเท่าเดิม ส่วนเซลล์ A1 ก็เล็ก หรือใหญ่ขึ้น...ภาพไม่มีการปรับตัวตามเซลล์ ดังภาพด้านล่างนี้



จากภาพด้านบนเมื่อเรามีการหดคอลัมน์ A รูปภาพนก จะไม่ปรับขนาดให้พอดีกับเซลล์ A1 ..โอเค งั้นเรามาแก้ปัญหากันในข้อถัดไปเลย

6.    ให้เราปรับขนาดให้รูปนกเข้าไปอยู่ในเซลล์ A1 แบบพอดิบพอดีอีกครั้ง..จากนั้นคลิ้กขวาแล้วคลิ้กที่ Format Picture…


7.    ที่ด้านขวามือหน้าต่าง Format Picture ปรากฏขึ้นมา ให้เราคลิ้กที่เครื่องหมายกากบาท (Size & Properties) แล้วคลิ้ก Properties คลิ้กเลือกที่ Move and Size With cells




8.    กลับมาที่รูปภาพนก ลองย่อขยายแถว หรือคอลัมน์ ที่ทำให้เซลล์ A1 มีการย่อขยายดูครับ จะเห็นว่า รูปภาพในเซลล์ A1 ขยายขนาด หดตัวตามความกว้างของเซลล์ A1 แล้ว ดังภาพด้านล่างนี้


เมื่อหดคอลัมน์ รูปนกหดตาม



เมื่อขยายคอลัมน์ รูปนกขยายตาม



จากภาพเป็นการลองขยายคอลัมน์ หากลองขยายแถวในแนวนอน ภาพก็จะยืดตามเช่นกัน ไปทดลองกันดูได้ครับ

การประยุกต์ใช้งานก็อย่างเช่น ตารางเก็บประวัตินักเรียน ที่มีรูปภาพนักเรียนประกอบ, ตารางเก็บรายการสินค้าที่มีรูปสินค้า, ตารางที่เก็บประวัติพนักงานบริษัทที่ต้องมีรูปพนักงานประกอบ เป็นต้น

ไหน ๆ ก็พูดถึงเรื่องของรูปภาพแล้ว ข้อกล่าวเพิ่มเติมถึงเรื่องของรูปภาพ และ effects ต่างๆที่เอ็กเซล ใช้จัดการกับรูปภาพให้อ่านกันอีกนิดหนึ่งนะครับ

รูปภาพที่อยู่ในเซลล์เราสามารถปรับความสว่าง ใส่ effect รวมถึงเปลี่ยนรูปทรงของขอบภาพได้ เช่นเดิม โดยสามารถทำได้ในแท็บ format หรือ คลิ้กขวาที่รูปภาพแล้วก็คลิ้กที่ format pictures… แทนก็ได้



โดยแท็บ format จะปรากฏก็ต่อเมือเราคลิ้กเลือกที่รูปก่อนเท่านั้น..โดยในแท็บ format จะมีลูกเล่นให้เราเล่นดังนี้

Corrections ทำหน้าที่ปรับความสว่าง ความมืด ความคมชัดของภาพ

Color ทำหน้าที่เปลี่ยนสีภาพ เปลี่ยนโทนสีของภาพ (Color saturation, Color tone, Recolor)

Artistic Effects ถ้าเคยใช้ Adobe Photoshop คงคุ้นเคยกับ filter นี้ดี ใช้สำหรับใส่เอฟเฟ็คให้ภาพแบบแนวศิลปะ อาร์ท มีให้เลือกมากมาย

Compress Pictures คือ การบีดอัดรูปภาพ ลดความละเอียดของภาพลง (คุณภาพต่ำลง แต่ขนาดภาพเล็กลง)

Change Picture คือ การเปลี่ยนภาพ (แทนที่ภาพเก่า ด้วยภาพใหม่ โดยไม่ต้อง Insert ภาพใหม่เข้ามา แล้วลบภาพเก่าออกด้วยตัวเอง)

Reset Picture คือ เปลี่ยนภาพกลับไปเป็นภาพต้นฉบับ เช่น เรามีการใส่เอ็ฟเฟค,เปลี่ยนรูปทรงรูปภาพ

ด้วยคำสั่งใน Picture style เป็นรูปทรงต่าง ๆ หรือ ปรับความสว่าง ความมืด ใส่โทนสี ให้ภาพ แต่เราต้องการล้างทุกสิ่งที่ทำกับภาพแล้วให้กลับไปเป็นภาพต้นฉบับก็ให้กดปุ่ม Reset Picture ได้เลย

Picture styles คือ ใส่ effect ให้ภาพ เปลี่ยนรูปทรงให้ภาพด้วย effects ต่างๆ

Picture Border คือ ใส่เส้นขอบให้รูปภาพ ใส่สีเส้นขอบ ใส่ลักษณะเส้นของเส้นขอบ เช่นเส้นประ, กำหนดความหนาของเส้นขอบของรูปภาพได้ด้วย

Picture Layout เป็นการใส่โครงสร้างให้รูปภาพเช่น ใส่รูปภาพที่สามารถใส่ข้อความได้ด้วย, ซึ่งมีหลายรูปแบบให้เลือกใช้ เช่น ข้อความอยู่ด้านข้างรูปภาพ, ข้อความอยู่ด้านบนรูปภาพ เป็นต้น ลองเล่นกันดูครับ

Alt Text คือ การใส่คำอธิบายให้รูปภาพ (รูปภาพที่มีช่องกรอกข้อความเพื่อบรรยายว่าภาพนี้เกี่ยวกับอะไร)

Bring Forward คือ นำรูปภาพไว้ด้านหน้าภาพอื่น หรือวัตถุอื่น

Send Backward คือ นำรูปภาพไว้ด้านหลังภาพอื่น หรือวัตถุอื่น

นอกจากนี้ในแท็บ format ที่ใช้จัดการรูปภาพ ยังมีตัวหมุนภาพ (Rotate),ตัดภาพ (Crop), กำหนดความสูง,กำหนดความกว้าง เป็นต้น

 

วันเสาร์ที่ 20 กุมภาพันธ์ พ.ศ. 2564

เอ็กเซล กับ การแยกข้อความในคอลัมน์เดียวกัน ไปวางในคอลัมน์อื่น

 

เอ็กเซล กับ การแยกข้อความในคอลัมน์เดียวกัน ไปวางในคอลัมน์อื่น

อ่านแค่หัวข้ออาจจะงง ๆ ไม่เป็นไรครับ เดี่ยวจะอธิบายให้กระจ่าง..การแยกข้อความออกเป็นส่วนๆ เอ็กเซล เรียกว่าการ split ครับ ซึ่งก็สามารถทำได้ 2 วิธครับ ถ้าเป็น เอ็กเซล รุ่นเก่าๆ อาจจะไม่มีตัวช่วย คงต้องพึงพา การเขียนโปรแกรม หรือเขียนมาโคร แต่ถ้าใครใช้ Excel เวอร์ชั่นสูง ๆขึ้นมาหน่อย ก็มีตัวช่วยแน่นอน อย่างเช่น เอ็กเซล เวอร์ชั่น 2019 ที่ผมใช้อยู่นี้..ใครยังไม่มีเอ็กเซลเวอร์ชั่นล่าสุดก็หาดาวน์โหลดได้ครับ มีแจกเพียบ แต่ไม่ชี้แหล่งดาวน์โหลดน่ะครับ เผื่อ url มันมีการเปลี่ยนแปลง..

      มาเข้าเรื่องกันดีกว่า  การแยกข้อความซึ่งอยู่ในบรรทัดเดียวกัน ในคอลัมมน์เดียวกัน  แล้วไปวางในคอลัมน์อื่นนั้น สามารถทำได้ง่ายมากๆ ผ่านแท็บ Data โดยใช้ Text to Colums Wizard หรือผู้ช่วยในการแยกข้อความออกไปวางที่คอลัมน์อื่นนั่นเอง เรามาศึกษาผ่านตัวอย่างนี้กันดีกว่า

1.    ให้เราพิมพ์ข้อมูลที่เซลล์ A1:A6 ดังภาพด้านล่างนี้




2.    ใช้เม้าส์เลือกข้อความตั้งแต่เซลล์ A1:A6 จากนั้นคลิ้กที่ แท็บ Data ตามภาพด้านล่างนี้



3.จากนั้นคลิ้กที่ Text to Columns ดังภาพด้านล่างนี้เลยครับ



4.    กล่อง Convert Text to Columns Wizard ใน Step 1 จะปรากฏขึ้นมา
ให้เราคลิ้กเลือกที่
Delimited แล้วคลิ้กที่ Next



 

5.    กล่อง Convert Text to Columns Wizard ใน Step 2  จะปรากฏขึ้นมา ให้เราติ๊กถูกหน้า Comma เนื่องจากข้อความที่เราต้องการแยกออกจากกันถูกคั่นด้วย Comma (,) จากนั้นคลิ้กที่ Next ดังภาพด้านล่างนี้




6.    กล่อง Convert Text to Columns Wizard ใน Step 3  จะปรากฏขึ้นมา ให้คลิ้กเลือกที่ Text เนื่องจากสิ่งที่เราจะแยกออกจากกันคือข้อมูลชนิดข้อความอย่างเดียว จากนั้นคลิ้ก  Finish ตามภาพด้านล่างนี้เลยครับ



 

7.    ผลลัพธ์ที่ได้คือ ข้อความในคอลัมน์ A แต่ละเซลล์จะแยกออกจากกัน และถูกนำไปวางในคอลัมน์ถัดไปนั่นคือคอลัมน์ B แบบอัตโนมัติ โดยเอ็กเซล แยกข้อความในคอลัมน์ A โดยพิจารณาจากเครื่องหมาย Comma (,) ดังภาพด้านล่างนี้




ขออธิบายเพิ่มเติมในส่วนของหน้าจอ Covert Text to Columns Wizard – Step 2 of 3 น่ะครับ จะเห็นว่าในส่วนของ Delimiters มีให้เลือกอยู่ หลายอัน เช่น Tab, Semicolon,Comma, Space, Other: เป็นต้น

Tab คือ ให้เอ็กเซล แยกข้อความออกจากกันโดยพิจารณาว่า ข้อความนั้นถูกคั่น หรือเว้นวรรคด้วยเครื่องหมายแท็บหรือไม่ เอ็กเซลจะตรวจสอบและแยกข้อความออกโดยพิจารณาว่ามีการเว้นวรรคด้วยแท็บด้วยหรือไม่

Semicolon คือ ให้เอ็กเซล แยกข้อความออกจากกันโดยพิจารณาจากเครื่องหมาย Semicolon หรือ เครื่องหมาย;

Comma คือ ให้เอ็กเซล แยกข้อความออกจากกันโดยพิจารณาจากเครื่องหมาย Comma หรือ เครื่องหมาย, (ตามตัวอย่างที่แสดงให้ดู)

Space คือ ให้เอ็กเซล แยกข้อความออกจากกันโดยพิจารณาว่าในข้อความนั้นถูกเว้นวรรคด้วยช่องว่างหรือไม่ ช่องว่างที่เกิดจาการกด spacebar หรือ tab

Other: ถ้าเลือกที่ตัวเลือกนี้ หมายความว่า ให้เรากำหนดตัวแบ่งแยกข้อความด้วยตนเอง กำหนดได้ในช่องขาวๆที่เอ็กเซล มีมาให้ได้เลย ข้อความเราคั่นด้วยสัญลักษณ์อะไร ก็ลองเอามาใส่ดูครับ ดูภาพด้านล่างประกอบครับ




 

อธิบายเพิ่มเติมสำหรับในส่วนของหน้าจอ Covert Text to Columns Wizard – Step 3 of 3 ซึ่งมีรายละเอียดดังนี้ครับ

ในส่วน Column data format จะประกอบไปด้วย General,Text,Date,Do not import column (skip)

General คือ เอ็กเซล สามารถแยกได้ทั้งข้อความ ตัวเลข วันที่ ฯลฯ ไปเป็นชนิดข้อมูลทั่วไปได้ (จากตัวเลขไปเป็นตัวเลข, จากข้อความไปเป็นตัวเลข, จากข้อมูลวันที่ไปเป็นวันที่ หรือแม้แต่แปลงจากข้อความไปเป็นตัวเลขก็ได้เช่นกัน จากที่เรายกตัวอย่างมา เราเลือกที่ Text เพราะเซลล์ที่เราจะแปลง เป็นข้อความทั้งหมด แต่เราสามารถเลือกเป็น General ได้เช่นกัน เพราะ อย่างที่กล่าวมาเอ็กเซลสามารถรับรู้ได้ว่าข้อความที่เราจะแยกไปไว้คอลัมน์อื่นเป็นชนิดใด (เมื่อเลือกแบบ General)

Text คือ ข้อความที่เราจะแยกออกจากกันและไปวางในคอลัมน์ใหม่ เป็นข้อความ

Date ข้อความที่เราจะทำการแยกเป็นชนิดวันที่

Do not import column (skip) ถ้าเลือกที่ตัวเลือกนี้ เอ็กเซลจะวางข้อความที่ตัดที่อยู่หลัง Comma ไว้ในคอลัมน์เดียวกัน วางไว้ใน Column a ผลก็คือ คำที่อยู่ข้างหน้า Comma จะหายไป (เหลือแค่คอลัมน์เดียว) ดังภาพด้านล่างนี้



เมื่อกด Finish จะได้ผลลัพธ์ดังภาพด้านล่างนี้



อีกวิธีหนึ่งคือ ใช้ vba หรือ visual basic for application ที่มาพร้อมกับ Microsoft office ครับ

โดยการใช้ฟังก์ชั่น split (ฟังก์ชั่นแยกข้อความ) ก็มีความยืดหยุ่นไม่แพ้กันครับ โดยเราอาจจะแยกข้อความด้วยฟังก์ชั่น split แล้วไปเก็บไว้ในตัวแปรแบบ array ก็ได้ครับ แล้วก็ดึงข้อความที่ถูกแยกเก็บในตัวแปร array มาแสดงที่คอลัมน์ แถว หรือที่เซลล์ที่เราต้องการ

วิธีการใช้คำสั่ง split ในการแยกข้อความออกจากกัน ทำได้ดังนี้

1.    ที่เอ็กเซล ให้คลิ้กที่แท็บ Developer จากนั้นคลิ้กที่ insert ในส่วน Activex Controls ให้คลิ้กเลือก CommandButton มาวางบน sheet ที่เราทำงานอยู่

2.    ดับเบิ้ลคลิ้กที่ CommandButton แล้วเขียนโค้ด ต่อไปนี้ลงไป

Dim Mystring As String

Dim MyArray() As String

 

MyString = "ฉันรักการเขียนโปรแกรม,มันสร้างรายได้ให้ฉันมาก"

MyArray = Split(MyString, ",")

 

Range(“a10”).value=MyArray(0)

Range(“a11”).value= MyArray(1)

 

คำอธิบาย

ประกาศตัวแปร Mystring เพื่อเก็บข้อความที่เราต้องการนำมาแยก

ประกาศตัวแปร Myarray เพื่อเก็บข้อความที่แยกแล้ว (แยกโดยฟังก์ชั่น split) เก็บไว้ในช่อง Array แบบข้อความ ...
เอ็กเซล จะสร้าง
Array เท่ากับ ขนาดของข้อมูลชนิด String (ชนิดข้อความใน Microsoft Excel) ซึ่งเก็บได้หลายช่อง

กำหนดค่าให้กับตัวแปร MyString = "ฉันรักการเขียนโปรแกรม,มันสร้างรายได้ให้ฉันมาก"

ข้อความถูกแบ่งแยกด้วยเครื่องหมาย Comma (,)

ทำการแยกข้อความที่อยู่ในตัวแปร Mystring ด้วยฟังก์ชั่น Split

รูปแบบโครงสร้างของฟังก์ชั่น Split คือ Split(ข้อความที่ต้องการแยก, ตัวแบ่งแยก หรือเรียกว่า Delimiters)

ข้อความที่ต้องการแยก ในตัวอย่างนี้คือ ตัวแปร Mystring ซึ่งเก็บค่า ฉันรักการเขียนโปรแกรม,มันสร้างรายได้ให้ฉันมาก  ซึ่งเราต้องใส่เครื่องหมายครอบด้วย เพราะเป็นไวยากรณ์ของฟังก์ชั่น split

ตัวแบ่งแยก เช่น comman (,) ,semicolon, space, tab, อื่น ๆ เช่นเดียวกับตัวอย่างแรกที่เราใช้ wizard ของเอ็กเซลทำให้

ในตัวอย่างนี้เราใช้ ตัวแบ่งแยก (Delimiters)

โดยให้ฟังก์ชั่น Split แยกแล้วเก็บไว้ใน ตัวแปรแบบ Array นั่นคือ เก็บในตัแปร Myarray  ดังนี้

MyArray = Split(MyString, ",")

ผลลัพธ์คือ ตัวแปร Myarray จะเก็บค่าแยกไว้แต่ละช่อง (Array คือตัวแปรแบบช่อง) ในตัวอย่างนี้ แยกข้อความแล้วได้แค่ 2 ช่อง คือ Myarray(0) และ Myarray(1)

MyArray(0) = ฉันรักการเขียนโปรแกรม

Myarray(1)= มันสร้างรายได้ให้ฉันมาก

 

Range(“a10”).value=MyArray(0)

Range(“a11”).value= MyArray(1)

 

2 บรรทัดบนนี้ คือ นำค่าที่แยกแล้ว ไปแสดงที่ เซลล์ A10 และ เซลล์ A11 ตามลำดับ

3.    ทดสอบการทำงานของโปรแกรมโดยการกดปุ่ม Alt+F11 เพื่อกลับมาที่ Excel แล้วไปที่แท็บ Developer กดที่ Design Mode ให้เด้งขึ้นมา ให้อยู่ในสถานะรันโปรแกรม (โปรแกรมพร้อมทำงาน) จากนั้นกดที่ปุ่ม CommandButton1 ที่เราวางไว้บน Sheet เพื่อสั่งให้โปรแกรมทำงาน ให้สังเกตุผลลัพธ์ที่เซลล์ A10, และ เซลล์ A11

ถ้าปุ่ม Design Mode ยุบอยู่ หมายถึงอยู่ในโหมดแก้ไข เราจะกดปุ่ม CommandButton สั่งงานให้ทำงานโค้ดโปรแกรมที่เราเขียนไม่ได้ ต้องกดให้มันเด้งขึ้นมาก่อน

 

 

ทันข่าว

บทความแนะนำ

ผักขี้หูด “วาซาบิเมืองไทย” ยอดอ่อน ฝักอ่อน ลวกกินกับน้ำพริกช่วยละลายนิ่ว แก้อาหารไม่ย่อย

  ผักขี้หูด “วาซาบิเมืองไทย” ยอดอ่อน ฝักอ่อน ลวกกินกับน้ำพริกช่วยละลายนิ่ว แก้อาหารไม่ย่อย   “ผักขี้หูด”   ไชโป้วหางหนู ถูกพบมากที่สุดในอ...

บทความยอดนิยม