Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.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_Vba_Csv - Fatal编程技术网

Excel 将一列值转换为一行

Excel 将一列值转换为一行,excel,vba,csv,Excel,Vba,Csv,所以我有这样的数据: A B sku custom_option_row_sku AGR370A AGR370A-3 AGR370A-4 AGR370A-5 AGR370A-6 AGR370A-8 AGR370A-9 AGR370A-10 AGR370A-210 AGR370A-212 AGR370B AGR370B-3

所以我有这样的数据:

 A             B
sku     custom_option_row_sku
AGR370A AGR370A-3
        AGR370A-4
        AGR370A-5
        AGR370A-6
        AGR370A-8
        AGR370A-9
        AGR370A-10
        AGR370A-210
        AGR370A-212
AGR370B AGR370B-3
        AGR370B-4
        ...
我需要将B列转换成一行,这样它仍然匹配a列中的值

理想的结局是:

 A                 B
sku      custom_option_row_sku
AGR370A  AGR370A-3, AGR370A-4, AGR370A-5, etc.

这是否可以通过内置功能实现,或者我需要VBA来实现?提前谢谢。

我只是用你给我的例子用这段代码做的。如果你有任何问题,请告诉我,但这对我很有效。一定要备份一份以防万一

 Sub resort()
 Dim thesheet As Worksheet
 Set thesheet = Sheets("Sheet1")
 Dim lastrow As Long
 Dim x As Long
 Dim newRow As Long
 Dim colA As String
 Dim deleterRow As Long
 lastrow = thesheet.Range("B" & Rows.Count).End(xlUp).Row

 With thesheet
 newRow = 0

 For x = 1 To lastrow
  colA = .Cells(x, 1).Value
   If colA <> "" Then
    colA = .Cells(x, 1).Value
    newRow = x
   Else
    .Cells(newRow, 2).Value = .Cells(newRow, 2).Value & ", " & .Cells(x, 2).Value
   End If

 Next
 deleterRow = 1
 For x = 1 To lastrow
  colA = .Cells(deleterRow, 1).Value
 If colA = "" Then
  .Rows(deleterRow).Delete
 Else
  deleterRow = deleterRow + 1
 End If
 Next
 End With
 End Sub
Sub度假村()
将工作表变暗为工作表
设置图纸=图纸(“图纸1”)
最后一排一样长
暗x等长
昏暗的纽罗
淡可乐串
将删除箭头变长
lastrow=sheet.Range(“B”和Rows.Count).End(xlUp).Row
用这张纸
newRow=0
对于x=1到最后一行
colA=.Cells(x,1).Value
如果是可乐,那么
colA=.Cells(x,1).Value
newRow=x
其他的
.Cells(newRow,2).Value=.Cells(newRow,2).Value&“,”&.Cells(x,2).Value
如果结束
下一个
DeleteRow=1
对于x=1到最后一行
colA=.Cells(deleterRow,1).Value
如果可乐=“那么
.行(删除箭头)。删除
其他的
DeleteRow=DeleteRow+1
如果结束
下一个
以
端接头

如果没有那么多信息,您不一定需要VBA。只需从列中复制所需数据,转到要粘贴的行,右键单击->粘贴特殊->转置。图标如下所示:

非常接近。。谢谢唯一的问题是,这些值现在在不同的单元格中分隔,但是它们都需要用逗号分隔,并包含在B列中。@Anon我对代码做了一些调整。这一次我把这些注释删掉了,因为它们需要很长时间才能输入,但如果您有任何问题,请参考我提供的旧代码。我测试了一下,效果很好。如果您有任何问题,请告诉我。好的,这就成功了,但是旧的行不会被删除。我得到一个异常:
删除range类的方法失败
-有什么想法吗?谢谢。@Anon您的工作表受保护了吗?不是:(……如果我按“调试”,它会突出显示这一行
.Rows(deleterRow)。Delete
-不过这没什么大不了的,因为我现在可以过滤掉a列中的空白。再次感谢您。