Answers:
如果可以使用VBA,则只需单击一下按钮即可获得解决方案。提出的解决方案主要使用很少支持VBA的公式,这是一个两步解决方案。
由于您正在使用数据透视表,因此通过交换数据透视表中的行和列,即以年为行,客户为列,可以更轻松地查看数据格式。
将工作簿另存为xlsm(启用宏的Excel工作簿)在表所在的表中,按ALT + F11打开VBA编辑器。从“插入”菜单中插入一个模块,并将以下代码粘贴到其中。保存代码和工作簿。
Function TEXTJOIN(delimiter As String, ignore_empty As Boolean, ParamArray cell_ar() As Variant)
For Each cellrng In cell_ar
For Each cell In cellrng
If ignore_empty = False Then
result = result & cell & delimiter
Else
If cell <> "" Then
result = result & cell & delimiter
End If
End If
Next cell
Next cellrng
TEXTJOIN = Left(result, Len(result) - Len(delimiter))
End Function
这是一个TEXTJOIN函数。这在Office 365订阅中可用,但在其他版本中不可用。VBA代码继承自以下文章。
来源 https://www.get-digital-help.com/2016/06/07/textjoin-function/
您需要创建一个类似的表,其中将1转换为OLD&NEW,如本示例中上图第9行中所示。
单元格B9中的公式
=IF(ISBLANK(B5),"",IF(ISERROR(MATCH(B5,B4,0)),"NEW","OLD"))
单元格B10中的公式
=IF(ISBLANK(B6),"",IF(ISERROR(MATCH(B6,B4:B5,0)),"NEW","OLD"))
单元格B11中的公式
=IF(ISBLANK(B7),"",IF(ISERROR(MATCH(B7,B4:B6,0)),"NEW","OLD"))
现在,将三个公式拖到表的整个长度上。相关的您的1不会翻译成OLD&NEW。这是第一步。
在下面创建一个Years表,并在OLD&NEW两列中创建
B15中的公式
=CONCATENATE(COUNTIF(B9:I9,"OLD"),"(",TEXTJOIN(",",TRUE,IF(B9:I9="OLD",$B$3:$I$3,"")),")")
按CTRL + SHIFT + ENTER创建一个数组公式。现在,您将看到该公式用大括号括起来,并根据需要在该单元格中显示当年的预期结果。向下拖动此公式,直到出现所需的年数。
类似地,将以下数组公式放在C15中
=CONCATENATE(COUNTIF(B9:I9,"NEW"),"(",TEXTJOIN(",",TRUE,IF(B9:I9="NEW",$B$3:$I$3,"")),")")
并将其向下拖动。
这是一个两步过程。为了获得更好的版本,可以选择完整的VBA代码,只需单击一个按钮即可实现此目的。
由于自定义创建了TEXTJOIN函数VBA代码,因此该解决方案仅在此工作簿中有效。但是,如果您有Office 365订阅,则它应在Excel 2016中无缝运行。
也许条件格式可以在这里完成工作。在下表中,新客户为绿色,重复客户为蓝色。
要成为新客户,该单元格必须为1,并且所有左侧的单元格都必须为空白;要成为“回头客”客户,该单元格必须为1,并且任何左侧的单元格都必须为1。
因此,简单的AND()函数可以区分这些。
要为新客户设置格式,请选择C2:F10,然后从“格式”菜单中选择“条件格式...”。添加一个新规则,然后选择“经典”作为样式。从下拉菜单中选择“使用公式...”,选择一种格式样式,然后在框中输入以下公式:
=AND(SUM($B2:B2)=0,C2=1)
对于回头客,添加另一个规则并使用以下公式:
=AND(SUM($B2:B2)>0,C2=1)
注意:执行此操作的过程可能会有所不同,具体取决于您的Excel版本。关键是找到允许您使用公式来设置格式的对话框。
如果您不希望使用条件格式,则可以在工作表的另一部分使用类似的公式:
=IF(AND(SUM($B2:B2)=0,C2=1),"New","")
=IF(AND(SUM($B2:B2)>0,C2=1),"Repeat","")
向右和向下填充这些将标识“新客户”和“重复客户”。
希望对您有所帮助,也感谢您清楚地解释了您要做什么。我记得您曾经提过的问题,并添加了一个小表,其中显示了哪些客户是新客户,哪些客户是回头客,这一点就更加清楚了。
C2=1
为C2>0
。