Page 1 of 1

ดึงข้อมูลจากฐานข้อมูลมาแสดงอีกชีท

Posted: Thu Jan 18, 2018 3:07 pm
by imindytaew
ต้องการดึงข้อมูล จากชีท Database โดยการ พิมพ์ข้อมูล ใน ชีท Report เซลล์ E2 เป็น Vessel No. (เลข 9 หลัก)
แล้วให้ดึงข้อมูลของ ชีท Database ที่มีค่าเป็น Vessel No.

ข้อมูลที่แสดงจะแสดงตามคอลัมภ์ โดยยึดจากหัวเซลล์
ุ้
ถ้า ชีท Report E2 ใส่ข้อมูล เป็น Vessel No. (เลข 9 หลัก) ให้ยึดข้อมูลนี้เป็นหลัก แล้วนำข้อมูลอื่นที่มี ค่าใน E2 มาแสดง
และ เปลี่ยนจาก ชีท Report E2 ใส่ข้อมูล เป็น Vessel Name (ภาษาไทย) ให้ยึดข้อมูลนี้เป็นหลัก แล้วนำข้อมูลอื่นที่มี ค่าใน E2 มาแสดง เป็นต้น


อ้างอิงรูปแบบการเเสดงผลจากเว็บนี้
http://snasui.blogspot.com/2011/06/vba_26.html

ต้องการรูปแบบ ในเว็บนี้เลยค่ะ พอทำตามแล้ว ไม่ได้

ทั้งนี้ ไม่มีพื้นฐาน ด้าน VBA เลยค่ะ ได้แต่ทำตามเว็บนี้ แล้วลองหาข้อมูลอื่นมาประกอบ แต่ยังทำไม่ได้ค่ะ

รบกวนด้วยค่ะ

Re: ดึงข้อมูลจากฐานข้อมูลมาแสดงอีกชีท

Posted: Thu Jan 18, 2018 3:43 pm
by logic
การใช้ VBA ต้องเขียนมาเองตามกฏของบอร์ดข้อ 5 ด้านบนครับ

ลองแบบสูตรครับ :P

A4 =IFERROR(INDEX(Database!A$3:A$1000,SMALL(IF($E$2=Database!$C$3:$C$1000,ROW(Database!$A$3:$A$1000)-ROW(Database!$A$3)+1),ROWS(A$4:A4))),"") กดแป้น Ctrl+Shift+Enter แล้วคัดลอกสูตรไปทางขวาถึง D4 แล้วคัดลอกลงด้านล่าง

E4 =IFERROR(INDEX(Database!AD$3:AD$1000,SMALL(IF($E$2=Database!$C$3:$C$1000,ROW(Database!$A$3:$A$1000)-ROW(Database!$A$3)+1),ROWS(E$4:E4))),"") กดแป้น Ctrl+Shift+Enter แล้วคัดลอกสูตรไปทางขวาถึง F4 แล้วคัดลอกลงด้านล่าง

Re: ดึงข้อมูลจากฐานข้อมูลมาแสดงอีกชีท

Posted: Fri Jan 19, 2018 9:46 am
by imindytaew
ในชีท Report

Code: Select all

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$E$2" And Target <> "" Then
        ShowEmp
    ElseIf Target.Address = "$E$2" And Target = "" Then
        MsgBox "Please select data."
    End If
End Sub
ใน Module

Code: Select all

Option Explicit
Option Base 1

Sub ShowEmp()
    Dim a() As Variant, lng As Long
    Dim r As Range, rAll As Range
    Dim rt As Range, rl As Long
    Application.EnableEvents = False
    Application.ScreenUpdating = False
    rl = Rows.Count
    With Worksheets("Database")
        Set rAll = .Range("C3", .Range("C" & rl).End(xlUp))
    End With
    For Each r In rAll
        If r = Worksheets("Report").Range("E2") Then
            lng = lng + 1
            ReDim Preserve a(5, lng)
            a(1, lng) = lng
            a(2, lng) = r.Offset(0, -5)
            a(3, lng) = r.Offset(0, -4)
            a(4, lng) = r.Offset(0, -3)
            a(5, lng) = r.Offset(0, -2)
        End If
    Next r
    If lng > 0 Then
        With Worksheets("Report")
            Set rt = .Range("A5", .Range("E" & lng - 1 + 5))
            .Range("A5", .Range("A" & rl).End(xlUp).Offset(0, 4)).ClearContents
            .Range("A5:E5").Copy
            rt.PasteSpecial xlPasteFormats
            rt = Application.Transpose(a)
            .Range("B5", .Range("B" & rl).End(xlUp)).NumberFormat = "000000"
            .Range(.Range("A4").End(xlDown).Offset(1, 0), .Range("E" & rl)).Clear
            .Range("E2").Activate
        End With
    Else
        MsgBox "Data not found."
    End If
    Application.EnableEvents = True
    Application.ScreenUpdating = True
End Sub
โค้ดนี้อ้างอิงจาก บล็อกของ http://snasui.blogspot.com/2011/06/vba_26.html ค่ะ
ซึ่งตัวดิฉันเอง ยังไม่มีความรู้ความเข้าใจ เกี่ยวกับความหมายของตัวแปรใน โค้ดนี้ค่ะ ลองเปลี่ยนเซลล์ที่อ้างอิงดู รัน แล้ว Error ค่ะ

รบกวนด้วยค่ะ ขอบคุณค่ะ

Re: ดึงข้อมูลจากฐานข้อมูลมาแสดงอีกชีท

Posted: Fri Jan 19, 2018 11:06 am
by logic
แนบไฟล์ที่เขียนเองแล้วมาด้วย เพื่อน ๆ จะได้ช่วยกันดูให้ใด้ครับ :P