歡迎轉(zhuǎn)發(fā)和點一下“在看”,文末留言互動! 置頂公眾號或設為星標及時接收更新不迷路 ![]() 小伙伴們好,今天要和大家分享一道文本題目。如下圖,我們需要將A列的信息每三個一組,合并到一個單元格中。 ![]() 在今天的推文中,將會向大家介紹兩種方法來解決這個問題。 01 如果要使用函數(shù)來做這道題目,那我們首先需要做一列輔助列。如下圖中的B列,在單元格B2中輸入公式“=“T”&B2”,并向下拖曳。完成后將公式粘貼為數(shù)值。這里的“T”是隨便寫的文本字符。 這樣做的目的是,我們后面要使用PHONETIC這個函數(shù)。而這個函數(shù)只能合并文本,所以需要將源數(shù)據(jù)中的數(shù)值型數(shù)據(jù)轉(zhuǎn)換為文本。 ![]() 在單元格D2中輸入下列公式,并向下拖曳即可。 =SUBSTITUTE(MID(PHONETIC(OFFSET(B$1,(ROW(A1)-1)*3+1,,3,1)),2,100),"T",CHAR(10)) 這是一條多函數(shù)的綜合應用,除了PHONETIC函數(shù)之外,其余的大家都比較熟悉了。 OFFSET(B$1,(ROW(A1)-1)*3+1,,3,1) 以單元格B1為基點向下偏移,分別移動到第1、4、7、...行。偏移后的區(qū)域行高是3行。 PHONETIC(OFFSET(B$1,(ROW(A1)-1)*3+1,,3,1)) 利用PHONETIC函數(shù)將區(qū)域中的文本數(shù)據(jù)合并。注意,這個函數(shù)只能合并文本數(shù)據(jù)。這就是為什么我們要在前面將B列中的數(shù)據(jù)都粘貼為數(shù)值。 MID(PHONETIC(OFFSET(B$1,(ROW(A1)-1)*3+1,,3,1)),2,100) 利用MID函數(shù)從第二個位置開始提取字符串,長度為100(足夠大)。 SUBSTITUTE(MID(PHONETIC(OFFSET(B$1,(ROW(A1)-1)*3+1,,3,1)),2,100),"T",CHAR(10)) 最后利用SUBSTITUTE函數(shù)將字符串中間的“T”替換為換行符。 02 VBA代碼 其實,使用VBA代碼做這道題目更簡單。 ![]() 完整代碼如下: Sub 疊加() Dim i%, m%, n%, arr As Variant, brr As Variant On Error Resume Next arr = Range("A2:A38") ReDim brr(1 To 15, 1 To 1) For i = 1 To UBound(arr) Step 3 m = m + 1 For n = i To i + 2 If brr(m, 1) <> "" Then brr(m, 1) = brr(m, 1) & Chr(10) & arr(n, 1) Else brr(m, 1) = arr(n, 1) End If Next Next [C2].Resize(UBound(brr), 1) = brrEnd Sub 這段代碼更加簡潔易懂。 For n = i To i + 2 If brr(m, 1) <> "" Then brr(m, 1) = brr(m, 1) & Chr(10) & arr(n, 1) Else brr(m, 1) = arr(n, 1) End IfNext 對于動態(tài)數(shù)組brr,如果還沒有錄入數(shù)據(jù),則對第一個位置錄入數(shù)組arr中的第一個數(shù)據(jù)。如果已經(jīng)錄入了數(shù)據(jù),則通過循環(huán)合并當前數(shù)據(jù)后面的兩個數(shù)據(jù)。 For i = 1 To UBound(arr) Step 3 m = m + 1 For n = i To i + 2 If brr(m, 1) <> "" Then brr(m, 1) = brr(m, 1) & Chr(10) & arr(n, 1) Else brr(m, 1) = arr(n, 1) End If NextNext 當前循環(huán)完成后,通過變量m和n來處理數(shù)組brr中其它位置上的數(shù)據(jù),直至整個循環(huán)完成。 -END- 我就知道你“在看” ![]() |
|