Page 1 of 1
code ดักจับค่าที่เป็น 0 เกิดขึ้นกี่ครั้งใน cell นั้นๆ
Posted: Thu Mar 03, 2022 2:56 pm
by sarawoot
มีปัญหามาปรึกษาครับ
ที่ column A1 ถึง A10 แต่ละ cell ค่าจะเปลี่ยน 0-->1 สลับไปมาในแต่ละวัน
ต้องการนับว่า แต่ละ cell เปลี่ยนเป็น 0 กี่ครั้ง โดยจำนวนครั้ง จะใส่ไว้ที่ column C1 ถึง C10
ผมไปหา code มาชุดนึง มันจะนับทุกครั้งที่ค่ามีการเปลี่ยนแปลงซึ่งยังไม่ตรงตามที่ต้องการ
ที่อยากได้คือให้มันนับแค่ตอนที่เปลี่ยนเป็น 0 ครับ โดยที่สถานะค่าเริ่มต้น (default) ของแต่ละ cell คือ 1 เช่น
1 --> 0 แบบนี้คือนับ 1 ครั้ง
และจาก 0 --> 1 กลับมาเป็น 1 ยังไม่นับ
เมื่อ 1 -->0 เป็น 0 อีกครั้ง นับเป็นครั้งที่ 2
พยายามหาและลองแก้เองมานานแล้วครับ พอดีไม่ค่อยเก่งเลยยังแก้ไม่ได้
รบกวนด้วยครับ
ส่วนเวลาเปิดไฟล์แล้วให้ Column C1 ถึง C10 มันเป็น 0 เพื่อเริ่มนับใหม่ อันนี้ทำได้แล้วครับ
Re: code ดักจับค่าที่เป็น 0 เกิดขึ้นกี่ครั้งใน cell นั้นๆ
Posted: Thu Mar 03, 2022 8:42 pm
by snasui
ตัวอย่าง Code ครับ
Code: Select all
'ThisWorkbook
Private Sub Workbook_Open()
a = Sheets("Sheet2").[a1:a10].Value
Sheets("Sheet2").[C1:C10].Value = 0
End Sub
'Module1
Public a As Variant
'Worksheet2
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Not Application.Intersect(Target, Range("A1:A10")) Is Nothing Then
If a(Target.Row, Target.Column) = 1 And Target.Value = 0 Then
Target.Offset(0, 2).Value = Target.Offset(0, 2).Value + 1
End If
End If
a = Me.[a1:a10].Value
Application.EnableEvents = True
End Sub
Re: code ดักจับค่าที่เป็น 0 เกิดขึ้นกี่ครั้งใน cell นั้นๆ
Posted: Fri Mar 04, 2022 8:19 am
by sarawoot
ขอบคุณครับ ใช้งานได้ตรงตามต้องการเลยครับ
แตติดปัญหาอยู่อย่างนึงคือค่าใน sheet 2 / Column A เป็นค่าสัญญาณจากเครื่องจักร ทำให้ code ที่ sheet2 ไม่สามารถใช้
Private Sub Worksheet_Change(ByVal Target As Range)
ต้องใช้เป็น
Private Sub Worksheet_Calculate()
กล่ายเป็นว่า code error ไปเลย ตอนนี้พยายามดัดแปลง code เพิ่มเติม
ไม่ได้แนบ code ที่ทดลองมาให้ เพราะกำลังพยายามในหลายๆรูปแบบ และเปิดดูตามเวบต่างๆ เช่น Stackoverflow ประกอบไปด้วยครับ
Re: code ดักจับค่าที่เป็น 0 เกิดขึ้นกี่ครั้งใน cell นั้นๆ
Posted: Fri Mar 04, 2022 9:12 pm
by sarawoot
ตอนนี้สามารถทดลองเปลี่ยนมาใช้ Private Sub worksheet_calculate() ได้แล้วครับ
โดยทดลองที่ A1 อย่างเดียว
โดยให้ A1 = K1
เพื่อใส่ค่าที่ K1 แล้ว A1 เปลี่ยนตาม
เมื่อใส่ 0 ที่ K1 ที่ A1 (default คือ 1) ก็จะเป็น 0 และ นับจำนวนครั้งใส่ใน C1
แต่ปัญหาอยู่ที่ ..... ทั้งๆที่ทดลองแค่ A1 และคิดว่าใช้ code ที่ระบุไว้ว่า ถ้าเป็นค่าที่เปลี่ยนเป็น 0 ที่ A1 ให้นับ แต่กลายเป็นว่า แม้เราจะใส่ค่า 0 ใน cell อื่น มันก็ยังนับรวมมาด้วย ยังหาทางแก้ code ไม่ได้ครับ
และจริงๆต้องฃการ A1 ถึง A10 อันนี้ก็ยังหาวิธีไม่ได้ครับ
Code: Select all
Private Sub worksheet_calculate()
Dim Target As Range
Set Target = Range("A1")
Application.EnableEvents = False
If Not Intersect(Target, Range("A1")) Is Nothing Then
If Range("A1").Value = 0 Then
Range("C1").Value = Range("C1").Value + 1
End If
End If
Application.EnableEvents = True
End Sub
Re: code ดักจับค่าที่เป็น 0 เกิดขึ้นกี่ครั้งใน cell นั้นๆ
Posted: Fri Mar 04, 2022 11:09 pm
by snasui
กรณีเป็น Code ควรจัดรูปแบบให้เป็นตัวอักษรแบบ Code ดูตัวอย่างที่กฎการใช้บอร์ดข้อ 5 ด้านบน
ในโพสต์ก่อนหน้าผมปรับให้แล้ว
ตัวอย่างการปรับ Code จากประเด็นที่ถามมาตามด้านล่างครับ
Code: Select all
Dim r As Range
Dim c As Boolean
Private Sub worksheet_calculate()
' Dim Target As Range
' Set Target = Range("A1")
If c = False Then
c = True
Exit Sub
End If
If r.Count > 1 Then Exit Sub
Application.EnableEvents = False
If Not Intersect(r, Me.[k1:k10]) Is Nothing Then
If r.Value = 0 Then
Me.Cells(r.Row, "c").Value = Me.Cells(r.Row, "c").Value + 1
End If
End If
c = False
Application.EnableEvents = True
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
If c = False Then Exit Sub
Set r = Target
c = True
r.Value = r.Value
End Sub
Re: code ดักจับค่าที่เป็น 0 เกิดขึ้นกี่ครั้งใน cell นั้นๆ
Posted: Thu Mar 10, 2022 10:19 am
by sarawoot
ได้แล้วครับ ขอบคุณมากครับ
พอจะอธิบายโค้ดคร่าวๆได้ไหมครับ พอดีมีกรณีแบบนี้ที่ต้องทำ จะได้ประยุกต์โค้ดไปตามเหตุการณ์ได้ พยายามตีความหมายแล้ว แต่บางบรรทัดไม่เข้าใจจริงๆครับ เช่น Me.Cells(r.Row, "c")
ขอบคุณอีกครั้งครับ
Re: code ดักจับค่าที่เป็น 0 เกิดขึ้นกี่ครั้งใน cell นั้นๆ
Posted: Thu Mar 10, 2022 12:11 pm
by snasui
Keyword
Me
ขึ้นกับว่าอยู่ใน Class ไหนคำว่า
Me
หมายถึง Class นั้น หากอยู่ในชีตใด ๆ จะหมายถึงชีตนั้น ๆ ครับ
กรณีไม่เข้าใจ Statement ใดกรุณายกมาถามเป็นราย Statement ไป ขออภัยในความไม่สะดวกครับ