答案1
借助宏,这相当容易做到。我相信用公式也能做到,但这超出了我的时间。
因此,worksheet_change 宏,我将借用 90%先前的答案。
因此,在第一个工作表的代码中(右键单击工作表选项卡并选择显示代码),我输入了以下内容:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim inputRange As Range, entry As Range, outSheet As Worksheet, oCN As Long, i As Long, outCol As String
Set inputRange = ActiveSheet.Range("A1:C6")
Set outSheet = Worksheets(2)
outCol = "A"
oCN = Columns(outCol).Column
If Not Application.Intersect(Range(Target.Address), inputRange) Is Nothing Then
outSheet.Range(outCol & "2:" & outCol & outSheet.Cells(Rows.Count, oCN).End(xlUp).Offset(1, 0).Row).Value = ""
For Each entry In inputRange
'--- This is where it's new---
If UCase(entry.Value) = "X" Then
For i = 1 To entry.Offset(0, 1).Value
outSheet.Range(outCol & outSheet.Cells(Rows.Count, oCN).End(xlUp).Offset(1, 0).Row).Value = entry.Offset(0, -1).Value
Next i
End If
'--- And that's all really ---
Next entry
End If
End Sub
因此,流程应该是,将其与列表一起放入工作表中,并进行inputRange
相应更改。然后将 outSheet 和 outCol 设置为要打印的位置(现在默认为工作表编号 2,单元格 A2 及以下)。
在这方面还有改进的空间,既可以实现更动态的代码,也可以实现更高效的代码。还有错误处理等,但这应该是一个好的开始。