我遇到了 Excel VBA 问题,我希望这里有人可以帮助我。
我有一个文件,其中不同列中包含不同供应商的价格。有一个根列(在我的示例文件中,这是标题为“TESLA”的列)。我希望代码仅删除标题为“FIAT”和“KIA”的列中的价格,前提是它们与“TESLA”列中的价格位于同一行,并且它们分别与“TESLA”列中的价格匹配。
因此,在我的示例文件中,它应该仅删除“FIAT”列中的值 36,00 和值 88,00。在“KIA”列中只有值 56,00 和值 896,00。
其他列中的值应保留,即使它们与“TESLA”列中的值匹配。
这是我到目前为止所得到的:
Sub delete_matches()
Dim LastRow as long
Dim LastColumn As Long, i As Long, Position As Long
With Sheets("Sheet1")
LastColumn = .Cells(1, .Columns.Count).End(xlToLeft).Column
LastRow = .Cells(Rows.Count, 1).End(xlUp).Row
For i = LastColumn To 1 Step -1
Position = InStr(1, .Cells(1, i), "TESLA")
If Position <> 0 Then
'Here has to happen something..
End If
Next i
End With
End Sub
首先识别关键列的位置(TESA、KIA、FIAT),然后比较和清理数据。
Sub delete_matches()
Dim LastRow As Long
Dim LastColumn As Long, i As Long
Dim tCol As Integer, kCol As Integer, fCol As Integer
With Sheets("Sheet1")
arr = .UsedRange.Value
For i = 1 To UBound(arr, 2)
If Trim(arr(1, i)) = "TESLA" Then tCol = i
If Trim(arr(1, i)) = "KIA" Then kCol = i
If Trim(arr(1, i)) = "FIAT" Then fCol = i
Next i
If tCol * kCol * fCol = 0 Then
MsgBox "Can't find key column header"
Else
For i = 1 To UBound(arr)
If arr(i, kCol) = arr(i, tCol) Then arr(i, kCol) = ""
If arr(i, fCol) = arr(i, tCol) Then arr(i, fCol) = ""
Next i
End If
.UsedRange.Value = arr
End With
End Sub