EXCEL,如果A1=A2,B1=B2。C列的行数随A1变化,该行单元格的内容随B1变化。如何做到,用代码。

如题所述

无需用代码,使用公式即可,方法如下:

在C1单元格输入“=IF(ROW()<=A$1,IF(AND(A$2=A$1,B$2=B$1),B$1,""),"")”,向下复制。

当A1=A2,B1=B2时,C列出现A1个B1,否则,C列为空。

追问

我的意思是,A1=A2,B1=B2。如果A2=5,B2=任意字母,C列根据A1,B1变化,结果是C5=B1;如果A2=1,同理,C1=B1。同时,C5维持不变

追答

意图描述不清晰。
是想时时更新数据,还是保留历史变化?

追问

保留历史变化

追答

感觉不到这个有什么用处,只有用宏达到这个目的。

1、新建下列宏

Public Sub 更新()
On Error Resume Next
With Sheet1 '假设数据贮存在sheet1(是codename,不是工作表标签),如果工作表标签为sheet1,请修改代码为With Sheets("Sheet1") 
If .Cells(1, 1) = .Cells(2, 1) And .Cells(1, 2) = .Cells(2, 2) Then .Cells(.Cells(2, 1), 3) = .Cells(2, 2)
End With
End Sub

2、将工作表的change指向宏“更新”

Private Sub Worksheet_Change(ByVal Target As Range)

更新

End Sub

附件是一个例子,打开时请启用宏。

追问

追答

Private Sub Worksheet_Change(ByVal Target As Range)
If .Cells(1, 1) = .Cells(2, 1) And .Cells(1, 2) = .Cells(2, 2) Then .Cells(.Cells(2, 1), 3) = .Cells(2, 2)

End Sub

追问

无效或不合格的引用

追答
Private Sub Worksheet_Change(ByVal Target As Range)
With ActiveSheet
If .Cells(1, 1) = .Cells(2, 1) And .Cells(1, 2) = .Cells(2, 2) Then .Cells(.Cells(2, 1), 3) = .Cells(2, 2)
End with 
End Sub

温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-07-02
为什么非得用代码呢?追问

我的意思是,A1=A2,B1=B2。如果A2=5,B2=任意字母,C列根据A1,B1变化,结果是C5=B1;如果A2=1,同理,C1=B1。同时,C5维持不变。公式怎么写?