Excelmacros列拆分

寻找macros的帮助,以获取更多的行上的数据块,并将其放置在列中。

我附上了一张图片来描述这一点。 所有的数据块将由图片中的第一列(1或2)分割。 我只是想把块2和1旁边。我遇到的唯一问题是,每个块的列数是可变的。

编辑:图像链接incaseembedded式不显示: 在这里input链接描述

在这里输入图像说明

这会相对接近吗?

Sub macro() Dim wav_name As String Range("A1").Select Do While ActiveCell.Value <> "" ActiveCell.Offset(0, 2).Select wav_name = ActiveCell.Value ActiveCell.Offset(1, 0).Select Do If ActiveCell.Value = wav_name Then ActiveCell.Offset(1, 0).Select Else Exit Do End If Loop Range(ActiveCell.Offset(0, -2), ActiveCell.End(xlDown)).Select Selection.Cut ActiveCell.End(xlUp).Offset(0, 3).Select ActiveSheet.Paste Loop Range("A1").Select End Sub 

你在那里有一个关键的例外相当可行。

您的剪切select只抓取第一行数据。 你将需要改变它

 Range(ActiveCell).Select Range(Selection, Selection.End(xlDown)).Select Range(Selection, Selection.End(xlToRight)).Select 

要处理可变数量的列,可以通过添加一个varabile(即LastCol)来捕获最后一列,并将以下代码放入Do循环

 LastCol = Activecell.End(xlToRight).Column 

然后用您的variablesreplace上一次偏移语句中的3

请注意,如果您需要提高代码的性能,您可以重构代码以删除许多select语句(包括上面提到的那些语句),但是您所写的内容将适用于您。

编辑:这是你的结束代码将看起来像

 Sub macro() Dim wav_name As String Dim LastCol as Long Range("A1").Select Do While ActiveCell.Value <> "" ActiveCell.Offset(0, 2).Select wav_name = ActiveCell.Value ActiveCell.Offset(1, 0).Select LastCol = Activecell.End(xlToRight).Column Do If ActiveCell.Value = wav_name Then ActiveCell.Offset(1, 0).Select Else Exit Do End If Loop Range(ActiveCell.Offset(0, -2), ActiveCell.End(xlDown)).Select Range(Selection, Selection.End(xlToRight)).Select Selection.Cut ActiveCell.End(xlUp).Offset(0, LastCol +1).Select ActiveSheet.Paste Loop Range("A1").Select End Sub 

我没有testing过,所以你可能不得不做一些debugging…但现在在逻辑上是正确的。