: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

code ดักจับค่าที่เป็น 0 เกิดขึ้นกี่ครั้งใน cell นั้นๆ

ฟอรัมถาม-ตอบปัญหาการใช้งาน 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. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
sarawoot
Member
Member
Posts: 10
Joined: Thu May 28, 2020 10:23 pm

code ดักจับค่าที่เป็น 0 เกิดขึ้นกี่ครั้งใน cell นั้นๆ

#1

Post 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 เพื่อเริ่มนับใหม่ อันนี้ทำได้แล้วครับ
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30944
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: code ดักจับค่าที่เป็น 0 เกิดขึ้นกี่ครั้งใน cell นั้นๆ

#2

Post by snasui »

:D ตัวอย่าง 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
sarawoot
Member
Member
Posts: 10
Joined: Thu May 28, 2020 10:23 pm

Re: code ดักจับค่าที่เป็น 0 เกิดขึ้นกี่ครั้งใน cell นั้นๆ

#3

Post 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 ประกอบไปด้วยครับ
sarawoot
Member
Member
Posts: 10
Joined: Thu May 28, 2020 10:23 pm

Re: code ดักจับค่าที่เป็น 0 เกิดขึ้นกี่ครั้งใน cell นั้นๆ

#4

Post 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
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30944
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: code ดักจับค่าที่เป็น 0 เกิดขึ้นกี่ครั้งใน cell นั้นๆ

#5

Post by snasui »

:D กรณีเป็น Code ควรจัดรูปแบบให้เป็นตัวอักษรแบบ Code ดูตัวอย่างที่กฎการใช้บอร์ดข้อ 5 ด้านบน :roll: ในโพสต์ก่อนหน้าผมปรับให้แล้ว

ตัวอย่างการปรับ 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
sarawoot
Member
Member
Posts: 10
Joined: Thu May 28, 2020 10:23 pm

Re: code ดักจับค่าที่เป็น 0 เกิดขึ้นกี่ครั้งใน cell นั้นๆ

#6

Post by sarawoot »

ได้แล้วครับ ขอบคุณมากครับ

พอจะอธิบายโค้ดคร่าวๆได้ไหมครับ พอดีมีกรณีแบบนี้ที่ต้องทำ จะได้ประยุกต์โค้ดไปตามเหตุการณ์ได้ พยายามตีความหมายแล้ว แต่บางบรรทัดไม่เข้าใจจริงๆครับ เช่น Me.Cells(r.Row, "c")

ขอบคุณอีกครั้งครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 30944
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: code ดักจับค่าที่เป็น 0 เกิดขึ้นกี่ครั้งใน cell นั้นๆ

#7

Post by snasui »

:D Keyword Me ขึ้นกับว่าอยู่ใน Class ไหนคำว่า Me หมายถึง Class นั้น หากอยู่ในชีตใด ๆ จะหมายถึงชีตนั้น ๆ ครับ

กรณีไม่เข้าใจ Statement ใดกรุณายกมาถามเป็นราย Statement ไป ขออภัยในความไม่สะดวกครับ
Post Reply