EXCEL – 熔合文本单元并分割成不同的行

我有一个看起来像这样的文件,包含大量的数据

>ENSMUSG00000020333|ENSMUST00000000145|Acsl6 AGCTCCAGGAGGGCCCGTCTCAGTCCGATGAACTTTGCAGCAATATTATAGTTATTCGTG GTTCACAGAATTCCATTAAACATAAAGAAAAAACATAA >ENSMUSG00000000001|ENSMUST00000000001|Gnai3 GAGGATGGCATAGTAAAAGCTATTACAGGGAGGAGTGTTGAGACCAGATGTCATCTACTG CTCTGTAATCTAATGTTTAGGGCATATTGAAGTTGAGGTGCTGCCTTCCAGAACTTAAAC 

列应该被转换,以便行总是包含:

 ENSMUSG*** ENSMUST*** GeneName Sequence (four separate columns) 

序列列应该是以A,C,G或T开头的行融合成一个文本单元格,融合的单元格数量因基因而异。

有没有人有build议如何解决这个问题?

非常感谢你的帮助! 祝好运

使用“ Data选项卡上的“ Text to Columnsbutton。 selectDelimited ,单击Next ,然后selectOther ,然后在框中键入pipe道符号|。 然后点击NextFinish

我相信只有具有Office 365订阅的用户才具有工作表functionCONCAT ,在这种情况下可能会有用。 所以我会用VBAmacros做这个。

  • 第一行 – 使用pipe道分割| 分隔符
  • 然后连接下一行,直到find一个不以“A”,“C”,“G”,“T”
  • 将结果存储在一个Collection对象中
  • 将结果写回工作表。

既然你有一个大型的数据库,“工作”是在VBAarrays中完成的,因为这个过程要快得多。

假定您的数据在A1列开始的A列中; 并且你的结果将写在B列的E:

如果你的数据库是干净的,并按照你所显示的格式,它应该工作正常。 如果它不符合您提供的格式,则可能需要添加一些错误检查。


 Option Explicit Sub Organize() Dim COL As Collection Dim vSrc As Variant, vRes As Variant Dim WS As Worksheet, rRes As Range Dim V As Variant, W As Variant, S As String Dim I As Long, J As Long Set WS = ActiveSheet With WS Set rRes = .Cells(1, 2) vSrc = .Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp)) End With Set COL = New Collection For J = 1 To UBound(vSrc, 1) ReDim vRes(0 To 3) W = Split(vSrc(J, 1), "|") 'First line For I = 0 To 2 vRes(I) = W(I) Next I S = "" 'Concatenate subsequent lines 'Could look for the "<" but OP gave specifice starting letters ' So will use that Do Select Case Left(vSrc(J + 1, 1), 1) Case "A", "C", "G", "T" S = S & vSrc(J + 1, 1) Case Else Exit Do End Select J = J + 1 Loop Until J = UBound(vSrc, 1) vRes(3) = S COL.Add vRes Next J ReDim vRes(1 To COL.Count, 1 To 4) I = 0 For Each W In COL I = I + 1 For J = 1 To 4 vRes(I, J) = W(J - 1) Next J Next W Set rRes = rRes.Resize(rowsize:=UBound(vRes, 1), columnsize:=UBound(vRes, 2)) With rRes .EntireColumn.Clear .Value = vRes .EntireColumn.AutoFit End With End Sub