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 Columns
button。 selectDelimited
,单击Next
,然后selectOther
,然后在框中键入pipe道符号|。 然后点击Next
并Finish
。
我相信只有具有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