如果列中存在数据,则更新单元格

时间:2014-02-20 06:28:20

标签: excel excel-vba excel-formula validation vba

假设有两个工作表:工作表1,工作表2

工作表1有一个名为'Number'

的列

工作表2也是一个名为'Number'

的列

现在我在工作表2的“数字”栏中输入一个数字。

我现在需要在工作表1的“数字”列中输入的数字i与工作表1的“数字”列匹配。

如果匹配,则允许在工作表2上输入,否则抛出错误'Invalid Data'

  • 工作表2的“数字”列不应允许重复。

你们能为我解决同样的问题:)

2 个答案:

答案 0 :(得分:2)

无需使用VBA。您可以使用 Data validation:

<强> Sheet 1中:

enter image description here

<强> Sheet 2中:

sheet2 中选择整个列“Numbers”。转到数据 - &gt;数据验证。选择自定义并输入公式:

=AND(ISNUMBER(MATCH($A1,Sheet1!$A:$A,0)),COUNTIF($A:$A,$A1)<2)

sheet1 中“Numbers”列的Sheet1!$A:$A地址。 $A:$A - sheet2 中“Numbers”列的地址。

  • 部分ISNUMBER(MATCH($A1,Sheet1!$A:$A,0))仅允许输入值 来自sheet1。
  • 部分COUNTIF($A:$A,$A1)<2不允许重复

enter image description here

选择“错误警报”标签,然后输入错误消息。

enter image description here

完成!

答案 1 :(得分:1)

这些方面应该有效:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim TarColumn as Integer 'stores the column number of the modified cell
    TarColumn = Target.Column 'sets the column number

    If TarColumn = 1 Then 'replace 1 with the column number of your Number Column
        Dim RowCountA as Long 'stores the amount of rows in your worksheets
        Dim RowCountB as Long
        Dim a, b 'will store the numbers from the number columns

        RowCountA = Worksheets("Sheet1").Cells(Rows.Count,1).End(xlUp).Row 'find the last row of data
        RowCountB = Worksheets("Sheet2").Cells(Rows.Count,1).End(xlUp).Row
        a = Worksheets("Sheet1").Cells(1,1).Resize(RowCountA,1) 'copys the numbers into the arrays
        b = Worksheets("Sheet2").Cells(1,1).Resize(RowCountB,1)

        For i = 0 To RowCountA - 1 'checks to see if it is in the first sheet
            If Target.Value = a(i,1) then
                MsgBox("Invalid Data")
                Target.Value = ""
                Exit Sub
            End If
        Next

        For i = 0 to RowCountB - 2 'ensures no duplication in the second sheet
            If Target.Value = b(i,1) then
                MsgBox("Invalid Data")
                Target.Value = ""
                Exit Sub
            End If
        Next
    End If
End Sub

您可能需要修改.cells(1,1)以适合您的代码,具体取决于表格中的标题和位置。