Page 1 of 3

ต้องการให้ข้อมูลย้ายไปอีก sheet โดยอัตโนมัติ

Posted: Wed Mar 30, 2011 3:37 pm
by axiomy
คือต้องการแยกประเภท process ที่ active กับ inactive ค่ะ โดยต้องการเก็บให้อยู่คนละ sheet กัน
requirement ก็คือ เมื่อใดก็ตามที่ user เปลี่ยน status เป็น inactive ให้ข้อมูลของ process นั้นๆ ย้ายไป sheet ที่ชื่อ inactive ค่ะ
แล้วต้องเขียนโค้ดหรือเปล่าคะ

ขอบคุณค่ะ

Re: ต้องการให้ข้อมูลย้ายไปอีก sheet โดยอัตโนมัติ

Posted: Wed Mar 30, 2011 3:50 pm
by ekkaluk_suk
การทำแบบนี้ คงต้องใช้ VBE เข้าช่วยคงต้องรอปรมาจารย์ด้าน VBE เข้ามาตอบแล้วครับ :D

Re: ต้องการให้ข้อมูลย้ายไปอีก sheet โดยอัตโนมัติ

Posted: Wed Mar 30, 2011 6:58 pm
by snasui
:D หากต้องการแค่แยกการแสดงผลออกเพื่อดูผลลัพธ์โดยไม่มีเงื่อนไขว่าให้ลบข้อมูลต้นแหล่งออกไปด้วย สามารถใช้สูตรได้ครับ ดูตัวอย่างตามไฟล์แนบประกอบ

ตัวอย่างสูตรที่ชีท Active เซลล์ A2 คีย์

=IF(ROWS(A$2:A2)>$B$1,"",INDEX(Sheet1!$B$2:$B$10,SMALL(IF(Sheet1!$A$2:$A$10="Active",ROW(Sheet1!$A$2:$A$10)-ROW(Sheet1!$A$2)+1),ROWS(A$2:A2))))

Ctrl+Shift+Enter > สังเกตการกดแป้นจะต้องกด Ctrl+Shift ค้างไว้ก่อนแล้วตามด้วย Enter เนื่องจากเป็นสูตร Array หากกดแป้นถูกต้องจะเห็นเครื่องหมายปีกกาคร่อมสูตร ปีกกานี้จะคีย์เข้าไปเองไม่ได้ครับ

การนำไปใช้จริงให้ปรับช่วงข้อมูลในสูตรเผื่อไว้ตามที่คิดว่าจะมีข้อมูลไปถึงครับ

Re: ต้องการให้ข้อมูลย้ายไปอีก sheet โดยอัตโนมัติ

Posted: Fri Apr 01, 2011 3:14 pm
by axiomy
ขอบคุณอาจารย์มากค่ะ แต่ขอรบกวนอาจารย์เพิ่มอีกนิดหนึ่งนะคะ คือว่าตัวอย่างที่ยกให้อาจารย์ดูเมื่อครั้งแรก หนูยังยกตัวอย่างได้ไม่ชัดเจนพอ คำตอบที่ได้จากอาจารย์จึงยังไม่ค่อยตรงกับ requirement อะค่ะ จึงจะขอรบกวนอาจารย์ให้ช่วยดูอีกซักรอบได้มั้ยคะ คือว่าหนูต้องการให้ทุกๆ cell ใน column status เป็น dropdown list ที่ให้ user สามารถเลือกได้ว่าจะเอา status แบบใด ถ้า user เลือก status เป็น Closed หรือ Cancelled ต้องการให้ข้อมูลทั้งหมดใน row นั้นๆ ย้ายไปอีก sheet หนึ่งที่ชื่อว่า Inactive แต่ถ้า status เป็น open, inqueue หรือ pending ให้ข้อมูลยังคงอยู่ที่เดิมค่ะ ไม่ทราบว่าการทำแบบนี้ยากเกินไปสำหรับ excel หรือเปล่าคะ รบกวนอาจารย์ช่วยดูให้หน่อยค่ะ

จึงขอรบกวนอาจารย์ทั้งหมดสองเรื่องค่ะ ก็คือ การทำ dropdown list และการย้าย sheet ค่ะ

ขอบคุณค่ะ :D

Re: ต้องการให้ข้อมูลย้ายไปอีก sheet โดยอัตโนมัติ

Posted: Fri Apr 01, 2011 3:35 pm
by axiomy
หาไปหามาเจอวิธีทำ dropdown list แล้วค่ะอาจารย์ ขั้นตอนง่ายมากเลย แต่หนูทำไม่เป็นเพราะแทบจะไม่เคยใช้งาน excel เลยค่ะ ตอนนี้จึงขอรบกวนอาจารย์แค่เรื่องย้าย sheet แค่เรื่องเดียวค่ะ

ขอบคุณค่ะ

Re: ต้องการให้ข้อมูลย้ายไปอีก sheet โดยอัตโนมัติ

Posted: Fri Apr 01, 2011 4:21 pm
by snasui
ลองส่งตัวอย่างที่ Update มาแล้วครับจะได้ทำต่อจากที่ทำไว้แล้ว

คำถามเพิ่มเติมคือ คำว่าย้าย หมายถึงให้ลบข้อมูลออกจากชีทเดิมไปด้วยหรือไม่ เพราะถ้าไม่ลบแสดงว่าไม่ได้ย้ายเพียงแต่นำค่าไปแสดง แต่ถ้าย้ายจะเป็นการลบข้อมูลจากที่เดิมทิ้งไป เมื่อเป็นเช่นนั้นจะมีผลกับการทำ Drop down ที่ทำไว้ เพราะเลือกแล้วมันจะย้ายไปทันที จะมาเลือกใหม่ก็ไม่มีข้อมูลให้ย้ายแล้ว

Re: ต้องการให้ข้อมูลย้ายไปอีก sheet โดยอัตโนมัติ

Posted: Fri Apr 01, 2011 4:53 pm
by axiomy
ขอโทษค่ะอาจารย์ หนูลืมแนบไฟล์
คำว่าย้าย ในที่นี้คือต้องการให้ลบข้อมูลเดิมออกไปเลยค่ะอาจารย์

Re: ต้องการให้ข้อมูลย้ายไปอีก sheet โดยอัตโนมัติ

Posted: Fri Apr 01, 2011 5:11 pm
by snasui
เมื่อเป็นการย้ายทำไมคอลัมน์หลังจากย้ายไปไม่เท่ากับคอลัมน์เดิมครับ

ที่ชีท Issue มีถึงคอลัมน์ R แต่ที่ชีท Inactive มีแค่ P ต้องการลบคอลัมนไหนออกไปบ้างครับ :?:

Re: ต้องการให้ข้อมูลย้ายไปอีก sheet โดยอัตโนมัติ

Posted: Fri Apr 01, 2011 5:14 pm
by axiomy
จริงๆจำนวน column เท่ากันค่ะอาจารย์ แต่บังเอิญว่า column A และ B ใน sheet ที่ชื่อ Issue มันหายไป พอ insert ใหม่มันก็เป็น cloumn C เลยอะค่ะ

Re: ต้องการให้ข้อมูลย้ายไปอีก sheet โดยอัตโนมัติ

Posted: Fri Apr 01, 2011 6:12 pm
by snasui
การทำเช่นนั้นต้องพึ่ง VBA ครับ ผมเขียนมาให้แล้วตามด้านล่าง

Code: Select all

Option Explicit
Sub TransferDara()
Dim r As Range
Dim i As Integer
Dim k As Integer
Dim rt As Range
k = Worksheets("Issue").Range("M65536").End(xlUp).Row
With Worksheets("Issue")
    For i = k To 2 Step -1
        If .Cells(i, "M") = "Cancelled" Or .Cells(i, "M") = "Closed" Then
            Set r = .Range("M" & i).Offset(0, -12).Resize(1, 18)
            Set rt = Worksheets("Inactive").Range("M65536").End(xlUp).Offset(1, -12)
            r.Copy rt
            r.EntireRow.Delete
        End If
    Next i
End With
End Sub
การเรียกใช้งานให้กดแป้น Alt+F8 แล้วเลือก TransferData > Run

เราสามารถสร้าง Object ใด ๆ เอาไว้เพื่อให้คลิกแล้ว Run Macro ได้ง่าย ๆ ครับ เมื่อสร้าง Object แล้วให้คลิกขวาที่ Object จากนั้นเลือก Assigned Macro > เลือก TransferData

Re: ต้องการให้ข้อมูลย้ายไปอีก sheet โดยอัตโนมัติ

Posted: Mon Apr 04, 2011 9:19 am
by axiomy
เย่... ทำได้แล้วค่ะ ขอบคุณอาจารย์มากๆเลยนะคะ อาจารย์ใจดีจัง :D
ถ้ามีปัญหาอีก ขออณุญาตเข้ามารบกวนอาจารย์อีกนะคะ

('o o')

Re: ต้องการให้ข้อมูลย้ายไปอีก sheet โดยอัตโนมัติ

Posted: Mon Apr 04, 2011 5:38 pm
by axiomy
อาจารย์คะ คือ interface ของ work sheet มีการเปลี่ยนแปลงนิดหน่อยอะค่ะ code ที่อาจารย์ให้มาก็เลยใช้ไม่ได้ รบกวนอาจารย์แก้โค้ดให้ได้ไหมคะ หนูลองพยายามแก้แล้ว แต่ไม่เข้าใจ code อะค่ะ ขอรบกวนอาจารย์อีกครั้งนะคะ

ps ถ้าหนูทำ checklist และ dropdown เพิ่มในตาราง จะต้องแก้ code อีกมั้ยคะอาจารย์ อยากถามอาจารย์ค่ะว่าระหว่างทำการย้าย sheet, ทำ checklist และการทำ dropdown หนูควรทำอย่างไหนก่อนถึงจะดีที่สุดคะ
ps ในตารางข้อมูลจริง จะมีข้อมูลเป็นจำนวนมาก

ขอบคุณค่ะ :D

Re: ต้องการให้ข้อมูลย้ายไปอีก sheet โดยอัตโนมัติ

Posted: Mon Apr 04, 2011 5:49 pm
by snasui
แนบไฟล์ตัวอย่างที่มี Code เดิมมาครับ จะได้แก้ Code ได้เลย

การทำ Dropdown List หรือการทำอื่น ๆ ที่ไม่ใช่การเปลี่ยนแปลงเพิ่มลดหรือสลับคอลัมน์จะไม่กระทบกับ Code ครับ

Re: ต้องการให้ข้อมูลย้ายไปอีก sheet โดยอัตโนมัติ

Posted: Tue Apr 05, 2011 1:28 pm
by axiomy
file พร้อม code ค่ะอาจารย์ :D รบกวนอาจารย์ด้วยนะค้า

Re: ต้องการให้ข้อมูลย้ายไปอีก sheet โดยอัตโนมัติ

Posted: Tue Apr 05, 2011 4:29 pm
by snasui
:D ลองนำ Code ด้านล่างนี้ไปใช้แทน Code เดิมครับ

Code: Select all

Option Explicit
Sub TransferData()
Dim r As Range
Dim i As Integer
Dim k As Integer
Dim rt As Range
k = Worksheets("Issue Log").Range("L65536").End(xlUp).Row
With Worksheets("Issue Log")
    For i = k To 2 Step -1
        If .Cells(i, "L") = "Cancelled" Or .Cells(i, "L") = "Closed" Then
            Set r = .Range("L" & i).Offset(0, -11).Resize(1, 17)
            Set rt = Worksheets("Inactive").Range("L65536").End(xlUp).Offset(1, -11)
            r.Copy rt
            r.EntireRow.Delete
        End If
    Next i
End With
End Sub
ดูไฟล์แนบประกอบครับ

Re: ต้องการให้ข้อมูลย้ายไปอีก sheet โดยอัตโนมัติ

Posted: Tue Apr 05, 2011 6:17 pm
by axiomy
ได้แล้ว.. !! ขอบคุณอาจารย์มากๆนะค้า :D

Re: ต้องการให้ข้อมูลย้ายไปอีก sheet โดยอัตโนมัติ

Posted: Thu Apr 07, 2011 3:49 pm
by axiomy
อาจารย์คะ ถ้าหากต้องการใส่สีพื้นหลังให้กับ row ที่ถูกย้ายไป inactive sheet เป็นสีเทา จะต้องเพิ่ม code ตรงไหนบ้างคะ

Re: ต้องการให้ข้อมูลย้ายไปอีก sheet โดยอัตโนมัติ

Posted: Thu Apr 07, 2011 4:35 pm
by snasui
ลองปรับ Code เป็นตามด้านล่างครับ

Code: Select all

Option Explicit
Sub TransferData()
Dim r As Range
Dim i As Integer
Dim k As Integer
Dim rt As Range
k = Worksheets("Issue Log").Range("L65536").End(xlUp).Row
With Worksheets("Issue Log")
    For i = k To 2 Step -1
        If .Cells(i, "L") = "Cancelled" Or .Cells(i, "L") = "Closed" Then
            Set r = .Range("L" & i).Offset(0, -11).Resize(1, 17)
            Set rt = Worksheets("Inactive").Range("L65536").End(xlUp).Offset(1, -11)
            r.Copy rt
            r.Clear
            r.Interior.ColorIndex = 15
        End If
    Next i
End With
End Sub

Re: ต้องการให้ข้อมูลย้ายไปอีก sheet โดยอัตโนมัติ

Posted: Thu Apr 07, 2011 4:53 pm
by axiomy
อาจารย์ขา ขอโทษหนูที่อธิบายให้อาจารย์ไม่ชัดเจนนะคะ คือ row ที่ต้องการให้เป็นสีเทาคือ row ที่อยู่ใน Inactive แล้วอะค่ะ คือหนูต้องการให้ทุกๆ row ใน Inactive ที่มี data อยู่เป็นสีเทาอะค่ะอาจารย์

Re: ต้องการให้ข้อมูลย้ายไปอีก sheet โดยอัตโนมัติ

Posted: Thu Apr 07, 2011 4:59 pm
by snasui
หมายถึงไม่ต้องย้ายค่าไป เพียงแต่ให้ระบายสีเป็นสีเทาเท่านั้นใช่หรือไม่ครับ :?: