: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

ช่วยหน่อยครับ อยากดึงข้อมูล ด้วย VBA

ฟอรัมถาม-ตอบปัญหาการใช้งาน MS Excel and 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. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
aerojen
Member
Member
Posts: 28
Joined: Thu Sep 05, 2013 12:23 am

ช่วยหน่อยครับ อยากดึงข้อมูล ด้วย VBA

#1

Post by aerojen »

ตอนนี้ผลลัพธ์ ดึงข้อมูลแสดงแนวตั้ง แต่สิ่งที่อยากได้คือผลลัพธ์แสดงผลเรียงลำดับตัวเลขไปตามแนวนอน
และถ้าผลลัพธ์เกิน 10 คอลัมน์อยากให้เพิ่มแถวอัตโนมัติตามไฟล์แนบครับ :D
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 31153
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: ช่วยหน่อยครับ อยากดึงข้อมูล ด้วย VBA

#2

Post by snasui »

:D ที่เขียนมาแล้วนั้นเพียงแต่ Filter ข้อมูล ลองเขียนในส่วนที่ให้เรียงเป็นแนวนอนมาก่อน ติดตรงไหนค่อยถามกันต่อครับ
kimmad
Member
Member
Posts: 22
Joined: Thu Aug 07, 2014 10:23 pm

รพกวนช่วยเขียนสูตรตามเงือนไขนี้หน่อยครับ

#3

Post by kimmad »

เงือนไขที่ 1
ได้ระดับ 3 เมื่อ
ได้ผลการประเมินระดับ 3 จำนวน 4 ตัวชี้วัด หรือ
ได้ผลการประเมินระดับ 2 ๒-๓ ตัวชี้วัด และได้ผลการประเมิน 2 จำนวน ๑-๒ ตัวชี้วัด
ได้ระดับ 2 เมื่อ
ได้ผลการประเมินระดับ 2 จำนวน 4 ตัวชี้วัด หรือ
ได้ผลการประเมินระดับ 3 หรือ 2 จำนวน ๑- ๒ ตัวชี้วัด และได้ผลการประเมินระดับ 1 จำนวน ๑-๒ ตัวชี้วัด
ได้ระดับ 1 เมื่อ
ได้ผลการประเมินระดับ 1 จำนวน 4 ตัวชี้วัด หรือ
ได้ผลการประเมินระดับ 3 หรือ 2 จำนวน ๑ ตัวชี้วัด และ ได้ผลการประเมินระดับ 1 จำนวน ๓ ตัวชี้วัด
ได้ระดับ 0 เมื่อ
ได้ผลการประเมินระดับ 0 อย่างน้อย ๑ ตัวชี้วัด
User avatar
snasui
Site Admin
Site Admin
Posts: 31153
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: รพกวนช่วยเขียนสูตรตามเงือนไขนี้หน่อยครับ

#4

Post by snasui »

kimmad wrote:เงือนไขที่ 1
ได้ระดับ 3 เมื่อ
ได้ผลการประเมินระดับ 3 จำนวน 4 ตัวชี้วัด หรือ
ได้ผลการประเมินระดับ 2 ๒-๓ ตัวชี้วัด และได้ผลการประเมิน 2 จำนวน ๑-๒ ตัวชี้วัด
ได้ระดับ 2 เมื่อ
ได้ผลการประเมินระดับ 2 จำนวน 4 ตัวชี้วัด หรือ
ได้ผลการประเมินระดับ 3 หรือ 2 จำนวน ๑- ๒ ตัวชี้วัด และได้ผลการประเมินระดับ 1 จำนวน ๑-๒ ตัวชี้วัด
ได้ระดับ 1 เมื่อ
ได้ผลการประเมินระดับ 1 จำนวน 4 ตัวชี้วัด หรือ
ได้ผลการประเมินระดับ 3 หรือ 2 จำนวน ๑ ตัวชี้วัด และ ได้ผลการประเมินระดับ 1 จำนวน ๓ ตัวชี้วัด
ได้ระดับ 0 เมื่อ
ได้ผลการประเมินระดับ 0 อย่างน้อย ๑ ตัวชี้วัด
:D โพสต์นี้ไม่ได้เป็นคำถามคำตอบต่อเนื่องกันมาของกระทู้นี้ กรุณาตั้งกระทู้ใหม่ครับ

วิธีการตั้งและตอบกระทู้อ่านที่หัวข้อที่ 4 ของประกาศ "โปรดทราบ" ด้านบนครับ :roll:
kimmad
Member
Member
Posts: 22
Joined: Thu Aug 07, 2014 10:23 pm

Re: ช่วยหน่อยครับ อยากดึงข้อมูล ด้วย VBA

#5

Post by kimmad »

ขออภัยครับ เกิดข้อผิดพลาด
aerojen
Member
Member
Posts: 28
Joined: Thu Sep 05, 2013 12:23 am

Re: ช่วยหน่อยครับ อยากดึงข้อมูล ด้วย VBA

#6

Post by aerojen »

ได้ลองเขียน code เองแต่เปลี่ยนเงื่อนไขการหาคำตอบเป็นดังนี้
1) อยากให้ลงข้อมูลดิบในชีท Database แล้ว sort ข้อมูล
2) จากนั้นนำมาเรียงในหน้า summary ให้ได้ผลลัพธ์ตามหน้านี้
โดยเงื่อนไขคือถ้าเกิน 10 Location ให้ขึ้นบรรทัดใหม่
(ตามตัวอย่างจาก Warehouse2 ไป นครสวรรค์)
3) สุดท้าย Break ข้อมูลหน้า summary ไปใส่ในชีทแต่ละ status โดยที่
ถ้าชีท A ก็จะมีข้อมูลที่เกี่ยวกับ status A อย่างเดียว

ซึ่งตอนนี้ติดขั้นตอนที่ 2 เรียงให้ได้ผลลัพธ์ตามชีท 2 ครับ :D
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 31153
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: ช่วยหน่อยครับ อยากดึงข้อมูล ด้วย VBA

#7

Post by snasui »

:D ใน Code ที่เขียนมาเองนั้น ติดข้อ 2 ติดบรรทัดใด ตรงไหน อย่างไรครับ

Status ในคอลัมน์ C ที่เป็นคำว่า "Check" เอาไว้ทำอะไร มีข้อพิจาณาอย่างไรจึงใส่คำว่า "Check" ครับ
aerojen
Member
Member
Posts: 28
Joined: Thu Sep 05, 2013 12:23 am

Re: ช่วยหน่อยครับ อยากดึงข้อมูล ด้วย VBA

#8

Post by aerojen »

Status ที่เขียนว่า Check เป็นแค่คำกำหนดให้พนักงานกรอกตัวหนังสือ เช่น จาก Warehouse1 ไป จันทบุรีมี status Z ทั้งหมด 14 Loc ก็ดึงLoc มาเรียงแนวนอน 10 คอลัมน์ อีก 4 คอลัมน์ขึ้นบรรทัดเรียงแนวนอนใหม่ก็ต้องเพิ่มบรรทัด Check มาด้วยเพื่อที่พนักงานจะได้ตรวจสอบด้วยการเขียนลายลักษณ์อักษรลงไปครับ
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 31153
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: ช่วยหน่อยครับ อยากดึงข้อมูล ด้วย VBA

#9

Post by snasui »

:D ตัวอย่าง Code สำหรับทำงานที่ชีต Summary ตามด้านล่างครับ

Code: Select all

Dim cl As New Collection, cItem As Variant
Dim rAll As Range, rs As Range, rt As Range, rtAll As Range
Dim s As String, strc As Variant
Dim iCount As Integer, j As Integer, k As Integer

With Sheets("Database")
    Set rAll = .Range("a2", .Range("a" & .Rows.Count).End(xlUp))
End With
On Error Resume Next
For Each rs In rAll
    s = rs.Value & "_" & rs.Offset(0, 1).Value & "_" & rs.Offset(0, 3).Value
    cl.Add s, s
Next rs
On Error GoTo 0
With Sheets("Summary")
    .Range("a2").Resize(100, 13).ClearContents
    For Each cItem In cl
       Set rt = .Range("c" & .Rows.Count).End(xlUp).Offset(1, 0)
       strc = Split(cItem, "_")
       If rt.Offset(0, -2).End(xlUp).Value <> strc(0) And rt.Offset(0, -1).End(xlUp).Value <> strc(1) Then
            rt.Offset(0, -2).Value = strc(0)
            rt.Offset(0, -1).Value = strc(1)
       End If
       iCount = Application.CountIfs(rAll, strc(0), rAll.Offset(0, 1), strc(1), rAll.Offset(0, 3), strc(2))
       rt.Resize(iCount \ 10 + 1).Value = strc(2)
       j = 0
       For Each rs In rAll
            If cItem = rs.Value & "_" & rs.Offset(0, 1).Value & "_" & rs.Offset(0, 3).Value Then
                j = j + 1
                If j > 1 And (j - 1) Mod 10 + 1 = 1 Then
                    Set rt = rt.Offset(1, 0)
                End If
                rt.Offset(0, (j - 1) Mod 10 + 1).Value = rs.Offset(0, 2).Value
            End If
            If j = iCount Then Exit For
       Next rs
    Next cItem
    Set rtAll = .Range("c2", .Range("c" & .Rows.Count).End(xlUp))
    For k = rtAll.Count To 2 Step -1
        rtAll(k).Offset(0, -2).Resize(1, 13).Insert
    Next k
    .Range("c2", .Range("c" & .Rows.Count).End(xlUp).Offset(1, 0)) _
        .SpecialCells(xlCellTypeBlanks).Value = "Check"
End With
ส่วนกรณีคัดลอกไปชีตอื่น ๆ ให้เขียนมาเองก่อน ติดตรงไหนค่อยถามกันต่อ
Post Reply