เมื่อการเปลี่ยนแปลงค่าในเซลล์ใน excel เพิ่มค่าใหม่ให้กับตาราง [ปิด]


0

ฉันกำลังมองหาสคริปต์ VBA น่าจะเป็น โดยทั่วไปแล้วสถานการณ์คือสิ่งนี้: ฉันมีชีตที่ดึงค่าจาก API โดยอัตโนมัติดังนั้นเมื่อใดก็ตามที่ฉันอัปเดตชีตค่าจะเปลี่ยน สิ่งที่ฉันต้องการจะทำคือเพิ่มค่าใหม่จากบางเซลล์ไปยังตารางในชีตอื่น ดังนั้นเมื่อใดก็ตามที่ค่าเปลี่ยนแปลงค่าใหม่จะถูกเพิ่มเข้าไปในแถวแรกที่ว่างในคอลัมน์ใดคอลัมน์หนึ่ง ฉันต้องการติดตามข้อมูลในอดีตเพื่อติดตามว่าค่าเหล่านี้พัฒนาอย่างไรเมื่อเวลาผ่านไป โบนัสที่ดีจะเพิ่มเวลาที่แน่นอนของการอัปเดตเฉพาะนั้นไปยังคอลัมน์อื่นในแถวเดียวกัน แต่ฉันสามารถทำได้ด้วยตนเองเช่นกัน

คำตอบ:


1

คุณสามารถใช้มาโครเหล่านี้เพื่อติดตามการเปลี่ยนแปลงในช่วงข้อมูลเฉพาะ

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A1:B100")) Is Nothing Then
Call Master
End If
End Sub

บันทึก:

  • รหัสนี้จะเรียกใช้แมโคร (Master)เมื่อมีการเปลี่ยนแปลงค่าของเซลล์ในช่วง

ป้อนรหัส VBA ด้านล่างเขียนเป็นโมดูลมาตรฐาน

  • รหัสนี้จะคัดลอกค่า New / Altered ทุกค่าจากช่วงA1:B100เข้าสู่ชีตใหม่MasterSheetโดยไม่เขียนทับข้อมูลเก่า

    Sub Master()
    
    Dim sourceSheet As Worksheet
    Dim sourceRange As Range
    Dim sourceRows As Integer
    
    Set sourceSheet = Worksheets("Sheet1")
    
    sourceRows = WorksheetFunction.CountA(sourceSheet.Range("A:A"))
    
    Set sourceRange = sourceSheet.Range("A1:B" & sourceRows)
    
    Dim targetSheet As Worksheet
    Dim targetRange As Range
    Dim targetRows As Integer
    
    Set targetSheet = Worksheets("MasterSheet")
    
    targetRows = WorksheetFunction.CountA(targetSheet.Range("A:A"))
    
    Set targetRange = targetSheet.Range("A" & targetRows + 1 & ":B" & targetRows + 1 + sourceRows)
    
    sourceRange.Copy Destination:=targetRange
    
    End Sub
    

บันทึก:

  • เพื่อการจัดการข้อมูลและไฟล์ที่ดีขึ้นฉันใช้ MACRO สองตัว
  • มาโครใช้ในCOUNTAการคำนวณว่าแถวมีการใช้งานอย่างไร
  • หากคุณมีส่วนหัวของคอลัมน์บนแผ่นงานต้นฉบับและปริญญาโทพวกเขาจะได้รับการทำซ้ำ ดังนั้นคุณอาจต้องการที่จะทำให้การเริ่มต้นที่sourceRangeA2

ปรับการอ้างอิงเซลล์และชื่อแผ่นงานตามต้องการ


ดูเหมือนว่าจะถูก แต่ฉันก็ยังมีปัญหาอยู่บ้าง ฉันอาจไม่ชัดเจนในโพสต์ต้นฉบับของฉันดังนั้นขอโทษสำหรับที่ จากสิ่งที่ฉันรวบรวมรหัสของคุณจะเพิ่มค่าที่เปลี่ยนแปลงใด ๆ ในช่วงเฉพาะไปยังจุดสิ้นสุดของคอลัมน์ A บน MasterSheet อย่างไรก็ตามนั่นไม่ใช่สิ่งที่ฉันกำลังมองหา สมมุติว่าเซลล์ A2 คือค่า x และ B2 คือค่า y เมื่อค่า x เปลี่ยนแปลงฉันต้องการเพิ่มลงในคอลัมน์ A บนแผ่นงานอื่น A1 จะเป็นส่วนหัว "ค่า x" และคอลัมน์นั้นจะรวมเฉพาะค่าก่อนหน้าของค่า x เมื่อฉันเปลี่ยนค่า y ในแผ่นงานต้นฉบับที่จะไปที่คอลัมน์ B บนแผ่นงานที่สอง
Rasmus Tieaho

@RasmusTieaho ฉันได้แนะนำวิธีแก้ปัญหาตาม OP สิ่งที่ฉันอยากจะแนะนำเนื่องจากรหัสของฉันคือการสังเกตการเปลี่ยนแปลงทั้งหมดใน Source Sheet และการปรับปรุงอื่น ๆ และมันสามารถแก้ไขได้ตามความต้องการล่าสุดของคุณดังนั้นใช้มันและทำ ต้องมีการแก้ไข☺
Rajesh S

@Rasmus คุณไม่สามารถเปลี่ยนคำถามหลังจากมีคนใช้เวลาไปแล้วและพยายามตอบคำถาม โปรดให้เครดิตที่เหมาะสมกับคำตอบที่คุณได้รับหากคุณคิดว่ามันเป็นคำตอบของคำถามต้นฉบับ คุณสามารถโพสต์คำถามใหม่ที่สะท้อนถึงปัญหาที่แท้จริงของคุณได้ดียิ่งขึ้น
Tom Brunberg

@ TomBrunberg คุณยกประเด็นดีขึ้นมา OP จะต้องระมัดระวังอย่างมากในขณะที่โพสต์และการเปลี่ยนแปลงบ่อยครั้งเบี่ยงเบนผู้ตอบ ☺
Rajesh S

เอาล่ะไม่ทราบเรื่องนี้
Rasmus Tieaho
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.