ฉันจะตั้งค่าแมโครได้อย่างไรโดยจะดำเนินการดังต่อไปนี้ในแต่ละครั้ง


0

ฉันเป็นมือใหม่ที่นี่และติดภารกิจที่ต้องทำซ้ำในอีกไม่กี่วันข้างหน้า ฉันขอขอบคุณที่คุณช่วยเหลือ ขอบคุณมากล่วงหน้า

ติดตั้ง:

  • มี 2 ​​แผ่น
  • บน Sheet1 มีข้อมูลมากมาย
  • บน Sheet2 มีตารางข้อมูลที่มีรูปแบบเดียวกับใน sheet1 แต่ตารางนั้นว่างเปล่า

.

การกระทำที่ต้องการ:

  1. ไปที่แถวแรกของตารางข้อมูลใน Sheet1
  2. หากค่าของคอลัมน์ขวาสุดของแถวนั้นคือ "1" ให้คัดลอกทั้งแถว ถ้าไม่ไปที่แถวถัดไปและตรวจสอบอีกครั้ง ทำซ้ำจนกว่าจะมีการคัดลอกบางสิ่ง
  3. ไปที่แถวแรกที่ว่างเปล่าของตารางข้อมูลใน Sheet2 วางค่าของสิ่งที่เพิ่งถูกคัดลอก
  4. กลับไปที่ 1 แต่เริ่มจากจุดที่คุณค้างไว้ ทำซ้ำทั้งหมดจนกระทั่งข้อมูลทั้งหมดที่มีเงื่อนไขดังกล่าวใน Sheet1 ถูกคัดลอกไปยัง Sheet2

ความคืบหน้า:

สคริปต์มาโครที่บันทึกไว้ที่ฉันได้รับเมื่อฉันพยายามเลียนแบบข้างต้น

Sheet1

Sheet2


Sub Macro7()                 ' ' Macro7 Macro '

Range("E11:R11").Select
Selection.Copy Sheets("v4 r2").Select
Range("E11").Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Range("E12").Select Sheets("v4 q2").Select
Range("E12:R12").Select Application.CutCopyMode = False
Selection.Copy Sheets("v4 r2").Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Range("E13").Select
End Sub

1
ลองค้นคว้าและโพสต์สิ่งที่คุณได้ลองแล้ว ด้วยตัวอย่างบางส่วน?
NetworkKingPin

สวัสดี. ฉันพยายามบันทึกการกระทำใน excel แต่การเคลื่อนไหวตามเงื่อนไขนั้นยากที่จะแสดง ..
Chris Ryu Yamamoto

กรุณาแบ่งปันสิ่งที่คุณได้ประสบความสำเร็จแล้ว โปรดอย่าตอบในความคิดเห็น แต่แก้ไขคำถามของคุณ
MátéJuhász

หวังว่ามันจะสมเหตุสมผล ...
Chris Ryu Yamamoto

คำตอบ:


0

ลองสิ่งนี้ - ฉันพยายามที่จะยึดมาโครที่คุณบันทึกไว้ แต่จำไว้ว่าเราต้องการหลีกเลี่ยงการใช้.Select/.Activateและใช้ตัวแปรหนึ่งหรือสองตัวเพื่อติดตามแถวว่างถัดไป

Sub t()
Dim lastCol&, lastRow&, emptyRow&, i&
Dim mainWS As Worksheet, copyToWS As Worksheet

' Create two variables to hold the sheets
Set mainWS = Sheets("v4 q2")
Set copyToWS = Sheets("v4 r2")

emptyRow = 1

'Now, let's find the last column in the mainWS, and last row
lastCol = mainWS.Cells(1, mainWS.Columns.Count).End(xlToLeft).Column
lastRow = mainWS.Cells(mainWS.Rows.Count, 1).End(xlUp).Row ' assuming your column A (1) has the most data

' Now, loop through your last Column, looking for `1`
For i = 1 To lastRow
    If mainWS.Cells(i, lastCol).Value = "1" Then
       ' Since you only want the VALUES, we can just set the two ranges equal to eachother
       ' instead of using .Copy
       copyToWS.Range(copyToWS.Rows(emptyRow), copyToWS.Rows(emptyRow)).Value = mainWS.Range(mainWS.Rows(i), mainWS.Rows(i)).Value
    emptyRow = emptyRow + 1
    End If
Next i

End Sub

นอกจากนี้โปรดทราบว่าเนื่องจากคุณต้องการเฉพาะค่าเราจึงสามารถกำหนดช่วงที่เท่ากันแทนที่จะคัดลอก / วาง (ซึ่งใช้คลิปบอร์ดและอาจใช้เวลานานกว่า) Range[destination].Value = Range[the range to copy].Valueต้องการทำเช่นนั้นมันเป็นเพียงแค่


1
ว้าวนี้ชัดเจนและน่าทึ่งมาก ขอบคุณ!
Chris Ryu Yamamoto

@ChrisRyuYamamoto - Yay! หากวิธีนี้ใช้ได้ผลกับคุณคุณคิดว่าการตั้งค่าสถานะเป็นคำตอบหรือไม่ (คลิกเครื่องหมายถูกที่ด้านซ้ายของโพสต์)
BruceWayne
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.