Excelの別々の列にある複数のリストがあります。これらのデータ列を1つの大きな列に結合する必要があります。重複するエントリがあるかどうかは気にしませんが、各列の行1をスキップする必要があります。
また、ROW1に1月から12月までのヘッダーがあり、列の長さが異なり、1つの大きな列に結合する必要がある場合はどうでしょうか。
ROW1| 1 2 3
ROW2| A D G
ROW3| B E H
ROW4| C F I
組み合わせる必要があります
A
B
C
D
E
F
G
H
I
各列の最初の行はスキップする必要があります。
これを試して。データの範囲内の任意の場所をクリックしてから、次のマクロを使用します。
Sub CombineColumns()
Dim rng As Range
Dim iCol As Integer
Dim lastCell As Integer
Set rng = ActiveCell.CurrentRegion
lastCell = rng.Columns(1).Rows.Count + 1
For iCol = 2 To rng.Columns.Count
Range(Cells(1, iCol), Cells(rng.Columns(iCol).Rows.Count, iCol)).Cut
ActiveSheet.Paste Destination:=Cells(lastCell, 1)
lastCell = lastCell + rng.Columns(iCol).Rows.Count
Next iCol
End Sub
マクロを使用せずに列を組み合わせることができます。数式バーに次の関数を入力します。
= IF(ROW()<= COUNTA(A:A)、INDEX(A:A、ROW())、IF(ROW()<= COUNTA(A:B)、INDEX(B:B、 ROW()-COUNTA(A:A))、IF(ROW()> COUNTA(A:C)、 ""、INDEX(C:C、ROW()-COUNTA(A:B))))) =
3つの列を組み合わせる必要があるため、ステートメントは3つのIF関数を使用します。
簡単なExcelの数式を使用して、マクロを使用せずにこれを行う方法のサンプルスプレッドシートを作成しました(最初の行を取り除くために独自の調整を行う必要がありますが、これが私の例を理解したら簡単になるはずです)スプレッドシートは機能します):
これが完全に役立つかどうかはわかりませんが、「スマート」マージが必要な問題がありました。 AとBの2つの列がありました。Aが空白の場合にのみBを移動したいと思いました。下記参照。これは、おそらく最初の行をオフセットするために使用できる選択範囲に基づいています。
Private Sub MergeProjectNameColumns()
Dim rngRowCount As Integer
Dim i As Integer
'Loop through column C and simply copy the text over to B if it is not blank
rngRowCount = Range(dataRange).Rows.Count
ActiveCell.Offset(0, 0).Select
ActiveCell.Offset(0, 2).Select
For i = 1 To rngRowCount
If (Len(RTrim(ActiveCell.Value)) > 0) Then
Dim currentValue As String
currentValue = ActiveCell.Value
ActiveCell.Offset(0, -1) = currentValue
End If
ActiveCell.Offset(1, 0).Select
Next i
'Now delete the unused column
Columns("C").Select
selection.Delete Shift:=xlToLeft
End Sub
Function Concat(myRange As Range, Optional myDelimiter As String) As String
Dim r As Range
Application.Volatile
For Each r In myRange
If Len(r.Text) Then
Concat = Concat & IIf(Concat <> "", myDelimiter, "") & r.Text
End If
Next
End Function