我試圖在 VBA 中弄清楚當資料有重復時如何復制和粘貼資料。
我想做的是。
如果單元格 A1、A2 和 A3 重復我想復制 H1 的資料并將其粘貼到 H2、H3
到目前為止,我只設法在 A 列中找到重復項,但堅持要找到解決我的問題的方法。
Sub Doubles()
'
' Doubles Macro
' Les Doubles
'
' Touche de raccourci du clavier: Ctrl e
'
Range("A1:I128").Select
ActiveWindow.SmallScroll Down:=-123
Selection.AutoFilter
Range("A:A,H:H").Select
Range("H1").Activate
Selection.FormatConditions.AddUniqueValues
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
Selection.FormatConditions(1).DupeUnique = xlDuplicate
With Selection.FormatConditions(1).Font
.Color = -16383844
.TintAndShade = 0
End With
With Selection.FormatConditions(1).Interior
.PatternColorIndex = xlAutomatic
.Color = 13551615
.TintAndShade = 0
End With
Selection.FormatConditions(1).StopIfTrue = False
ActiveSheet.Range("$A$1:$I$128").AutoFilter Field:=1, Criteria1:=RGB(255, _
199, 206), Operator:=xlFilterCellColor
ActiveSheet.AutoFilter.Sort.SortFields.Clear
ActiveSheet.AutoFilter.Sort.SortFields.Add Key:= _
Range("A1:A128"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption _
:=xlSortNormal
With ActiveSheet.AutoFilter.Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub
uj5u.com熱心網友回復:
運行子程式之前的示例資料:

在 A 列的行中,有一些重復值。
如果單元格 A1、A2 和 A3 重復我想復制 H1 的資料并將其粘貼到 H2、H3
子假設在 A 列中的每個重復值中,在 H 列中只有一行具有值。例如:在 A 列中,JOHN 出現在單元格 A5、A10、A17 ---> 所以在 H 列中,具有值的行將在單元格 H5 或 H10 或 H17 中。在上面的影像示例中,只有單元格 H5 具有值。
預期結果(來自上圖):
單元格 H5、H10 和 H17 的值為“john”
單元格 H6 和 H18 的值為“khan”
等

Sub test()
Dim arr As Variant: Dim el
Dim rg As Range: Dim cell As Range
With Sheets("Sheet1")
Set rg = .Range("A1", .Range("A" & Rows.Count).End(xlUp))
End With
Set arr = CreateObject("scripting.dictionary")
For Each cell In rg: arr.Item(cell.Value) = 1: Next
For Each el In arr
If Application.CountIf(rg, el) > 1 Then
With rg
.Replace el, True, xlWhole, , False, , False, False
.SpecialCells(xlConstants, xlLogical).Offset(0, 7).Value = .SpecialCells(xlConstants, xlLogical).Offset(0, 7).SpecialCells(xlConstants).Value
.Replace True, el, xlWhole, , False, , False, False
End With
End If
Next
End Sub
宏觀流程:
- 用 A 列中的資料創建一個范圍到變數 rg
- 從 rg 中的唯一值創建一個陣列作為變數 arr
- 回圈到 arr 中的每個元素
- 檢查元素在 rg 中出現的次數
- 如果元素在 rg 中出現多次(例如:JOHN)
- 它將 rg 中的元素名稱替換為邏輯 TRUE(現在 A 列中的 JOHN 變為 TRUE)
- 然后它獲取 rg 中所有具有 TRUE 值的單元格(單元格 A5、A10、A17)
- 然后將那些單元格 7 向右偏移(單元格 H5、H10、H17)
- 然后用值填充它們---對不起,我很難用英語解釋它---。(用 H5 值填充 H5、H10、H17)。
- 然后將 rg 中的 TRUE 值帶回元素的名稱(現在 A 列中的 TRUE 再次變為 JOHN)。
如果單元格 A1、A2 和 A3 重復我想復制 H1 的資料并將其粘貼到 H2、H3
再一次,請記住,代碼假定只有一個單元格具有價值。從您上面的報價來看,只有單元格 H1 具有值,H2 和 H3 是空白/空/無值。
示例:
單元格 A100、A200、A300、A400、A500 是重復的。
如果在 H100 中有一個值并且如果在 H500 中有一個值,則代碼將無法正確運行。同樣,必須只有一個單元格具有價值,要么在 H100 或 H200 或 H300 或 H400 或 H500 中。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/485929.html
上一篇:粘貼顯示的值
