Page 1 of 1
หาค่าสัมบรณ์ใน Array
Posted: Tue Jul 24, 2012 12:04 am
by hydrotaxonomy
หนูต้องการ หาค่าสัมบูรณ์โดยการเรียกฟังก์ชัน MAE ลากเม้าส์เพื่อหา nData คะ หนูต้องการลากข้อมูลแล้วให้เป็นค่าสัมบูรณ์ก่อน
แล้วจึงทำค่านั้นไปหาค่าเฉลี่ยคะ
Re: หาค่าสัมบรณ์ใน Array
Posted: Tue Jul 24, 2012 1:01 am
by bank9597

ไม่แน่ใจว่าใช่หรือไม่
ที่ D2 คีย์ =ABS(A2) คัดลอกลงมาครับ
Re: หาค่าสัมบรณ์ใน Array
Posted: Tue Jul 24, 2012 1:52 am
by hydrotaxonomy
ต้องการเขียน คำสั่งนั้น ใน VBA คะ คือทำทุกค่าในตารางให้เป็นค่าสัมบูรณ์ทั้งหมด ก่อนที่จะมาทำการหาค่าเฉลี่ยคะ
ตรงช่อง E1 ใช้เรียกฟังชัน MAE ซึ่งจะแสดงผล ค่าเฉลี่ยอย่างเดียวคะ
หนูอาจจะอธิบายไม่เข้า แต่ช่วยเข้าใจหนูหน่อยเถอะคะ

Re: หาค่าสัมบรณ์ใน Array
Posted: Tue Jul 24, 2012 1:58 am
by hydrotaxonomy
Code: Select all
Option Explicit
Public Function MAE(list As Variant) As Single
Dim item As Variant
Dim ndata As Integer
Dim mynum
Dim mean As Single
ndata = 0
For Each item In list
ndata = ndata + 1
Next item
mean = Application.WorksheetFunction.Average(list)
MAE = mean
End Function
หนูแก้โค้ดแล้วเหลือหาค่าสัมบูรณ์คะ
ที่หนูคิดคือ วน loop เก็บข้อมูลทั้งหมดลงใน array แต่ไม่รู้ว่าเอาค่าใน array มาทำให้เป็นค่าสัมบูรณ์ยังไงคะ
ขอคำแนะนำด้วยคะ ขอบคุณมากๆ คะ
Re: หาค่าสัมบรณ์ใน Array
Posted: Tue Jul 24, 2012 8:55 am
by snasui

ลองปรับ Code เป็นตามด้านล่างครับ
Code: Select all
Public Function MAE(list As Range) As Single
Dim item As Range
Dim ab() As Variant
Dim i As Integer
For Each item In list
i = i + 1
ReDim Preserve ab(i)
ab(i) = Abs(list(i))
Next item
MAE = Application.Average(ab)
End Function
Re: หาค่าสัมบรณ์ใน Array
Posted: Tue Jul 24, 2012 10:43 am
by hydrotaxonomy
Re: หาค่าสัมบรณ์ใน Array
Posted: Tue Jul 24, 2012 4:33 pm
by hydrotaxonomy
แล้วถ้าหนูต้องการ ใส่ฟังก์ชันใน cell ไหนก็ได้ แต่ผลลัพธ์ไปอยู่ที่ E1ล่ะคะ หนูไปดู
http://snasui.blogspot.com/2011/07/blog-post_01.html
บทความนี้มา แต่หนูเขียนแล้วมันไม่ออกอย่างที่คิดเลยคะ

Re: หาค่าสัมบรณ์ใน Array
Posted: Tue Jul 24, 2012 5:45 pm
by snasui

แนบไฟล์ที่เขียนพร้อม Code มาด้วยครับ
Re: หาค่าสัมบรณ์ใน Array
Posted: Tue Jul 24, 2012 5:59 pm
by hydrotaxonomy
Code: Select all
Option Explicit
Public Function MAE(list As Range) As Single
Dim item As Range
Dim ab() As Variant
Dim i As Integer
For Each item In list
i = i + 1
ReDim Preserve ab(i)
ab(i) = Abs(list(i))
Next item
MAE = Application.Average(ab)
Application.ScreenUpdating = False
With item
If .i > 1 Then
ElseIf .Column = 2 And .Offset(1, 0) = "" _
And .Offset(-1, 0) = "" Then
.Offset(0, -1).Resize(, 2).Cut
.End(xlUp).Offset(1, -1) _
.Resize(, 2).Insert shift:=xlDown
End If
End With
Application.ScreenUpdating = True
End Function
Re: หาค่าสัมบรณ์ใน Array
Posted: Tue Jul 24, 2012 6:03 pm
by hydrotaxonomy
แนบไฟล์มาให้ด้วยคะ ขอบคุณสำหรับคำแนะนำและช่วยเหลือหนูตลอดคะ
Re: หาค่าสัมบรณ์ใน Array
Posted: Tue Jul 24, 2012 9:05 pm
by snasui

ลองเพิ่ม Code ที่ Sheet1 ตามด้านล่าง
Code: Select all
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
On Error Resume Next
If UCase(Mid(Target.Formula, 2, 3)) = "MAE" Then
Range("E1") = Target.Value
Target.ClearContents
End If
Application.EnableEvents = True
End Sub
ส่วนที่ Module1 ก็เป็น Code เดิมครับ
snasui wrote: 
ลองปรับ Code เป็นตามด้านล่างครับ
Code: Select all
Public Function MAE(list As Range) As Single
Dim item As Range
Dim ab() As Variant
Dim i As Integer
For Each item In list
i = i + 1
ReDim Preserve ab(i)
ab(i) = Abs(list(i))
Next item
MAE = Application.Average(ab)
End Function
Re: หาค่าสัมบรณ์ใน Array
Posted: Tue Jul 24, 2012 9:11 pm
by hydrotaxonomy