编辑2
*好吧,正如指出的那样,我之前对我的问题的表述相当糟糕。此编辑以更直接的方式重新表述了问题,总结了背景并提供了示例数据。
样本数据
Col 1 Col 2 RESET? UNIQUE VALUES
A A yes A
C C B
D D C
A A D
B B
A A
D D
C C
请注意,为了复制我的问题,必须使用列表验证工具为第 2 列中的每个单元格创建一个下拉列表,其中列表项为 A、B、C、D。请注意,只有第 1 列和第 2 列(+ 下拉列表)是问题的一部分。
RESET?单元是潜在解决方案的一部分/我理想中解决方案的样子。
唯一值列只是为了方便创建下拉列表。(请参阅尝试部分中的公式。)
描述
我有两列,Col 1 和 Col 2。从上面的示例可以看出,两者最初是相同的。但是 Col 2 中的每个单元格都有一个下拉列表,它是 Col 1 中唯一值的列表。
到目前为止一切都很简单。问题是,实际上我的列比我的样本长得多,因此在处理完 Col 2 之后,我可能想要将其恢复/重置为其初始值(即,将其恢复为其初始值,等于 Col 1)。
问题
我需要一个按钮来“重置”包含下拉列表的列,以便其值与另一列中的值相匹配。
语境
在我的应用程序中,第 1 列用于参考,而第 2 列是反事实列,用户可以将其中的值更改为四个可能的值中的任意一个(在此示例中再次为 A、B、C 或 D),以查看这对其他列有何影响。
在对 Col 2 进行操作后,用户将希望将 Col 2 重置为其默认值,即 Col 1 中包含的值。换句话说,Col 2 的默认值取决于 Col 1。
困难与尝试
主要的困难似乎在于尝试同时应用一个公式和一个单元格的下拉列表。
我尝试IF
在单元格中使用公式,但这会删除下拉列表
我也尝试在source
列表验证设置框中使用以下公式
单元格 B2* 上的公式:
=IF(C2="yes",A2,D2:D5)
*其中的列与上面的示例数据具有直观的对应关系;即,第 1 列与 A 列相同;第 D 列是唯一值)。
但这仅仅限制了列表中可用的选项。如果我可以让这个值填充单元格而无需手动单击,那么这将是一个完美的解决方案。(在下面的第一次编辑中,我使用了 INDEX 函数来尝试实现这一点,但没有成功。)
由于我不熟悉该语言,所以我没有尝试任何 VBA 方法,但如果有成效的话,我愿意尝试。
注释和勘误表
如果我在下拉列表和列表验证方面滥用了术语,请原谅。希望它们可以互换。
原始问题
我有两列,X_1 和 X_2。假设 X_1 具有我在现实中观察到的值 - 包含 N 次观察中的四个唯一值。X_2 是一个反事实变量,这意味着我允许用户通过下拉列表将 X_2 更改为 X_1 的四个值中的任何一个。这对我用来预测某些 Y 的函数有后续影响。
问题是 N 是一个非常大的数字,因此手动重置 X_2 会花费太长时间。
我正在寻找的是一个可以根据 X_1 中的相应值重置 X_2 中的列表的按钮。
编辑:
如屏幕截图所示,当重置单元格(即 D2)==“是”时,下面的公式将下拉列表限制为仅一个值;对应于 X_1;否则它具有 X_1 的所有四个唯一值,包含在 G2:G5 中的列表中。
这几乎就是我想要的,但问题是用户仍然必须选择受限制的值。我目前正在寻找一种方法来用 lis 的第一个值填充单元格(因此使用 INDEX 函数),但到目前为止我还没有成功。
公式:
=IF($D$2="yes";INDEX($A$2;1);$G$2:$G$5)
选定单元格中的列表仅包含“A”,因为 RESET 设置为“是”;否则列表将包含 A、B、C、D。问题是“A”不会自动填充。
答案1
事实证明,解决方案相当简单。
Private Sub CommandButton1_Click()
Range("B:B").Value = Range("A:A").Value
End Sub
其中 A 和 B 分别对应于问题中的 X_1 和 X_2。我所包含的 RESET“按钮”可以由 CommandButton 处理,而我并不知道它的存在。
明确一下这个是干什么的:
- B 是带有下拉列表的列,我可以随心所欲地摆弄 B
- 完成后,我可以按下按钮,瞧!B 的所有值都恢复为默认值,即等于 A。
我的问题显然对于这样一个简单的任务来说太复杂了,但说实话,我对 CommandButton 的默认功能完全符合我的需求感到非常惊讶(特别是它不会在使用后移除/删除我的下拉列表)。也许这就是回归旨在最大限度降低新用户入门成本的软件的美妙之处!