สอบถามการเขียน Fuction เพื่อคำนวนค่าตัวเลยใน Form และ Query
กระทู้เก่าบอร์ด อ.สุภาพ ไชยา

 275   7
URL.หัวข้อ / URL
สอบถามการเขียน Fuction เพื่อคำนวนค่าตัวเลยใน Form และ Query

ผมอยากถามอาจารย์สุภาพ หรือ คนที่มีความรู้เรื่องการเขียน ฟังก์ชันเพื่อคำนวน บนฟอร์มและคิวรี่ครับ ผมได้สร้างโปรแกรมเพื่อเก็บข้อมูลผลการตรวจตัวอย่างในห้องแลป โดยผมได้ส่งไฟล์ตัวอย่างที่จะใช้มาให้ดูด้วยครับ ข้อมูลที่สำคัญในฐานข้อมูลนี้ คือ Plate แต่ละอันที่ใช้ทดสอบจะต้องมี Positive control ทุกครั้ง และมีตัวอย่างที่ทดสอบ ค่า OD1 กับ ค่า OD2 จะนำมาหาค่าเฉลี่ย แล้วนำค่านี้คำนวณหาค่า COD ในช่องสุดท้าย ดังนี้

COD = Mean OD value of samples/ Mean OD value of Positive Control

ผมอยากถามว่าจะเขียด code หรือ Fuction
อย่างไรให้ได้ผลตามที่ต้องการครับ ขอบคุณครับ

7 Reply in this Topic. Dispaly 1 pages and you are on page number 1

1 @R03715
ผมยังไม่ได้ดูตัวอย่างที่แนบมาให้นะครับ

ฟังก์ชันน่าจะเป็นอย่างนี้ครับ

Function GetMod(dblX1 As Double, dblX2 As Double)
GetMod = dblX1 / dblX2
End Function

เขียนใน Module นะครับ

แล้วก็นำฟังก์ชันนี้ไปใช้ใน Form หรือ Query ได้เลย

การใช้ใน Form ให้ใส่ =GetMod([ชื่อฟีลด์หรือคอนโทรที่เก็บMean OD value of samples],[ชื่อฟีลด์หรือคอนโทรที่เก็บMean OD value of Positive Control]
ลงใน Control Source property ของ Text Box เป้าหมายครับ

2 @R03718
ขอบคุณครับอาจารย์ที่ตอบ แต่ผมมีปัญหามากกว่านี้ครับ เป้าหมายสุดท้ายที่ผมอยากจะเขียนฟังก์ชั่นให้ได้คือ การคำนวณค่า COD ของแต่ละตัวอย่างและ positive control จะต้องอ้างเอาค่า Mean OD value of Positive control ของแต่ละชุดที่ใช้ทดสอบครับ(plate) ค่านี้จะไม่เท่ากัน จึงใช้ค่านี้ร่วมกันไม่ได้ และผลการคำนวณค่า COD ของ positive control ในแต่ละ plate จะได้ค่าเท่ากับ 1 เสมอ เพราะว่าค่าตัวตั้งกับตัวหารเท่ากันครับ ส่วน COD ของตัวอย่างอื่น อาจจะมากกว่าหรือ น้อยกว่า 1 ก็ได้ ผมได้ใส่ตัวอย่างตารางที่จะเก็บข้อมูลไว้ในไฟล์ตัวอย่างด้วยครับ เผื่ออาจารย์จะได้เข้าใจที่ผมอธิบายมาแล้วได้ดีขึ้น ผมรบกวนอาจารย์ช่วยชี้แนะด้วยครับ ขอบคุณครับ
3 @R03724
ผมดูตัวอย่างที่ให้มาแล้ว ยังไม่เข้าใจความต้องการครับ

ผมลองใสช่อง COD ในฟอร์ม ซึ่งเป็น Unbound ด้วยค่านี้ครับ

=MeanOD([OD1],[Mean])

ไม่รู้ว่าผมตอบตรงจุดหรือไม่นะครับ
4 @R03725
อาจารย์สุภาพครับ ผมอาจจะอธิบายจุดประสงค์ที่ต้องการจริง ๆ ไม่จัดเจนเท่าควร จากตัวอย่าง ที่ให้และที่
โดยใช้ตัวอย่างจากตารางที่มีโครงสร้างเดียวกับที่จะใช้ในฟอร์มนะครับ
IDno plateno TypeofSample SampleNo OD1 OD2 MeanOD COD
1 1 Positive control P0 0.900 0.950 0.925 1.000
2 1 sample S1 0.700 0.750 0.725 0.784
3 1 sample S2 0.400 0.450 0.425 0.459
4 1 sample S3 0.500 0.520 0.510 0.551
5 2 Positive control P0 0.980 1.200 1.090 1.000
6 2 sample S6 0.750 0.800 0.775 0.711
7 2 sample S7 0.850 0.900 0.875 0.803
8 2 sample S8 0.660 0.700 0.680 0.624
9 3 Positive control P0 0.900 0.950 0.925 1.000
10 3 sample S1 0.600 0.600 0.600 0.649
11 3 sample S2 0.250 0.300 0.275 0.297
12 3 sample S3 0.300 0.350 0.325 0.351
ค่า COD = Mean OD Value of sample ที่ทดสอบใน plate / Mean OD Value of positive control ของ plate นั้น
จากสูตรการคำนวณข้างบนนี้จะได้ค่าต่างตามตาราง ดังตัวอย่างครับ

ค่า COD ของ -positive control of plate 1 เท่ากับ 0,925/0,925 = 1,000
-S1 = 0,725/0,925 = 0,784
-S2 0,425/0,925 = 0,459
-S3 0,510/0,925 = 0,551
ค่า COD ของ -positive control of plate 2 เท่ากับ 1,090/1,090 = 1,000
-S6 = 0,775/1.090 = 0,711
-S7 0,875/1,090 = 0,803
-S8 0,680/1.090 = 0,624
ค่า COD ของ -positive control of plate 3 เท่ากับ 0,925/0,925 = 1,000
-S1 = 0,600/0,925 = 0,649
-S2 0,649/0,925 = 0,297
-S3 0,325/0,925 = 0,351
นี่คือรายละเอียดทั้งหมดครับ จะเห็นว่าค่า COD ของ positive control จะมีค่าเท่ากับ 1.000 เพราะว่าค่าตัวตั้งกะตัวหารเท่ากัน ส่วนค่าอื่นๆ ที่อยู่ในแต่ละเพลทหลัการคำนวณก็จะใช้ค่า COD ของ positive control มาเป็นตัวหาร จะคำนวณในเพลทอื่นๆ ด้วยวิธีการเดียวกันทุกครั้งครับ ส่วนที่ผมต้องการจริง ๆ คือ จะทำอย่างไรที่จะให้ได้ตัวเลขออกมาเหมือนกับคอลัมล์สุดท้ายครับผม รบกวนอีกครั้งนะครับอาจารย์
5 @R03726
อาจารย์ครับข้อความที่ผ่านมาอาจจะดูไม่สะดวก ผมแนบไฟล์ MS Word มาให้ด้วยครับ
6 @R03729
เข้าใจสูตรแล้วครับ

ให้สร้างฟังก์ชันขึ้นมาดังนี้

Function MyCOD(strPlateNo As String, lngID As Long) As Single
Dim sglMP As Single, sglMS As Single
sglMP = DLookup("MeanOD([OD1],[OD2])", "tblELISAresult", "[PlateNo]='" & strPlateNo & "' And [TypeOfSample]='Positive control'")
sglMS = DLookup("MeanOD([OD1],[OD2])", "tblELISAresult", "[PlateNo]='" & strPlateNo & "' And [ID]=" & lngID)
MyCOD = sglMS / sglMP
End Function

แล้วนำไปใส่ใน Query โดยสร้างเป็นฟีล์ดใหม่ชื่อ COD ดังนี้

COD: MyCOD([PlateNo],[ID])

7 @R03734
อาจารย์ครับผมทำตามที่แนะนำ ตอนนี้ใช้งานได้แล้วครับ ขอบพระคุณมากนะครับ
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.0596s