หน้าเว็บ

แสดงบทความที่มีป้ายกำกับ Database แสดงบทความทั้งหมด
แสดงบทความที่มีป้ายกำกับ Database แสดงบทความทั้งหมด

วันเสาร์ที่ 23 กันยายน พ.ศ. 2560

การแยกข้อมูลคอลัมน์เดียวเป็น 2 คอลัมน์

Flirt male ข้อมูลที่อยู่ในรูปแบบรายงานและวางข้อมูลอยู่ในคอลัมน์เดียว เมื่อจะนำไปใช้งานต่อจะมีความยุ่งยากลำบาก เพื่อให้สะดวกต่อการใช้งานควรแยกออกมาเป็น 2 คอลัมน์หรือมากกว่า ขึ้นอยู่กับลักษณะของข้อมูล เพื่อที่ จะทำให้เป็น Database เสียก่อน เพื่อความสะดวกหากต้องการนำไปใช้ทำรายงานในรูปแบบที่ต้องการต่อไป

Video ด้านล่างนี้แสดงการนำข้อมูลที่ถูกจัดเก็บเป็นรูปแบบรายงานแต่อยู่ในคอลัมน์เดียว โดย Product จะเยื้องซ้าย ส่วนข้อมูล Quantity ที่เป็นตัวเลขจะเยื้องขวา เราจะนำข้อมูลดังกล่าวแยกออกมาเป็น 2 คอลัมน์ด้วย VBA เพื่อให้แสดงเป็น Database จะได้สะดวกในการนำไปทำรายงานตามต้องการ Sarcastic smile

Video แสดงการนำข้อมูลในคอลัมน์เดียวแยกเป็น 2 คอลัมน์

วันอาทิตย์ที่ 2 กรกฎาคม พ.ศ. 2560

การบันทึกข้อมูลลง Database ด้วย VBA

⌨ ผู้ใช้งาน Excel ส่วนใหญ่มักจะมีปัญหาการนำข้อมูลไปจัดเก็บไว้เป็นฐานข้อมูลหรือ Database เพื่อให้เกิดความสะดวกในการนำข้อมูลมาใช้งานในภายหลัง ซึ่งการจัดเก็บข้อมูลลง Database นั้นไม่สามารถทำได้ด้วยสูตร จำเป็นต้องพึ่งพา VBA เข้ามาจัดการ Video ด้านล่างนี้แสดงการนำข้อมูลที่ผู้ใช้งานกรอกไปจัดเก็บไว้เป็น Database ด้วย VBA พร้อมทั้งให้หมายเลขลำดับรายการข้อมูลด้วย Code ไม่กี่บรรทัด รวมถึงวิธีการสร้างปุ่มกดเพื่อเรียกใช้งาน Procedure ที่เราเขียนไว้ Computer

Vidio แสดงการบันทึกข้อมูลง Database ด้วย VBA

แปลงข้อมูลให้เป็น Database ด้วย VBA

Eye rolling smile  บ่อยครั้งทีเดียวที่เราได้รับข้อมูลมาแล้วไม่สามารถนำไปใช้งานต่อได้ ยกตัวอย่างเช่น ข้อมูลที่คั่นด้วยเครื่องหมายคอมม่าและวางอยู่ในคอลัมน์เดียว หากข้อมูลเหล่านั้นคั่นด้วยเครื่องหมายคอมม่าด้วยจำนวนที่ไม่แน่นอนจะยิ่งยุ่งยากลำบากในการจัดการ Video ด้านล่างนี้แสดงการนำข้อมูลที่ไม่เป็น Database มาจัดเรียงใหม่ให้เป็น Database ด้วย VBA โดยนำข้อมูลที่คั่นด้วยเครื่องหมายคอมม่ามาแยกออกจากกันเป็นแต่ละเซลล์แล้ววางเรียงต่อเนื่องกันไปทางด้านล่าง ซึ่งเมื่อแปลงมาเป็น Database แล้วจะสามารถนำข้อมูลไปจัดทำรายงานต่าง ๆ ได้โดยง่าย Thumbs up

Video แสดงการแปลงข้อมูลให้เป็น Database ด้วย VBA

การกระจายข้อมูลออกเป็นหลายชีตด้วย VBA

Smile เราสามารถนำข้อมูลในชีตเดียวกันไปแสดงหลาย ๆ ชีตได้หลายวิธี เช่น ด้วยสูตร ด้วย PivotTable แต่ทั้งสองวิธีจะมีปัญหากับการเพิ่มลดข้อมูล เพราะไม่สามารถที่จะเพิ่มลดชีตได้อย่างอัตโนมัติ หากต้องการให้มีการเพิ่มลดชีตได้อย่างอัตโนมัติจำเป็นต้องพึ่งพา VBA Video ด้านล่างนี้เป็นการเขียนโปรแกรมด้วย VBA ให้กระจายข้อมูลในชีตใด ๆ ออกเป็นหลายชีตตามค่าที่กำหนด โดยสามารถทำซ้ำได้ตามต้องการ กรณีที่เราทำซ้ำ โปรแกรมจะทำการลบชีตที่มีอยู่เดิมทิ้งไปก่อน จากนั้นค่อยเพิ่มชีตและนำข้อมูลมาวางใหม่ Flirt male

Video แสดงการกระจายข้อมูลออกเป็นหลายชีต

การแปลง Report ไปเป็น Database

School ความยุ่งยากสำคัญอีกประการหนึ่งของผู้ทำรายงาน คือการทำรายงานจากรายงานที่ได้รับมาจากผู้อื่น เนื่องจากข้อมูลที่ได้รับมาส่วนใหญ่จะเป็นรายงานเช่นกัน หากรูปแบบไม่ตรงกันทุกประการจะเกิดความยุ่งยาก เพื่อให้ทำรายงานได้โดยง่าย ควรแปลงรายงานที่ได้รับมาให้เป็น Database เสียก่อน Video ด้านล่างนี้เป็นการสาธิตการใช้ VBA แปลงรายงานที่อยู่ในหลาย ๆ ชีต มีคอลัมน์และบรรทัดไม่เท่ากันมาเป็น Database เสียใหม่ เพื่อให้สะดวกต่อการทำรายงานในทอดถัดไป สามารถทำซ้ำได้ตามต้องการ หากมีการทำซ้ำโปรแกรมจะลบข้อมูลใน Database ทิ้งไปก่อนแล้วทำการเก็บข้อมูลมาเรียงใหม่ Winking smile

Video แสดงการแปลง Report ไปเป็น Database

รวมข้อมูลที่กระจัดกระจายมาเป็น Database

I don't know smile การ Import ข้อมูลจากระบบอื่นเข้ามาใน Excel หรือแม้กระทั่งการดาวน์โหลดข้อมูลออกมาจากระบบหลักของกิจการ ในบางครั้งกลับพบว่าข้อมูลที่ได้มานั้นมีความไม่เป็นระเบียบ เช่นมีบรรทัดทัดว่าง มีคอลัมน์ว่างเกินความต้องการ หรือข้อมูลกระจายเป็นกลุ่ม ๆ Video ด้านล่างนี้แสดงการใช้ VBA รวมรวมข้อมูลที่กระจัดกระจายเป็นกลุ่ม ๆ ในหลาย ๆ พื้นที่มาเรียงใหม่ให้เป็น Database พร้อมที่จะใช้ทำรายงาน สามารถทำซ้ำได้ตามต้องการ กรณีที่เราทำซ้ำด้วยข้อมูลที่ได้รับข้อมาใหม่ โปรแกรมจะมีการ Clear ข้อมูลเดิมใน Database ทิ้งไปก่อนแล้วนำข้อมูลล่าสุดมาเรียงให้ใหม่ Winking smile

Video แสดงการรวมข้อมูลที่กระจัดกระจายมาเป็น Database

วันอาทิตย์ที่ 16 ตุลาคม พ.ศ. 2554

การแปลงข้อมูลแบบรายงานให้เป็น Database ด้วย VBA

กรณีที่ต้องทำงานกับข้อมูลที่ถูกแปลงมาเป็นรายงานแล้วนั้น ค่อนข้างจะยุ่งยากลำบากในการนำมาจัดการต่อ ไม่ว่าจะเป็นการค้นหาข้อมูล การจัดเรียง การนำไปแสดงเป็นกราฟ ฯลฯ ในหลายกรณีจึงจำเป็นต้องนำข้อมูลมาเรียงเสียใหม่ให้เป็น Database เพื่อให้ง่ายต่อการใช้งาน และในบางครั้งจำเป็นต้องทำการลบข้อมูลที่ไม่จำเป็นทิ้งไปเพื่อให้เหลือเฉพาะข้อมูลที่ต้องการใช้งานเท่านั้น

ยกตัวอย่างมีข้อมูลสัญญาใน Sheet1 ซึ่งมี 4 คอลัมน์ คือ คอลัมน์ที่

  1. เลขที่สัญญา
  2. ปี
  3. เดือน
  4. จำนวนเงิน

ได้ถูกจัดเรียงไปทางขวาจำนวน 8 ชุดข้อมูล ซึ่งต้องการนำมาจัดเรียงใหม่เป็น Database ตาม Sheet2 และต้องการลบบรรทัดที่ค่าเดือนมีค่าเป็นศูนย์ทิ้งไปด้วยดังภาพตัวอย่างด้านล่าง

ภาพตัวอย่างข้อมูลแบบรายงานและข้อมูลหลังแปลงเป็น Database

CVDB

เราสามารถใช้ VBA ตามด้านล่างมาจัดการได้ครับ Winking smile

Option Explicit

Sub ReRangeData()
Dim rs As Range, rt As Range
Dim r As Range, rAll As Range
Dim lng As Long, lngLr As Long
Dim i As Integer, c As Integer
Application.ScreenUpdating = False
lngLr = Rows.Count
Worksheets("Sheet1").Range("A1:D1") _
.Copy Worksheets("Sheet2").Range("A1")
With Worksheets("Sheet1")
Set rs = .Range("A2", .Range("A2").End(xlDown))
i = rs.Count
End With
For lng = 1 To 8
With Worksheets("Sheet2")
Set rt = .Range("A" & lngLr).End(xlUp).Offset(1, 0)
rs.Copy rt
Set rs = rs.Offset(0, 1 + c).Resize(, 3)
Set rt = .Range("B" & lngLr).End(xlUp).Offset(1, 0)
rs.Copy rt
Set rAll = .Range("C2").End(xlDown).Offset(-i + 1, 0).Resize(i)
End With
For Each r In rAll
If r = 0 Then
r = ""
End If
Next r
rAll.SpecialCells(xlCellTypeBlanks).EntireRow.Delete
With Worksheets("Sheet1")
Set rs = rs.End(xlToLeft).Resize(i, 1)
End With
c = c + 3
Next lng
Application.ScreenUpdating = True
End Sub


 

วันพุธที่ 9 ธันวาคม พ.ศ. 2552

การนำข้อมูลจากหลาย Sheet มาต่อกันใน Sheet เดียว

สำหรับข้อมูลที่อยู่ในฟอร์มเดียวกันแต่แยกเป็นหลาย Sheet และต้องการนำมาต่อกันเป็นฐานข้อมูลใน Sheet เดียวกันนั้น สามารถใช้สูตรทำได้ครับ แต่อาจจะมีวิธีการหลายขั้นตอน ดังจะแสดงตามด้านล่าง

ภาพ Sheet ที่ใช้รวมข้อมูล 

MergeMultipleSheet01

ภาพ Sheet ที่ 1 

MergeMultipleSheet02

ภาพ Sheet ที่ 2 

MergeMultipleSheet03

ภาพ Sheet ที่ 3 

MergeMultipleSheet04

จากภาพด้านบนเป็นการนำข้อมูล Sheet1, 2, 3 มาต่อกัน ให้ทำตามลำดับดังนี้ครับ

  1. เขียนชื่อชีทเรียงกันไว้ตามต้องการที่ G1:G3
  2. เซลล์ H1 คีย์สูตรเพื่อนับว่ามีข้อมูลใน Sheet1 เท่าไร
    =COUNTA(INDIRECT("'"&G1&"'!"&"A2:A65536"))
    Enter แล้ว Copy ลงด้านล่าง
  3. เซลล์ H4 รวมจำนวนจากด้านบน คีย์
    =SUM(H1:H3)
    Enter
  4. เซลล์ I1 ใช้สูตรในการ Run ข้อมูลใหม่เพื่อใช้ในสูตร Lookup
    =SUM($H$1:H1)-H1+1
    Enter แล้ว Copy ลงด้านล่าง
  5. เซลล์ E2 คีย์สูตรเพื่อ List รายชื่อ Sheet
    =IF(ROWS($E$2:E2)>$H$4,"",LOOKUP(ROWS($E$2:E2),$I$1:$I$3,$G$1:$G$3))
    Enter แล้ว Copy ไปด้านล่าง
  6. เซลล์ A2 คีย์สูตรเพื่อนำข้อมูลใน Sheet ต่าง ๆ มาแสดงต่อกัน
    =IF($E2<>"",INDIRECT("'"&$E2&"'!"&SUBSTITUTE(ADDRESS(1,COLUMN()),1,"")&COUNTIF($E$2:$E2,$E2)+1),"")
    Enter แล้ว Copy ไปทางขวาและลงด้านล่าง

จะเห็นว่าการนำข้อมูลจากหลาย ๆ Sheet มาต่อกันนั้น ไม่ใช่เรื่องยากอีกต่อไปสำหรับพวกเราครับ Winking smile