设想
列显示基于从其他 2 列数字中随机选择的J
列数据,即:C
J1: =INDIRECT("C"&INDIRECT("F"&N1))
J2: =INDIRECT("C"&INDIRECT("F"&N2))
J3: =INDIRECT("C"&INDIRECT("F"&N3))
...
在哪里:
- 列
C
是要放置的数据J1
,,,等J2
。J3
- 列
F
是随机生成器的结果(1 到 122 之间的数字) - 列
N
是一个连续的固定数字,基于列中包含数据的单元格的数量C
(通常在 1 到 122 之间)。
问题
如果J2
= J1
,那么基本上我想执行“计算完整”(或类似函数),直到它们不相等,然后继续检查该列J
直到数组末尾。例如:如果J1=1
、J2=3
、J3=2
、J4=3
和,这是可以接受的,但是如果、、、和,这是不可接受的,因为&和&是重复的。J5=1
J6=2
J1=1
J2=1
J3=3
J4=4
J5=3
J6=3
J1
J2
J5
J6
类似地,列I
显示来自列的数据,B
例如:=INDIRECT("B"&INDIRECT("F"&N1))
等,但如果我可以让电子表格根据列中的重复项自动重新计算J
,则列I
将遵循列,J
因为I
&都使用&J
中的值分别从列和复制数据。N
F
B
C
到目前为止,我尝试过的所有方法都会导致循环引用错误。我可以手动“计算完整”,但仍然会得到重复项(垂直于列J
),这是不可接受的。
列B
包含歌曲标题,且没有重复。列C
包含表演者姓名,列中有很多重复项,C
因为乐队只有 4 名歌手,我更希望歌手不必连续唱两首歌。
有什么建议么?
注意:如果答案需要使用 VBA 代码,我将需要很多帮助!:o)
更多信息:
请参阅屏幕截图https://i.stack.imgur.com/eoJnf.jpg
列说明:
列A
是(手动)歌曲计数器,用于指示列表中有多少首歌曲
列B
包含歌曲标题以及要播放该歌曲的调(括号中)
列C
表示演唱这首歌的人。注意:列中的“Inst.”C
表示这首歌是器乐曲,没有人声。
列D
表示歌曲的流派,其中“2”代表 2-Step 类型的歌曲。其他流派表示为“P”代表波尔卡舞曲,“W”代表华尔兹舞曲等。列B
和按歌曲标题(列)然后流派(列)C
排序B
D
列E
是随机数生成器:=Rand()
ColumnF
根据 Column 生成数字E
,并根据每种类型的歌曲数量限制数字的范围: =RANK(E1,E$1:E$53
注:2-Step 类型歌曲一共有 53 首。
列为G
垂直间隔(无数据)
ColumnH
是另一个手动计数器,用于跟踪每套歌曲的数量。通常每晚有 4 套歌曲,每套歌曲可包含 8-13 首歌曲,具体取决于歌曲时长是 45 分钟还是 1 小时。
列是根据随机数生成器(列)I
从列复制的歌曲标题和列中的“固定”数字:B
E
N
=INDIRECT("B"&INDIRECT("F"&N2))
Column是根据随机数生成器(Column )J
从 Column 复制的歌手/表演者,并且 Column 中具有相同的固定数字:C
E
N
=INDIRECT("C"&INDIRECT("F"&N2))
列K
表示每首歌曲的流派,并根据流派的某种“组合”手动确定。屏幕截图示例表明,组合为 2 首 2 步舞曲,接着是一首华尔兹,接着是 2 首 2 步舞曲,然后是一首慢歌,等等。我们作为乐队根据过去在某些场地演出的经验确定流派组合。
列L
是另一个间隔列 - 没有数据
列M
是 列 的颜色编码副本,K
有助于跟踪由 列N
和 列中的数字确定的流派组合F
。
注意:每次演出前都会打印H
、、I
和J
栏K
——乐队中每个人都会得到一份。
列N
是流派混合模板,其颜色编码与列相同M
。红色 = 2-Step、蓝色 = 华尔兹、粉色 = 波尔卡、绿色 = 慢速、黑色 = 摇滚。数字是手动输入的,按顺序从主歌曲列表(列B
、C
& D
)上特定流派的第一首歌曲开始,到该流派的最后一首歌曲。当前流派布局如下:2-Step 歌曲范围从 1-53,波尔卡歌曲范围从 54-68,摇滚歌曲范围从 69-90,慢速歌曲范围从 91-111,华尔兹范围从 112-120。
有 4 列未出现在屏幕截图中,它们跟踪第一个和最后一个类型编号,并且与我最初的问题不是特别相关。
如您在屏幕截图中看到的,“Jerry”出现在J2
&中,J3
并再次出现在和 &中。另外,请注意,“Phil”出现在&中。这里的目标是尽可能消除“行重复”。Jerry 唱了多达 60 首不同类型的歌曲,Chuck 唱了多达 30 首,Phil 唱了 20 首,因此每位表演者应该有足够数量的歌曲,这样就不会出现重复的问题。J7
J8
J9
J13
J14
我意识到我原帖中提供的信息不够充分,但希望这些额外的信息能帮助我们找到解决问题的方法。如果我需要提供进一步的解释,请告诉我。
答案1
您可以将此公式插入另一列(在我的情况下,我使用了 K 列)。如果该值与前一个值相同,它会将该值加一,除非前一个值是最大值,否则它会返回一。在 K1 中,只需使用=J1
,然后在 K2 中输入此公式并自动填充。MAX_VALUE
用实际的最大值替换。
=IF(J2=K1,IF(J2=MAX_VALUE,1,J2+1),J2)
下面是一个示例,假设最大值为 10:
J K
2 2
6 6
6 7
7 8
7 7
10 10
10 1
10 10