我正在嘗試執行以下操作:
- 如果 sheet1 中的 table1 中的“Order”列為空,則檢查每一行(此作業表中只有一個表)
- 如果“訂單”列為空,請從同一行復制“通知”編號,然后將其粘貼到“通知”列下另一張表 (sheet2) 的表 (table2) 的新行中。
- 如果不為空,則轉到table1中的下一行
到目前為止,我有以下代碼:
For Each TCell in Range ("Table1").ListObject.ListColumns("Order").DataBodyRange.Cells
If TCell.Value="" then
Table2.ListRows.Add AlwaysInsert:=True
Range(TCell.Row, "Notification").Copy Range("Table2") .ListObject. ListColumns ("Notification"
.DataBodyRange.End(xlDown).Offset (1,0)
End if
Next TCell
任何幫助將不勝感激!謝謝。
uj5u.com熱心網友回復:
將表的列附加到另一個表的列
- 這是一個基本的解決方案,“從字面上”做所需的事情(慢)。通過使用物件變數,它說明了它們的應用。
- 您可以通過引入陣列來提高效率,尤其是通過使用
AutoFilter.
Option Explicit
Sub AppendNotifications()
Dim wb As Workbook: Set wb = ThisWorkbook ' workbook containing this code
Dim sws As Worksheet: Set sws = wb.Worksheets("Sheet1")
Dim stbl As ListObject: Set stbl = sws.ListObjects("Table1")
Dim slcl As ListColumn: Set slcl = stbl.ListColumns("Order")
Dim svcl As ListColumn: Set svcl = stbl.ListColumns("Notification")
Dim scOffset As Long: scOffset = svcl.Index - slcl.Index
Dim dws As Worksheet: Set dws = wb.Worksheets("Sheet2")
Dim dtbl As ListObject: Set dtbl = dws.ListObjects("Table2")
Dim dvcl As ListColumn: Set dvcl = dtbl.ListColumns("Notification")
Dim dvCol As Long: dvCol = dvcl.Index
Dim sCell As Range
Dim dvrw As ListRow
For Each sCell In slcl.DataBodyRange
If Len(sCell.Value) = 0 Then
Set dvrw = dtbl.ListRows.Add
dvrw.Range(dvCol).Value = sCell.Offset(, scOffset).Value
End If
Next sCell
MsgBox "Notifications appended.", vbInformation
End Sub
uj5u.com熱心網友回復:
可以試試下面的代碼:
Sub transform()
Dim cell As Range
Set rng1 = Sheet1.Range("Table1[Order]")
Set SheetTwo = ActiveWorkbook.Worksheets("Sheet2")
Set TableTwo = SheetTwo.ListObjects("Table2")
For Each cell In rng1
If Not IsEmpty(cell.Offset(0, 0).Value) Then
Dim newrow As ListRow
Set newrow = TableTwo.ListRows.Add
With newrow
.Range(1) = cell.Offset(0, 1).Value
End With
End If
Next cell
End Sub
代碼是不言自明的。
注意:Table2 只有一列。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/422139.html
標籤:
