如何使用Excel转置数据

时间:2016-02-11 00:43:14

标签: excel

有没有办法可以进行以下转换?

enter image description here

Nov-2010 1195   1175    1676    36500.5    $33,607
Dec-2010 1215   1189    1775    46866.5    $38,714

func loadImageArray(){
    let findDataParse = PFQuery(className:"MagazineContent")
    findDataParse.whereKey("objectId", equalTo: "orQfF8MmVO")
    findDataParse.findObjectsInBackgroundWithBlock{
        (objects: [PFObject]?, error: NSError?) -> Void in
        for object in objects!{
        if (error == nil) {
            if let userImageFile = object.valueForKey("photo1") as? PFFile {
            //let myServerImage = object["photo1"] as? PFFile
               userImageFile.getDataInBackgroundWithBlock {
                    (imageData: NSData?, error: NSError?) -> Void in
                    print("1. Found it")
                    self.images.append(UIImage(data:imageData!)!)
                }}
            if let userImageFile = object.valueForKey("photo2") as? PFFile {
                //let myServerImage = object["photo1"] as? PFFile
                userImageFile.getDataInBackgroundWithBlock {
                    (imageData: NSData?, error: NSError?) -> Void in
                    print("2. Found it")
                    self.images.append(UIImage(data:imageData!)!)
                }}
            if let userImageFile = object.valueForKey("photo3") as? PFFile {
                //let myServerImage = object["photo1"] as? PFFile
                userImageFile.getDataInBackgroundWithBlock {
                    (imageData: NSData?, error: NSError?) -> Void in
                    print("3. Found it")
                    self.images.append(UIImage(data:imageData!)!)
                }}
            if let userImageFile = object.valueForKey("photo4") as? PFFile {
                //let myServerImage = object["photo1"] as? PFFile
                userImageFile.getDataInBackgroundWithBlock {
                    (imageData: NSData?, error: NSError?) -> Void in
                    print("4. Found it")
                    self.images.append(UIImage(data:imageData!)!)
                }}
            if let userImageFile = object.valueForKey("photo5") as? PFFile {
                //let myServerImage = object["photo1"] as? PFFile
                userImageFile.getDataInBackgroundWithBlock {
                    (imageData: NSData?, error: NSError?) -> Void in
                    print("5. Found it")
                    self.images.append(UIImage(data:imageData!)!)
                }}
            if let userImageFile = object.valueForKey("photo6") as? PFFile {
                //let myServerImage = object["photo1"] as? PFFile
                userImageFile.getDataInBackgroundWithBlock {
                    (imageData: NSData?, error: NSError?) -> Void in
                    print("6. Found it")
                    self.images.append(UIImage(data:imageData!)!)
                }}
            if let userImageFile = object.valueForKey("photo7") as? PFFile {
                //let myServerImage = object["photo1"] as? PFFile
                userImageFile.getDataInBackgroundWithBlock {
                    (imageData: NSData?, error: NSError?) -> Void in
                    print("7. Found it")
                    self.images.append(UIImage(data:imageData!)!)
                }}
            if let userImageFile = object.valueForKey("photo8") as? PFFile {
                //let myServerImage = object["photo1"] as? PFFile
                userImageFile.getDataInBackgroundWithBlock {
                    (imageData: NSData?, error: NSError?) -> Void in
                    print("8. Found it")
                    self.images.append(UIImage(data:imageData!)!)
                }}
            }}}}

我必须先填空白吗?

2 个答案:

答案 0 :(得分:1)

我假设并非每个月都有五个数字。如果是的话,你不需要任何额外的检查,你可以将一个更简单的公式粘贴到F4:I9(下面解释)。但是,如果一个月有2个值而另一个月有12个值,我的公式就有效。

如果您的原始数据位于A1:B10且您的转置标题位于E4:E5,就像电子表格的屏幕截图所示,那么您可以将其放入F4并将其复制到F4:Z10

=IF(IF(ISERROR(MATCH($E5,$A:$A,0)>MATCH($E4,$A:$A,0)+COLUMN()-COLUMN($E4)-1),MATCH(9.99999999999999E+307,$B:$B)+1>=MATCH($E4,$A:$A,0)+COLUMN()-COLUMN($E4),MATCH($E5,$A:$A,0)>MATCH($E4,$A:$A,0)+COLUMN()-COLUMN($E4)-1),OFFSET($B$1,MATCH($E4,$A:$A,0)+COLUMN()-COLUMN($E4)-2,0),"")

Gow it works:

积分位为OFFSET($B$1,MATCH($E4,$A:$A,0)+COLUMN()-COLUMN($E4)-2,0),它根据E4中的值从某个单元格中获取值。 (这就是你要粘贴到F4:I9,如果每个月都有五个值。)但如果每个月都有不同数量的值,那就不够了。在这种情况下,我们需要知道如何阻止它获得超出我们想要的值:

如果当前行中的E中还有另一个月,我们可以使用IF(MATCH($E5,$A:$A,0)>MATCH($E4,$A:$A,0)+COLUMN()-COLUMN($E4)-1,OFFSET($B$1,MATCH($E4,$A:$A,0)+COLUMN()-COLUMN($E4)-2,0),"")来选择显示一个值。

如果当前行下方的E中没有其他月份,我们可以使用IF(MATCH(9.99999999999999E+307,$B:$B)+1>=MATCH($E4,$A:$A,0)+COLUMN()-COLUMN($E4),OFFSET($B$1,MATCH($E4,$A:$A,0)+COLUMN()-COLUMN($E4)-2,0),"")来选择显示值。

但是我们需要两者,所以我们必须使用if来决定使用哪一个,最后我们选择一个大的。为了清楚起见,它分布在多行中 - 您可以将其粘贴到公式栏中,但是由于换行,您无法将其直接粘贴到单元格中。

=IF(
   IF(
      ISERROR(MATCH($E5,$A:$A,0)>MATCH($E4,$A:$A,0)+COLUMN()-COLUMN($E4)-1),
      MATCH(9.99999999999999E+307,$B:$B)+1>=MATCH($E4,$A:$A,0)+COLUMN()-COLUMN($E4),
      MATCH($E5,$A:$A,0)>MATCH($E4,$A:$A,0)+COLUMN()-COLUMN($E4)-1),
   OFFSET($B$1,MATCH($E4,$A:$A,0)+COLUMN()-COLUMN($E4)-2,0),
   "")

答案 1 :(得分:0)

Nov-2010必须位于1195之上才能使用工作表的“复制”,“粘贴特殊”,“转置”命令。 OFFSET function可以使用一些行和列数学,但这是一个易失性的¹函数,最好保留,当没有别的东西就足够了。 INDEX function提供OFFSET的非易失性替代方案。

您的样本数据在B列中为A中的每个日期整齐地提供了5个相关条目。根据我的经验,样本数据并不总是代表实际数据。您必须将每一行填充到任何一个日期可能具有关联值的最大值。

在E4:F4中作为标准公式,

'in E4
=IFERROR(INDEX(A:A,
               AGGREGATE(15, 6, ROW(A$1:INDEX(A:A, MATCH(1E+99,A:A )))/SIGN(LEN(A$1:INDEX(A:A, MATCH(1E+99,A:A )))),
               ROW(1:1))), "")
'in F4
=IFERROR(INDEX(INDEX($B:$B, MATCH($E4,$A:$A, 0)):INDEX($B:$B,
               IFERROR(MATCH($E5,$A:$A, 0)-1, MATCH(1E+99,$B:$B ))),
               COLUMN(A:A)), "")

向下填充E4,直到您从A列用完日期来检索。向右填充F4,直到达到任何日期可能具有的最大关联值,然后填充到E列中日期的范围。

aggregate_offset

¹当整个工作簿中的任何内容发生变化时,不仅在影响其结果的某些内容发生变化时,挥发性函数都会重新计算。 易失性函数的示例包括INDIRECTOFFSETTODAYNOWRANDRANDBETWEENCELLINFO工作表函数的某些子函数也会使它们变得不稳定。