Google表格有条件地合并,清除范围内的所有单元格,循环。VBA转JS

有样学样

我正在将VBA转换为Google Sheets脚本,但是在如何绕过单列障碍中的所有行的循环方面感到迷茫。

我有一列,其中包含#OrdernNumber,状态代码名字有时还包括姓氏),后跟一个空单元格我需要将“名字”和“姓氏”组合到“名字”单元格中,然后清除下面的“姓氏”单元格。下面的屏幕快照对此进行了说明:

说明性屏幕截图

屏幕截图中的C和D列显示了我用来构建原始VBA代码的模式:

Sub WorkingCombineAndClearLoop()

Dim Rngcell                 As Range

For Each Rngcell In Range("B1:B100")
  'if first character is #
  If left(Rngcell.Value, 1) <> "#" _                    
  'and if first character is -
  And left(Rngcell.Value, 1) <> "-" _
  'and if cell is not blank then
  And Rngcell.Value <> "" Then                          
        'combine left cell
        Rngcell.Value = Rngcell.Offset(0, -1).Value _   
        'with bottom left cell
        & " " & Rngcell.Offset(1, -1).Value
        'then clear below cell
        Rngcell.Offset(1, 0).ClearContents
  End If
Next

End Sub

以下是我带注释的JavaScript代码。因为我还无法使循环正常工作,所以我不得不对代码逻辑进行一些更改:

    function workingCombineAndClearNoLoop() {

    //get active spreadsheet, sheet
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var s = ss.getActiveSheet();
    //determine row count
    var numRows = SpreadsheetApp.getActiveSheet().getRange("A:A").getLastRow();

    //if A1's first character is not # AND
    if (s.getRange('A1').getValue().substring(0,1) === "#" && 
        //if A2's first character is not ' AND
        s.getRange('A1').offset(1, 0).getValue().substring(0,1) === "-" ) {
        //Set the value of A2 to...
        s.getRange('A1').offset(2, 1).setValue(
        //A2 cell content + " " + A2 cell content (concatenate)
        s.getRange('A1').offset(2, 1).getValue() + " " +
        s.getRange('A1').offset(3, 1).getValue())
        //and then clear A2
        s.getRange('A1').offset(3, 1).clearContent()
    };
    }

以下是一切崩溃的地方-循环。在此代码的最终副本中,我只保留了基本内容:

function notWorkingCombineAndClearWithLoop() {

var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = ss.getActiveSheet();
var numRows = SpreadsheetApp.getActiveSheet().getRange("A:A").getLastRow();

//loop
//how to replace 'A1' with A[i]?, so that it loops through all cells in the column?
for (var i = 0; i < 25; i++) {
  if (s.getRange('A1').getValue().substring(0,1) === "#" && 
      s.getRange('A1').offset(1, 0).getValue().substring(0,1) === "-" ) {
        s.getRange('A1').offset(2, 1).setValue(
        s.getRange('A1').offset(2, 1).getValue() + " " +
        s.getRange('A1').offset(3, 1).getValue())
        s.getRange('A1').offset(3, 1).clearContent()
        }
  };
}

注意:我已经完成了Codacademy的JS课程和一些Google Sheets教程,并且在VBA方面很出色,但是我仍然对此充满热情。我尝试遵循许多循环示例,使用变量代替A1。因为找不到任何可行的解决方案,所以我将无法正常工作的A1留作简单的占位符。

鲁本

简短答案

//how to replace 'A1' with A[i]?, so that it loops through all cells
//in the column?

使用

'A' + i

解释

getRange()有几种形式,其中一种使用A1表示法引用。与问题中包含的Google Apps脚本一致使用。

例子

以下代码的主要目的是展示如何使用A1表示法循环浏览Google Apps脚本中列的单元格。


索引中有一些错误。他们已得到纠正。还更改了第四行以减少要循环通过的行,并增加了几行。


function editedNotWorkingCombineAndClearWithLoop() {

   var ss = SpreadsheetApp.getActiveSpreadsheet();
   var s = ss.getActiveSheet();
   var numRows = SpreadsheetApp.getActiveSheet().getLastRow();
   /* 
    * use variables to reduce number of calls to Apps Script services
    * and improve readability
    */ 
   var range, substring1, substring2;

   //loop
   for (var i = 1; i <= numRows; i++) {
      //Here is the magic        
      range = s.getRange('A' + i );
      substring1 = range.getValue().substring(0,1); 
      substring2 = range.offset(1, 0).getValue().substring(0,1); 
      if ( substring1 === '#' && substring2 === '-' ) {
        range.offset(0, 1).setValue(range.getValue()); 
        range.offset(1, 1).setValue(range.offset(1, 0).getValue());      
         range.offset(2, 1).setValue(
           range.offset(2, 0).getValue() 
           + " "
           + range.offset(3, 0).getValue()
         )
      }
   }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

循环以有条件地格式化多个工作表范围内的单元格

来自分类Dev

EXCEL VBA 循环遍历单元格并有条件地连接

来自分类Dev

如何根据之前的单元格有条件地更改Google表格中单元格的颜色?

来自分类Dev

VBA脚本有条件地设置级联单元格中的特定文本

来自分类Dev

在Google表格中有条件的多个单元格中查找重复项

来自分类Dev

如果仅填充范围内的所有单元格,请停止执行直到循环

来自分类Dev

Excel:根据其他列中的值有条件地选择单元格范围

来自分类Dev

如何有条件地通过范围内的条件

来自分类Dev

如果 A1 中的查询 = #REF! , 清除 A2:B+lastrow 范围内的所有单元格

来自分类Dev

如何使用CSS和jQuery根据表格单元格的值有条件地悬停地突出显示表格行?

来自分类Dev

VBA循环合并特定范围内的单元格

来自分类Dev

在数据框中有条件地在行范围内替换值

来自分类Dev

Angular-ui-grid-如何根据单元格的值有条件地显示单元格模板

来自分类Dev

如何根据单元格值有条件地对ReactJs物料表单元格进行样式设置?

来自分类Dev

Angular-ui-grid-如何根据单元格的值有条件地显示单元格模板

来自分类Dev

有条件地更改特定单元格的背景颜色

来自分类Dev

如何有条件地设置物料表单元格的背景色

来自分类Dev

有条件地更改Dash数据表单元格的颜色

来自分类Dev

根据不同单元格中的值有条件地更改字体颜色

来自分类Dev

Excel-根据是TRUE还是FALSE有条件地设置单元格的格式

来自分类Dev

有条件地从上面的单元格填充空白行

来自分类Dev

在熊猫中有条件地选择下面的单元格

来自分类Dev

Excel VBA如何选择动态范围内所有单元格的颜色索引不为0

来自分类Dev

VBA在继续下一步之前检查范围内的所有单元格是否为空

来自分类Dev

如何有条件地用VBA连接范围?

来自分类Dev

如何有条件地格式化表格中的所有行,以根据单元格值显示不同的颜色

来自分类Dev

查找具有特定字符串值的范围内的所有单元格

来自分类Dev

有条件地从嵌套for循环退出-VBA

来自分类Dev

使用VBA查找/替换选定范围内具有零值的单元格(公式单元格)

Related 相关文章

  1. 1

    循环以有条件地格式化多个工作表范围内的单元格

  2. 2

    EXCEL VBA 循环遍历单元格并有条件地连接

  3. 3

    如何根据之前的单元格有条件地更改Google表格中单元格的颜色?

  4. 4

    VBA脚本有条件地设置级联单元格中的特定文本

  5. 5

    在Google表格中有条件的多个单元格中查找重复项

  6. 6

    如果仅填充范围内的所有单元格,请停止执行直到循环

  7. 7

    Excel:根据其他列中的值有条件地选择单元格范围

  8. 8

    如何有条件地通过范围内的条件

  9. 9

    如果 A1 中的查询 = #REF! , 清除 A2:B+lastrow 范围内的所有单元格

  10. 10

    如何使用CSS和jQuery根据表格单元格的值有条件地悬停地突出显示表格行?

  11. 11

    VBA循环合并特定范围内的单元格

  12. 12

    在数据框中有条件地在行范围内替换值

  13. 13

    Angular-ui-grid-如何根据单元格的值有条件地显示单元格模板

  14. 14

    如何根据单元格值有条件地对ReactJs物料表单元格进行样式设置?

  15. 15

    Angular-ui-grid-如何根据单元格的值有条件地显示单元格模板

  16. 16

    有条件地更改特定单元格的背景颜色

  17. 17

    如何有条件地设置物料表单元格的背景色

  18. 18

    有条件地更改Dash数据表单元格的颜色

  19. 19

    根据不同单元格中的值有条件地更改字体颜色

  20. 20

    Excel-根据是TRUE还是FALSE有条件地设置单元格的格式

  21. 21

    有条件地从上面的单元格填充空白行

  22. 22

    在熊猫中有条件地选择下面的单元格

  23. 23

    Excel VBA如何选择动态范围内所有单元格的颜色索引不为0

  24. 24

    VBA在继续下一步之前检查范围内的所有单元格是否为空

  25. 25

    如何有条件地用VBA连接范围?

  26. 26

    如何有条件地格式化表格中的所有行,以根据单元格值显示不同的颜色

  27. 27

    查找具有特定字符串值的范围内的所有单元格

  28. 28

    有条件地从嵌套for循环退出-VBA

  29. 29

    使用VBA查找/替换选定范围内具有零值的单元格(公式单元格)

热门标签

归档