簡體   English   中英

Excel-如果數據存在,將多列合並為一

[英]Excel - Combine Multiple Columns into One if Data Exists

我在excel的單獨列中有多個列表,但是某些列不包含數據。 我需要做的是將確實有數據的這些列合並為一個大列。

Row 1 | A B
Row 2 | C D E
Row 3 | F 
Row 4 | G H I

應合並為:

A
B
C
D
E
F
G
H 
I

中間沒有空白行。 如果可能,寧願不使用宏。

謝謝!

如果您不想使用宏,則至少需要使用過濾器來避免出現空白行(我的解決方案中的行為零)。

我假設您的數據位於A,B和C列中

在D列中,我們使用以下公式

=IF(MOD(ROW()+2,3)=0,INDEX(A:A,QUOTIENT(ROW()+2,3)),IF(MOD(ROW()+2,3)=1,INDEX(B:B,QUOTIENT(ROW()+2,3)),IF(MOD(ROW()+2,3)=2,INDEX(C:C,QUOTIENT(ROW()+2,3)),"")))

盡可能向下拖動公式。 過濾此列以刪除零。

屏幕截圖

如果您不想使用VBA宏,我認為獲得它的最好方法是復制B列,C列,然后復制D列,...彼此下面,如下所示:

A
C
F
G
B
D

H

E

I

然后使用菜單數據=>刪除重復項刪除多個空格。

如果您改變了使用宏的想法,只需在Google上搜索“ unpivot data Excel”,您就會找到很多解決方案。

我可以想到幾種方法來做到這一點。 使用以下公式。

= INDEX(MyData,1 + INT((ROW(A1)-1)/ COLUMNS(MyData)),MOD(ROW(A1)-1 + COLUMNS(MyData),COLUMNS(MyData))+ 1)

假設“ MyData”是一個命名范圍。

或者,您可以使用簡單的VBA腳本來完成此工作。

Sub ConvertRangeToColumn()
Dim Range1 As Range, Range2 As Range, Rng As Range
Dim rowIndex As Integer
xTitleId = "Title"
Set Range1 = Application.Selection
Set Range1 = Application.InputBox("Source Ranges:", xTitleId, Range1.Address, Type:=8)
Set Range2 = Application.InputBox("Convert to (single cell):", xTitleId, Type:=8)
rowIndex = 0
Application.ScreenUpdating = False
For Each Rng In Range1.Rows
    Rng.Copy
    Range2.Offset(rowIndex, 0).PasteSpecial Paste:=xlPasteAll, Transpose:=True
    rowIndex = rowIndex + Rng.Columns.Count
Next
Application.CutCopyMode = False
Application.ScreenUpdating = True
End Sub

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM