【问题标题】:EDIT - How to copy paste data validation with change in range?编辑 - 如何复制粘贴数据验证并更改范围?
【发布时间】:2019-09-27 09:59:56
【问题描述】:

所以我根据旁边单元格中的数据验证做了一个动态数据验证下拉列表。问题是,当我将此数据验证复制到 1000 行时,我希望它根据行更改范围。我知道它必须手动完成,但想知道它是否可以自动化?

所以基本上我所拥有的是 A1 是您选择的服务,然后 B1 让您可以从我创建的公式中选择子服务,这基本上是

=TRANSPOSE(SI(ESTVIDE(Prestations!$C7);;SI(Prestations!$C7='Données'!$B$28;INDIRECT("Depose");SI(Prestations!$C7='Données'!$E$28;INDIRECT("Sols");SI(Prestations!$C7='Données'!$H$28;INDIRECT("Cloisons");SI(Prestations!$C7='Données'!$K$28;INDIRECT("Peinture");SI(Prestations!$C7='Données'!$N$28;INDIRECT("Plafonds");SI(Prestations!$C7='Données'!$Q$28;INDIRECT("Plomberie_CVC");SI(Prestations!$C7='Données'!$T$28;INDIRECT("Autres");SI(Prestations!$C7='Données'!$W$28;INDIRECT("Cas_Specifique");"Prestation n'existe pas"))))))))))

代码是法语的,对此感到抱歉。所以基本上 SI=IF, ESTVIDE=ISBLANK 和 ,s 是 ;s。 Prestations!$C7 是服务,所以基本上我们的“A1”,然后包含在 INDIRECTS 中的是子服务的命名范围。 'Données'!B28:W28 基本上是我比较 A1 下拉列表中的服务名称。

然后我只是复制粘贴了超过 1000 行。所以这基本上是我们的E1,然后复制到E1000。在数据验证中,我只是将范围设置为 E1:Z1。我使用了转置,否则数据会与下面复制的公式发生冲突。

现在我需要的是 A2 以后的数据验证。当然,当我复制粘贴数据验证时,它采用相同的范围 E1:Z1。可以修改成E2:Z2、E3:Z3等吗?

编辑:这里是文档Prestation_Test的链接

【问题讨论】:

  • 嘿,再试一次,让我知道它是否有效
  • 有效...不幸的是,您所询问的问题只能手动解决(例如,逐行设置)。另一种方法是研究脚本世界 - 也许有一些方法可以通过编程方式改变它
  • 我明白了。我会调查一下。感谢您的帮助!
  • 这可以在 Apps Scripts 中完成,但我不确定这里的问题。您正在尝试将 E1:Z1 的数据验证复制到 E1000:Z1000 之前的所有行,对吗?
  • 嘿实际上基本上没有每一行我希望数据验证来改变范围。所以基本上在第一行我希望数据验证是 E1:Z1 和第二行 E2:Z2 等等

标签: validation google-apps-script google-sheets scripting


【解决方案1】:

编辑 - 请注意,此答案是在问题仍被标记为“Excel”时发布的。

好的。如果我理解正确,一种方法是使用当前单元格行定义一个动态命名范围。

使用公式定义一个名为“DataValidation”的命名范围:

=INDEX(Sheet1!$E:$E,ROW()):INDEX(Sheet1!$Z:$Z,ROW())

您需要将“Sheet1”更改为包含 E1:Z1000 范围的工作表的名称(从您的问题中不清楚它在哪个工作表上)。

然后就可以进入了

=DataValidation 

进入单元格的数据验证并向下拖动该单元格。然后,数据验证将基于当前行的 E 到 Z 列中的内容。


编辑 - 如何定义命名范围

  1. 转到“公式”功能区。
  2. 点击“名称管理器”。
  3. 点击“新建”。
  4. 输入“DataValidation”作为名称。
  5. 将上述公式(更改工作表名称)输入到 “指:”框。
  6. 点击“确定”。
  7. 点击“关闭”。

请看下图:

【讨论】:

  • 嘿,想弄清楚如何将公式作为命名范围?以前从来没有做过,也许你可以指导我?非常感谢!
  • 您好,感谢您的快速回复。然而,我在谷歌表格上,无法真正弄清楚如何在那里执行此操作。
  • 哦。道歉。该问题最初是用 Excel 标记的,我没有注意到您需要谷歌表格解决方案。抱歉,我认为我对 Google 表格不够熟悉,无法提供帮助。
  • 那是我的错,我很抱歉。不过感谢您的帮助!
【解决方案2】:

我想出了如何通过 Google Apps 脚本做到这一点。如果有人遇到这样的问题,我想把解决方案放在那里:

所以我所做的是我使用 for 函数更改了我必须应用数据验证的范围和数据验证本身的范围的行号。

function DataValidation() {



  for (var rowC = 1; rowC < 994; rowC++) {

    var range = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("DV").getRange(rowC, 1, 1, 30);
    var validation = SpreadsheetApp.newDataValidation().requireValueInRange(range, true).build();
    SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getRange(rowC+5, 4).setDataValidation(validation);

  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-02
    • 1970-01-01
    • 2019-09-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多