Announcement

Collapse

ยินดีต้อนรับสู่ Excel Expert Training Forum

กฏกติกาของฟอรัม: แจ้งชื่อและนามสกุลจริงในการสมัครสมาชิก - ตั้งชื่อกระทู้ให้ตรงกับปัญหาที่ถาม - เขียนอธิบายคำถามทั้งในตัวกระทู้และในแฟ้มแนบ - ห้ามใช้คำว่า อ่ะ คับ คำผวน - ตั้งชื่อแฟ้มเป็นภาษาอังกฤษให้สื่อถึงปัญหา - อย่าระบุชื่อให้คนใดเป็นผู้ตอบ - งดให้ความร่วมมือหรือช่วยกระทู้ที่ละเมิดกฏของฟอรัม
See more
See less

Excel VBA หยอดคนลงในแต่ละสถานี

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Excel VBA หยอดคนลงในแต่ละสถานี

    ผมมีเซลล์รับค่าคือจำนวนคน และผมต้องการจะหยอดคนลงไปในแต่ละสถานี โดยเริ่มหยอดที่สถานีที่มีค่า cycle time มากที่สุดก่อน โดยหยอดที่ cell ด้านข้างบวกเพิ่มทีละ 1 โดยใช้for loop ผมสามารถเขียนยังไงได้บ้างครับ
    ผมลองเขียนโค้ดมาได้แค่เบื้องต้น อยากสอบถามว่าผมจะต้องเขียนยังไงต่อครับ
    Sub demo1()
    Dim rng As Range
    Set rng = Cells(7, "f")
    Dim i As Integer
    For i = 1 To Cells(3, "e") ' for loop
    rng.Offset(i - 1, 0).Value = i





    Next i

    End Sub
    อันนี้เป็นโค้ดที่ลองเขียนดู รบกวนผู้รู้และอาจารย์ช่วยสอนทีครับ
    Attached Files
    Last edited by otauglnwo; 20 Mar 2019, 01:45.

  • #2
    ลองโค้ดนี้ดูครับ
    Sub demo1()
    Dim rng As Range
    Set rng = Range("d7:d13")
    i = 0

    Do Until [E3] = 0
    j = 1 + i Mod 7
    r = Application.Match(Application.Large(rng, j), rng, 0)
    [F7].Offset(r - 1, 0) = [F7].Offset(r - 1, 0).Value + 1
    [E3] = [E3] - 1
    i = i + 1
    Loop

    End Sub
    Last edited by Vajaraphol; 20 Mar 2019, 10:53.

    Comment


    • otauglnwo
      otauglnwo commented
      Editing a comment
      ขอบคุณมากๆครับ แล้วถ้าผมต้องการให้หยุดหยอดคนในกรณีที่ สถานีขึ้นสถานะ true ต้องใช้คำสั่ง if else ใช่ไหมครับ รบกวนช่วยแนะนำผมด้วยครับ

  • #3
    ลองเพิ่มบรรทัด if สถานี = true then exit sub
    ตรงตำแหน่งที่ต้องการตรวจสอบครับ

    Comment


    • otauglnwo
      otauglnwo commented
      Editing a comment
      ผมลองเขียนแล้วมันขึ้น error ครับ ผมคงเขียนโค้ดผิด รบกวนพี่เขียนให้ดูเป็นตัวอย่างได้ไหมครับ เขียนเพิ่มจากโค้ดที่พี่ส่งให้เลย
      โดยถ้า หยอดไปแล้วขึ้นstatus "true" ก็ให้หยุดหยอดคนของสถานีนั้น และไม่ต้องการให้ทำจนกว่าE3 จะเหลือ 0 ด้วยครับ อย่างงี้ต้องใช้เป็น Do while ไหมครับ จุดประสงค์คือ หยอดคนลงในสถานีที่มีcycle time มากก่อน ถ้าสถานีไหนขึ้น true แล้ว ก็หยุดหยอดของสถานีนั้น ทำแบบนี้จนทุกสถานีขึ้น true หมดและหยุด รบกวนพี่อีกสักรอบนะครับ
      Sub demo1()
      Dim rng As Range
      Set rng = Range("d7:d13")
      i = 0

      Do Until [E3] = 0
      j = 1 + i Mod 7
      r = Application.Match(Application.Large(rng, j), rng, 0)
      [F7].Offset(r - 1, 0) = [F7].Offset(r - 1, 0).Value + 1
      [E3] = [E3] - 1
      i = i + 1

      Loop

      End Sub
      Last edited by otauglnwo; 21 Mar 2019, 02:31.

  • #4
    ค่า status เป็นค่าคงที่ true หรือ false ตั้งแต่แรก
    นั่นคือไม่หยอดคนลงแถวที่ status เป็น true เลย
    ผมเข้าใจถูกไหมครับ

    Comment


    • otauglnwo
      otauglnwo commented
      Editing a comment
      ใช่ครับ ถ้าขึ้นtrueแล้วคือหยุดหยอดของแถวนั้น
      ค่าstatus คือผมผูกสูตรเอาไว้คือ ถ้าค่า cycle time น้อยกว่า takt time[H3] ก็จะขึ้นสถานะ true ครับ แล้วถ้าขึ้นสถานะtrueแล้วคือหยุดหยอดคนของสถานีนั้น แต่ถ้ายังขึ้นfalse ก็คือจะหยอดคนต่อโดยหยอดจากค่า cycle time ที่มีค่ามากที่สุดก่อนเหมือนเดิมครับ
      Last edited by otauglnwo; 21 Mar 2019, 14:13.

  • #5

    ลองโค้ดนี้ดูครับ
    Sub test1()
    Dim rng As Range
    Set rng = Range("d7:d13")
    i = 0

    Do Until [E3] = 0
    j = 1 + i Mod 7
    r = Application.Match(Application.Large(rng, j), rng, 0)
    If Cells(r - 1, 10).Value = False Then
    [F7].Offset(r - 1, 0) = [F7].Offset(r - 1, 0).Value + 1
    [E3] = [E3] - 1
    End If
    i = i + 1
    Loop

    End Sub

    Comment


    • otauglnwo
      otauglnwo commented
      Editing a comment
      ขอบคุณครับพี่ ได้แล้วครับ
Working...
X