比较两列并使用vba复制粘贴
我在一个测试表中有两列。让我们假设C列和D列 C和D中的每一行可能有兼容的、未确定的或空白的单元格 我想比较C列和D列,如果C有兼容,而D没有确定,那么兼容应该粘贴到D中,反之亦然 我有以下代码,但不确定如何完成:比较两列并使用vba复制粘贴,vba,excel,Vba,Excel,我在一个测试表中有两列。让我们假设C列和D列 C和D中的每一行可能有兼容的、未确定的或空白的单元格 我想比较C列和D列,如果C有兼容,而D没有确定,那么兼容应该粘贴到D中,反之亦然 我有以下代码,但不确定如何完成: Sub compare_cols() 'Get the last row Dim Report As Worksheet Dim i As Integer, j As Integer Dim lastRow As Integer Set Report = Excel.Worksh
Sub compare_cols()
'Get the last row
Dim Report As Worksheet
Dim i As Integer, j As Integer
Dim lastRow As Integer
Set Report = Excel.Worksheets("test") 'You could also use Excel.ActiveSheet _
if you always want this to run on the current sheet.
lastRow = Report.UsedRange.Rows.Count
Application.ScreenUpdating = False
For i = 2 To lastRow
For j = 2 To lastRow
If Report.Cells(i, 1).Value = "COMPATIBLE" Then
If InStr(1, Report.Cells(j, 2).Value, Report.Cells(i, 1).Value, vbTextCompare) > 0
更新正在进行的工作代码:
Option Explicit
Sub compare_cols()
With Worksheets("Latency") '<-.-| reference your worksheet
With .Range("F1:G" & .UsedRange.Rows(.UsedRange.Rows.count).Row) '<--| reference its columns C:D range from row 1 down to worksheet last used row
Correct .Cells, "COMPATIBLE", "Not Determind", 2
Correct .Cells, "Determind", "COMPATIBLE", 1
End With
.AutoFilterMode = False
End With
End Sub
Sub Correct(rng As Range, val1 As String, val2 As String, colToChangeIndex As Long)
With rng '<--| reference passed range
.AutoFilter Field:=1, Criteria1:=val1 '<--| filter referenced range on its 1st column with 'val1'
.AutoFilter Field:=2, Criteria1:=val2 '<--| filter referenced range on its 2nd column with 'val2'
If Application.WorksheetFunction.Subtotal(103, .Resize(, 1)) > 1 Then '<--| if any filterd cells other than header
.Resize(.Rows.count - 1, 1).Offset(1, colToChangeIndex - 1).SpecialCells(xlCellTypeVisible).Value = "COMPATIBLE" '<--| write "COMPATIBLE" in column "D"
End If
End With
End Sub
试试这个代码
Sub CvalueAndDvalue()
Dim cValue As Range, dValue As Range
Dim Report As Worksheet
Set Report = Excel.Worksheets("test")
For i = 2 To Report.Range("C" & Rows.Count).End(xlUp).Row
Set cValue = Report.Range("C" & i)
Set dValue = Report.Range("D" & i)
If (Trim(cValue) = "COMPATIBLE" And Trim(dValue) = "NOT DETERMINED") Then
dValue = cValue
ElseIf (Trim(dValue) = "COMPATIBLE" And Trim(cValue) = "NOT DETERMINED") Then
cValue = dValue
End If
Next i
End Sub
您可以使用自动筛选:
这就是全部密码吗。。。首先,您需要关闭If和For语句。你试过什么?然后完成第二个If语句…是的,我被这个困住了。我不知道如何关闭它并完成codeadded限定范围我应该以什么格式指定范围?假设我需要签入从第1行到第100行的两个col。代码将同时检查C列和D列,直到C列的最后一行。我不明白你的意思,我应该以什么格式指定范围我不想写,不确定我只想写兼容的。代码不工作..它运行了,但我没有看到任何结果1在你的问题中,你写的兼容应该粘贴到D中,反之亦然。。现在你说了一些不同的话:请添加一个前后场景的示例,以根据注释澄清工作表和范围上的两个代码行为:检查它们是否符合你的实际工作表名称和范围:添加前面提到的场景将有助于澄清混淆。我的意思是,如果C有兼容,而D没有确定,那么兼容应该粘贴到D中,如果C没有确定,而D有兼容,然后兼容应该粘贴到C中。这里的示例-只是对Worksheetstest的一个疑问-我有一个工作簿,我需要在一个名为test的工作表中运行此代码…所以这就是此代码的作用。如果您只有一个打开的工作簿,那么它就足够了。如果您有多个工作簿,请添加正确的工作簿引用,如WorkbookMyProperterWorkbookName.Worksheetstest
Option Explicit
Sub compare_cols()
With Worksheets("test") '<-.-| reference your worksheet
With .Range("C1:D" & .UsedRange.Rows(.UsedRange.Rows.Count).Row) '<--| reference its columns C:D range from row 1 down to worksheet last used row
Correct .Cells, "COMPATIBLE", "NOT DETERMINED", 2
Correct .Cells, "NOT DETERMINED", "COMPATIBLE", 1
End With
.AutoFilterMode = False
End With
End Sub
Sub Correct(rng As Range, val1 As String, val2 As String, colToChangeIndex As Long)
With rng '<--| reference passed range
.AutoFilter Field:=1, Criteria1:=val1 '<--| filter referenced range on its 1st column with 'val1'
.AutoFilter Field:=2, Criteria1:=val2 '<--| filter referenced range on its 2nd column with 'val2'
If Application.WorksheetFunction.Subtotal(103, .Resize(, 1)) > 1 Then '<--| if any filterd cells other than header
.Resize(.Rows.Count - 1, 1).Offset(1, colToChangeIndex - 1).SpecialCells(xlCellTypeVisible).Value = "COMPATIBLE" '<--| write "COMPATIBLE" in column "D"
End If
End With
End Sub