Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 从所有表中获取所有值_Excel_Google Sheets - Fatal编程技术网

Excel 从所有表中获取所有值

Excel 从所有表中获取所有值,excel,google-sheets,Excel,Google Sheets,我不能很好地问我的问题。我在这里放了一个表,我想在谷歌工作表,excel或其他创建。有人能帮我吗 街道名称 数 马拉班僵局 9 马拉班僵局 普埃克僵局 僵局双峰 勒弗尔斯街 普埃克僵局 1之二 9 1之二 6. 26 勒弗尔斯街 26 5. 2之二 2. 28 僵局双峰 6. 8. 1. 僵局双峰 2. 8之二 马拉班僵局 5. 普埃克僵局 2之二 马拉班僵局 8. 马拉班僵局 8之二 普埃克僵局 1. 勒弗尔斯街 28 这个VBA脚本可以实现这一点。假设您的数据从A1中的Sheet1开始 子变

我不能很好地问我的问题。我在这里放了一个表,我想在谷歌工作表,excel或其他创建。有人能帮我吗

街道名称 数 马拉班僵局 9 马拉班僵局 普埃克僵局 僵局双峰 勒弗尔斯街 普埃克僵局 1之二 9 1之二 6. 26 勒弗尔斯街 26 5. 2之二 2. 28 僵局双峰 6. 8. 1. 僵局双峰 2. 8之二 马拉班僵局 5. 普埃克僵局 2之二 马拉班僵局 8. 马拉班僵局 8之二 普埃克僵局 1. 勒弗尔斯街 28
这个VBA脚本可以实现这一点。假设您的数据从
A1
中的
Sheet1
开始

子变换()
将ws设置为工作表:设置ws=ThisWorkbook.Sheets(“Sheet1”)
将第一列设置为字符串:first\u col=“A”
将ws2设置为工作表
尺寸c_最后作为范围
调光范围
作为对象的Dim dict
Set dict=CreateObject(“Scripting.Dictionary”)
变暗键作为变量
Dim arr()作为字符串
设置c_last=ws.Cells(ws.Rows.Count,first_col).End(xlUp)
对于ws.范围内的每个c(第一列和第二列,最后一列)
如果存在指令(微调(c)),则
dict.Item(Trim(c))=dict.Item(Trim(c))&“$”和CStr(c.Offset(,1))
其他的
指令项(微调(c))=CStr(c.偏移量(,1))
如果结束
下一个
设置ws2=ws.Parent.Sheets.Add(之后:=ws.Parent.Worksheets(ws.Parent.Worksheets.Count))
设置c=ws2.范围(“A1”)
对于dict.Keys()中的每个键
c=键
arr=拆分(dict.Item(键),“$”)
c、 偏移量(1).调整大小(UBound(arr)+1)=应用程序.转置(arr)
设置c=c.偏移量(,1)
下一个
端接头
之前:

之后:

这应该适用于谷歌应用程序脚本:

function myFunction() {
  // initialize
  var ss = SpreadsheetApp.getActiveSheet();
  var lr = ss.getLastRow();
  var values = ss.getRange(2,1,lr-1,2).getValues();
  console.log(values.sort());
  var result = [];
  console.log(result);
  var prevCol = '';

  // populate array
  for (i = 0; i < values.length; i++) {
    if (values[i][0] != prevCol) {
      result.push([values[i][0], values[i][1]]);
    }
    else {
      result[result.length-1].push(values[i][1]);
    }
    prevCol = values[i][0];
  }
  console.log(result);

  // transpose array
  var newArray = [];
  for(var i = 0; i < result.length; i++){
      newArray.push([]);
  };

  for(var i = 0; i < result.length; i++){
    for(var j = 0; j < result.length; j++){
      newArray[j].push(result[i][j]);
    };
  };

  // write to range

  var dest = ss.getRange(2,4,newArray[0].length,newArray.length);
  dest.setValues(newArray);
}

函数myFunction(){
//初始化
var ss=SpreadsheetApp.getActiveSheet();
var lr=ss.getLastRow();
var values=ss.getRange(2,1,lr-1,2).getValues();
console.log(values.sort());
var结果=[];
控制台日志(结果);
var-prevCol='';
//填充数组
对于(i=0;i
理解这个问题有点困难,但我认为您正在尝试将2列表转换为包含数据的多列表

可以使用数组公式执行此操作。首先,将所有不同的街道名称复制到一行中。在下图中,这是在单元格F1:I1中完成的

单元格F2公式:

{=IFERROR(INDEX($B$2:$B$9999, SMALL(IF($F$1=$A$2:$A$9999, ROW($A$2:$A$9999)-ROW($A$2)+1), ROW(1:1))),"")}
您需要按CTRL+SHIFT+ENTER键来获取这些花括号,以使其成为数组公式。将其向下拖动到所需的位置,远远超出预期的行数。如果找不到更多的结果,它将被包装在IFERROR处理程序中以显示空白

其他列的公式类似。您只需将引用从$F$1更改为$G$1,依此类推,并重复数组技巧

此外,如果有9999行以上,只需调整公式中的结束行号即可


在谷歌表单中,假设您的原始标题“街道名称”和“编号”在A1和B1中(数据在A2:B中),则将其放在D2中:

(2:A,A 2:A“))))、到(U)文(拆分(拆分)(拆分)(拆分)(拆分(拆分)(拆分)(拆分)(拆分(拆分)(拆分)(拆分)(拆分(拆分)(拆分)(拆分(拆分)(拆分)(拆分(拆分)(拆分)(拆分)(拆分(拆分)(拆分)(拆分)(拆分)(拆分(拆分)(拆分)(拆分)(拆分)(拆分)(拆分)(拆分)(拆分)(拆分)(拆分)(拆分)(拆分)(拆分)(拆分)(拆分)(拆分)(拆分)(拆分)(拆分)(拆分)(拆分)(拆分)(拆分)(拆分)(拆分)(拆分)(拆分)(拆分)(拆分)(拆分)(拆分)(拆分)(拆分)(拆分)(拆分)(拆分)(拆分)(拆分)(拆分)(拆分)(拆分)(拆分)(拆分)(拆分)(拆分)(拆分)(拆分)(拆分)(拆分)(拆分)(拆分)(拆分)(拆分)(拆分)(拆分)(拆分)(拆分)(拆分)(拆分)(拆分)(拆分)(拆分)(拆分)(拆分)(拆分)(拆分)(拆分)(拆分)(拆分)(拆分)(拆分)(拆分)(拆分)(拆分)(拆分)(拆分)(拆分)(拆分)(拆分)(拆分)(拆分)(拆分)())


这一公式将生成所有结果。当您在A2:B中添加新数据时,它将被添加,而无需编辑公式。

卡洛斯提案的更正(谷歌表单):

函数myFunction(){
//初始化
var ss=SpreadsheetApp.getActiveSheet();
var lr=ss.getLastRow();
var values=ss.getRange(2,1,lr-1,2).getValues();
value.sort();
var结果=[];
var-prevCol='';
//填充数组
对于(i=0;i
您应该能够通过分组或透视技术使用Power Query来实现这一点。发布您的代码并描述您遇到的任何问题。您的代码是有用的,但是,每个“分支”的长度并不总是相同的,并且原始数组是“不规则的”。在本例中,缺少一个地址(Malabane,#9)。我建议在值为null时通过空字符串完成数组,然后转置并写入范围。
function myFunction() {
  // initialize
  var ss = SpreadsheetApp.getActiveSheet();
  var lr = ss.getLastRow();
  var values = ss.getRange(2,1,lr-1,2).getValues();
  values.sort();
  var result = [];
  var prevCol = '';

  // populate array
  for (i = 0; i < values.length; i++) {
    if (values[i][0] != prevCol) {
      result.push([values[i][0], values[i][1]]);
    }
    else {
      result[result.length-1].push(values[i][1]);
    }
    prevCol = values[i][0];
  }
  // determine maximum length
  var max = 0 ;
  for(var i = 0; i < result.length; i++){
      max=Math.max(max,result[i].length);
  };

  // complete the array by replacing null values with an empty string 
  for (var i = 0; i < result.length; i ++) {
    for (var j = 0; j < max; j ++) {
      if (result[i][j] == null) {result[i][j] = "";}
    }
  }

  // transpose array
  var result = transpose(result);
  
  // write to range
  ss.getRange(2,4,result.length,result[0].length).setValues(result);
}

function transpose(a){
  return Object.keys(a[0]).map(function (c) { return a.map(function (r) { return r[c]; }); });
}