各位大佬帮忙看看,如何将原表格按照第二张图片的方式排列
excel吧
全部回复
仅看楼主
level 4
2023年07月04日 10点07分 1
level 4
用透视表发现门店只能以值的形式显示
2023年07月04日 10点07分 2
@点到辄止 发过去了大佬,感谢🙏
2023年07月05日 01点07分
level 8
鼠标拖动到左边
2023年07月05日 01点07分 3
移过去了但是好像不太对,图片放在四楼了
2023年07月05日 01点07分
level 4
2023年07月05日 01点07分 4
level 10
方法一、用 transpose 函数。
方法二、选择,复制,粘贴选项:转置。
2023年07月05日 03点07分 5
感谢大佬[大拇指][大拇指],但是多个重量transpose貌似解决不了,需要用多次公式或者转置[笑尿]
2023年07月05日 06点07分
level 11
上个附件到百度网盘 。
2023年07月05日 04点07分 6
链接: 网盘链接 提取码: kpf7 复制这段内容后打开百度网盘手机App,操作更方便哦
2023年07月05日 06点07分
@🌴菠萝蜜🌴 感谢大佬[吐舌]
2023年07月05日 06点07分
level 4
链接: 网盘链接 提取码: kpf7 复制这段内容后打开百度网盘手机App,操作更方便哦
2023年07月05日 06点07分 7
level 11
Option Explicit
Sub abc()
 Dim a, i, j, n, d(1)
 a = Sheets("sheet1").[a1].CurrentRegion.Value
 ReDim b(UBound(a, 2), 10 ^ 3) '最多支持100个种类,如果爆掉自己修改
 For i = 0 To UBound(d)
  Set d(i) = CreateObject("scripting.dictionary")
 Next
 For j = 3 To UBound(a, 2)
  d(0)(a(1, j)) = j - 2
  b(j - 2, 0) = a(1, j)
 Next
 n = 1: b(0, 1) = a(1, 2)
 For i = 2 To UBound(a)
  If Not d(1).exists(a(i, 1)) Then
   n = n + 1: d(1)(a(i, 1)) = n: b(0, n) = a(i, 1)
  Else
   Exit For
  End If
  For j = 3 To UBound(a, 2)
   If IsNumeric(a(i, j)) Then
    b(d(0)(a(1, j)), d(1)(a(i, 1))) = a(i, j)
' b(d(0)(a(1, j)), d(1)(a(i, 1))) = b(d(0)(a(1, j)), d(1)(a(i, 1))) + a(i, j) + a(i, 2)
' b(d(0)(a(1, j)), 1) = b(d(0)(a(1, j)), 1) + a(i, 2)
   End If
  Next
 Next
 With Sheets("sheet2")
  .Cells.ClearContents
  .[a1].Resize(UBound(b) + 1, n + 1) = b
 End With
End Sub
2023年07月05日 09点07分 8
A列有重复的,二维表格解决不了你的问题,除非用三维,但无法输出到表格。这里判断当A列有重复的就直接退出循环。可以做个结果示例图 。
2023年07月05日 09点07分
大佬,公式能稍微解释一下嘛,看不懂[笑尿]
2023年07月05日 10点07分
@🌴菠萝蜜🌴 如果没法按照列重量依次排列的话能不能搞一个类似筛选的形式作用整个输出表格的那种
2023年07月05日 10点07分
level 11
Option Explicit
Sub abc()
 Dim a, i, j, m, n
 a = Sheets("sheet1").[a1].CurrentRegion.Value
 ReDim b(1 To UBound(a, 2) + 1, 1 To UBound(a, 1) + 1)
 For i = 1 To UBound(a)
  If i > 1 Then n = 1 Else n = 0
  For j = 1 To UBound(a, 2)
   If j > 2 Then m = -1 Else m = 0
   b(j + m, i + n) = a(i, j)
  Next
 Next
 b(1, 2) = a(1, 2)
 With Sheets("sheet2")
  .Cells.ClearContents
  .[a1].Resize(UBound(b), UBound(b, 2)) = b
 End With
End Sub
2023年07月05日 15点07分 9
可能只是一个转置的问题,这样源数据A列可以有重复值,但目标数据的B列不知道怎么去处理统计,可以做个示例图 。
2023年07月05日 15点07分
@🌴菠萝蜜🌴 图片放在10楼了大佬,您看下
2023年07月06日 01点07分
level 4
预期想要达到的效果图
2023年07月06日 01点07分 10
level 11
Option Explicit
Sub abc()
 Dim a, i, j, k, m, n, p
 With Sheets("sheet1")
  a = .Range("a1:j" & .[a1].End(xlDown).Row + 1).Value
 End With
 ReDim b(1 To (UBound(a, 2) + 1) * 100, 1 To UBound(a, 1) + 1)
 p = 1
 For i = 2 To UBound(a) - 1
  If a(i, 2) <> a(i + 1, 2) Then
   m = m + 1
   For j = p + 1 To i
    If j > 1 Then n = 1 Else n = 0
    For k = 3 To UBound(a, 2)
     b((m - 1) * (UBound(a, 2) - 2) + k - 1, j - p + n + 1) = a(j, k)
     b((m - 1) * (UBound(a, 2) - 2) + k - 1, 2) = a(i, 2)
     b((m - 1) * (UBound(a, 2) - 2) + k - 1, 1) = a(1, k)
    Next
   Next
   If p = 1 Then
    b(1, 2) = a(1, 2)
    For j = 2 To UBound(a) - 1
     b(1, j + 1) = a(j, 1)
     If a(j, 2) <> a(j + 1, 2) Then Exit For
    Next
   End If
   p = i
  End If
 Next
 With Sheets("sheet2")
  .Cells.ClearContents
  .[a1].Resize(UBound(b), UBound(b, 2)) = b
 End With
End Sub
2023年07月06日 04点07分 11
相当于3维表转成了多个2维表。这里假设不同重量段种类个数都是相同的,而且它们是有序不重复的,否则结果不确定,或者要用字典来定位 。
2023年07月06日 04点07分
1