: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
🪷 คำแสดงเจตนา
ขอผลแห่งการให้ความรู้นี้ จงกลับไปยังผู้ที่เป็นเจ้าของเดิม แม้ข้าพเจ้าจะไม่รู้จักท่านก็ตาม ขอให้แสงแห่งปัญญาที่ท่านเคยจุดไว้ ได้กลับไปเติมเต็มชีวิตของท่านอีกครั้ง และขอให้เจตนาของข้าพเจ้าเป็นการคืนความดีอย่างสงบ

separate ข้อมูล โดย VB

ฟอรัมถาม-ตอบปัญหาการใช้งาน 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. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
dannyb
Member
Member
Posts: 43
Joined: Mon Feb 08, 2010 5:39 pm

separate ข้อมูล โดย VB

#1

Post by dannyb »

เรียนคุณคนควนครับ

ขอรบกวนเขียน code VB แยกข้อมูลจากไฟล์ excel โดยต้องการให้อยู่ไฟล์เดิม แต่แยก sheet ตาม w/h ลองดู post ก่อนๆ ที่คนอื่นๆปรึกษา

แล้วลองปรับ range ดู แต่ข้อมูลไม่ขึ้นตามที่ต้องการ (ผมไม่มีความรู้เรื่อง VB เลย) และถ้าต้องการแก้ไข range ข้อมูล พอแนะนำได้ไหมครับ

ว่าควรปรับตรงไหนครับ

ข้อมูลตามไฟล์แนบครับขอบคุณล่วงหน้าครับ
Attachments
case.zip
(2.58 KiB) Downloaded 2 times
User avatar
snasui
Site Admin
Site Admin
Posts: 31191
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: separate ข้อมูล โดย VB

#2

Post by snasui »

:D ไม่พบ Code ในไฟล์แนบครับ

กรณีต้องการทำรายงานแยกชีทตาม w/h สามารถใช้ PivotTable มาช่วยได้ครับ

ดูตัวอย่างที่นี่ครับ http://www.snasui.com/viewtopic.php?p=7205#p7205
dannyb
Member
Member
Posts: 43
Joined: Mon Feb 08, 2010 5:39 pm

Re: separate ข้อมูล โดย VB

#3

Post by dannyb »

ส่งไฟล์มาให้ใหม่แล้วครับ...ที่ไม่ทำ pivot เนื่องจากข้อมูลที่ให้เป็นข้อมูลดิบ ที่ต้องเอาไปทำงานต่อ..

ข้อมูลที่ export ออกมาจะปนๆกัน ต้องเสียเวลาในการ sort, filter, copy ซึ่งมีประมาณ 100 w/h

และข้อมูลที่แยกออกมาจะต้องนำไปคำนวณต่อ ซึ่งทำ pivot แล้วก็ต้องเสียเวลาในการ copy อยู่ดีครับ

รบกวนด้วย... code ที่ใส่มา copy มาจากกระทู้อื่น..ซึ่งลองปรับแล้วมันไม่มีอะไรเกิดขึ้นเลย

ขอบคุณครับ
dannyb
Member
Member
Posts: 43
Joined: Mon Feb 08, 2010 5:39 pm

Re: separate ข้อมูล โดย VB

#4

Post by dannyb »

ลืมส่งไฟล์
Attachments
case.zip
(9.19 KiB) Downloaded 1 time
User avatar
snasui
Site Admin
Site Admin
Posts: 31191
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: separate ข้อมูล โดย VB

#5

Post by snasui »

:D ลองดู Code ตามด้านล่าง

Code: Select all

Sub SeparateData()
Dim a() As Variant, rAllrange As Range
Dim rAll As Range, rp As Range, rf As Range
Dim r As Range, count As Long
Dim lng As Long, i As Integer
On Error Resume Next
Application.DisplayAlerts = False
Application.ScreenUpdating = False
With Worksheets("Sheet1")
    Set rAll = .Range("A3", .Range("A" & Rows.count).End(xlUp))
    Set rp = .Range("A3")
    Set rAllrange = .Range("A2", .Range("F" & Rows.count).End(xlUp))
    Set rf = .Range("H2")
End With
For Each r In rAll
    count = count + 1
    Set rp = rp.Resize(count, 1)
    If Application.CountIf(rp, r) = 1 Then
        ReDim Preserve a(lng)
        a(lng) = r
        lng = lng + 1
    End If
Next r
For i = LBound(a) To UBound(a)
    rf = a(i)
    rAllrange.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Range _
        ("H1:H2")
    rAllrange.SpecialCells(xlCellTypeVisible).Copy
    Sheets.Add After:=Sheets(Sheets.count)
    Sheets(Sheets.count).Name = a(i)
    If Err <> 0 Then
        MsgBox "Check your sheet's name"
        ActiveSheet.Delete
        Sheets("Sheet1").ShowAllData
        Exit Sub
    End If
    ActiveSheet.Range("A1").PasteSpecial xlPasteValues
    Sheets("Sheet1").Activate
   Next i
Sheets("Sheet1").ShowAllData
Application.CutCopyMode = False
Application.ScreenUpdating = True
MsgBox "Finish"
End Sub
ดูไฟล์แนบประกอบครับ
Attachments
case-1.xls
(47 KiB) Downloaded 6 times
dannyb
Member
Member
Posts: 43
Joined: Mon Feb 08, 2010 5:39 pm

Re: separate ข้อมูล โดย VB

#6

Post by dannyb »

กราบขอบพระคุณงามๆครับ...
พอจะอธิบาย code ให้ผมเข้าใจแบบง่ายๆได้ไหมครับ..
User avatar
snasui
Site Admin
Site Admin
Posts: 31191
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: separate ข้อมูล โดย VB

#7

Post by snasui »

:D
dannyb wrote:กราบขอบพระคุณงามๆครับ...
พอจะอธิบาย code ให้ผมเข้าใจแบบง่ายๆได้ไหมครับ..
อธิบายหลักการแทนนะครับ
1. ต้องหาก่อนว่าในคอลัมน์ A มีกี่ค่าที่ต่างกัน เก็บค่านั้นไว้ก่อน
2. นำค่าที่เก็บนั้นมาทำการ Filter จากข้อมูลใน Sheet1
3. หลังจากได้ข้อมูลจากข้อ 2 แล้วก็ให้เพิ่มชีท โดยใช้ชื่อชีทตามค่าในข้อ 1
4. นำข้อมูลที่ได้ในข้อ 3 ไปวาง
5. ทำแบบนี้ไปเรื่อย ๆ จนครบทุกค่าที่เก็บไว้ตามข้อ 1
6. เมื่อทำครบแล้วให้แสดงข้อความ Finish
7. กรณีพบว่ามีชื่อชีทอยู่แล้วให้แสดงข้อความว่าให้ตรวจสอบชื่อชีท
dannyb
Member
Member
Posts: 43
Joined: Mon Feb 08, 2010 5:39 pm

Re: separate ข้อมูล โดย VB

#8

Post by dannyb »

คุณคนควนครับ...

มีปัญหาอีกแล้วครับ...ข้อมูลที่ต้องการอยู่ในไฟล์แนบครับ...

กราบขอบพระคุณล่วงหน้างามๆครับ..
Attachments
separate wh.zip
(12.31 KiB) Downloaded 4 times
User avatar
snasui
Site Admin
Site Admin
Posts: 31191
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: separate ข้อมูล โดย VB

#9

Post by snasui »

:lol: โอกาสหน้าการทำตัวอย่างควรเป็นตัวแทนของข้อมูลจริงครับ เว้นเสียจากว่าเข้าใจ Code VBA สามารถปรับแก้เองได้ สำหรับมือใหม่แล้ว Code พวกนี้เข้าใจไม่ง่ายนัก ซึ่งผมต้องขออภัยที่ไม่สามารถอธิบายอย่างละเอียด เนื่องจากไม่มีเวลาขนาดนั้นครับ

กรณีมีคำถามเพิ่มหรือคำอธิบายเพิ่มเติม ช่วยเขียนหรือ Copy ลงมาในฟอรัมนี้พอสังเขปด้วยครับว่าต้องการทำอะไร อย่างไร ส่วนรายละเอียดเขียนไว้ในไฟล์นั้นถูกต้องแล้วครับ การเขียนไว้ในฟอรัมด้วยจะอำนวยประโยชน์ในการ Search ของเพื่อน ๆ ครับ

:?: คำถาม
1. กรณีไม่ลบชีท หากมีการ Update จะให้ข้อมูลต่อจากข้อมูลเดิมหรือแสดงอย่างไรครับ
2. กรณีต้องการ Clean Data วันที่ จะมีรูปแบบข้อความอยู่ในวงเล็บเสมอไปและต้องการลบข้อความรวมทั้งวงเล็บทิ้งไปใช่หรือไม่ครับ
dannyb
Member
Member
Posts: 43
Joined: Mon Feb 08, 2010 5:39 pm

Re: separate ข้อมูล โดย VB

#10

Post by dannyb »

1. ข้อมูลจะถูกวางทับที่เดิมครับ..เพียงแต่ว่ามีข้อมูลเพิ่มขึ้น row เพิ่ม
แต่ column ไม่เพิ่ม
2. format วันที่ไม่รบกวนละนะครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 31191
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: separate ข้อมูล โดย VB

#11

Post by snasui »

:D ผมปรับ Code มาให้ใหม่ตามด้านล่าง

Code: Select all

Sub SeparateData()
Dim a() As Variant, rAllrange As Range
Dim rAll As Range, rp As Range, rf As Range
Dim r As Range, count As Long
Dim lng As Long, i As Integer, j As Integer
Dim wh As Worksheet
Application.DisplayAlerts = False
Application.ScreenUpdating = False
ClearAllSheets
SortCashData
With Worksheets("cash")
    Set rAll = .Range("B3", .Range("B" & Rows.count).End(xlUp))
    Set rp = .Range("B3")
    Set rAllrange = .Range("A2", .Range("F" & Rows.count).End(xlUp))
    Set rf = .Range("I3")
End With
For Each r In rAll
    count = count + 1
    Set rp = rp.Resize(count, 1)
    If Application.CountIf(rp, r) = 1 Then
        ReDim Preserve a(lng)
        a(lng) = r
        lng = lng + 1
    End If
Next r
For i = LBound(a) To UBound(a)
    rf = a(i)
    For Each wh In Worksheets
        If wh.Name = a(i) Then
            j = j + 1
        End If
    Next wh
    If j = 0 Then
        Sheets.Add After:=Sheets(Sheets.count)
        Sheets(Sheets.count).Name = a(i)
    End If
    Sheets("cash").Activate
    rAllrange.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Range _
        ("I2:I3")
    rAllrange.SpecialCells(xlCellTypeVisible).Copy
    Worksheets(a(i)).Range("A1").PasteSpecial xlPasteValues
    Sheets("cash").Activate
    j = 0
   Next i
Sheets("cash").ShowAllData
Application.CutCopyMode = False
Application.ScreenUpdating = True
MsgBox "Finish"
End Sub

Sub SortCashData()
Dim r As Range
   Set r = Worksheets("cash").Range("A2").CurrentRegion
   With r
        .Sort Key1:=.Range("B1"), Order1:=xlAscending, Key2:=.Range("C1") _
        , Order2:=xlAscending, Key3:=.Range("A1"), Order3:=xlAscending, Header:= _
        xlGuess
    End With
End Sub

Sub ClearAllSheets()
Dim wh As Worksheet
For Each wh In Worksheets
    If wh.Name <> "cash" Then
        wh.Cells.Clear
    End If
Next wh
End Sub
ดูไฟล์แนบประกอบครับ
Attachments
separate wh-1.xls
(53.5 KiB) Downloaded 7 times
Post Reply