2016-08-28 4 views
-2

[OK]をので、私はこのようなものがあります:列をスプレッドシートに転記する方法は?

hello 
hi 
how 
are 
you 
hello 
how 
are 
you 
hello 
hi 
hi 
hi 
hello 
hi 
how 
how 
are 
hello 
you 

を私はこのコラムはこのような行に移調したい:

hello hi how are you 
hello how are you 
hello hi hi hi 
hello hi how how are 
hello you 

どのように私はこれを達成できますか?

+0

質問を編集してくれたCarpetsmokerさんには、私よりも速いものがありました。 :) – Bee

答えて

1

1)データを選択します。 2)コピー(Ctrl-c) 3)転置データを貼り付けるセルを選択します。 4)特別なペースト(編集メニューの下、またはツールバーの左側に貼り付ける)を選択し、貼り付けを選択します。

+0

こんにちはルーク。私はそれが簡単だったことを願っています。しかし私はその列に77,808個の細胞を持っています。私は "hello"を含む次のセルを見つけるまで、そこに "hello"を持つ各セルを見つけてそこから行を作成する式を作成する必要があります – Bee

0

一つの方法(!おそらくない最高の)あなたの最初のhello B2に、A2であると仮定すると、その後、helloであなたのリストを終了するには、次のようになります。全体に

=IF(AND($A2="hello",COLUMN()<MATCH("hello",$A3:$A77809,0)+1),OFFSET($A2,COLUMN()-1,,),"") 

ドラッグアンドダウンするまで少なくとも1つの列完全に空白です。次に、すべてを選択し、[コピー]、[形式を選択して貼り付け...]、[値]、および列Bの空白行を削除します。最後に、必要に応じて、各セルの間にブランクを挿入し、ペースト/スペシャルを繰り返し、余剰を削除するように、ピース(セル)を行単位で連結します。

2

あなたはこの謎にVBAの道を解決したい場合は、コードのこの部分使用することを検討することをお勧めします:明らかに

Option Explicit 

Public Sub tmpSO() 

Dim i As Long 
Dim LastRow As Long 
Dim wsSource As Worksheet 
Dim wsDestination As Worksheet 
Dim DestinationRow As Long, DestinationColumn As Long 

Set wsSource = ThisWorkbook.Worksheets("SourceSheetName") 
Set wsDestination = ThisWorkbook.Worksheets.Add(Before:=wsSource) 

LastRow = wsSource.Cells(wsSource.Rows.Count, "A").End(xlUp).Row 

DestinationRow = 1 
DestinationColumn = 1 
For i = 1 To LastRow 
    If LCase(Trim(wsSource.Cells(i, 1).Value2)) = "hello" Then 
     DestinationColumn = 1 
     DestinationRow = DestinationRow + 1 
    Else 
     DestinationColumn = DestinationColumn + 1 
    End If 
    wsDestination.Cells(DestinationRow, DestinationColumn).Value2 = wsSource.Cells(i, 1).Value2 
Next i 

End Sub 

を、あなたは実際の名前のために上記のコードSourceSheetNameに変更する必要がありますデータが存在するシートのそれ以外のコードは動作し、あなたがしたいことをしなければなりません。

0

78,000+の行では、VBA配列とコレクションオブジェクトを使用する次のVBAルーチンは、ワークシートで直接「作業」を実行するよりも迅速かつ迅速に実行する必要があります。

Option Explicit 
Option Compare Text 
Sub HelloStart() 
    Dim wsSrc As Worksheet, wsRes As Worksheet, rRes As Range 
    Dim vSrc As Variant, vRes As Variant 
    Dim COL As Collection 
    Dim MaxCols As Long 
    Dim V As Variant, W As Variant 
    Dim I As Long, J As Long 


Set wsSrc = Worksheets("sheet1") 
Set wsRes = Worksheets("sheet2") 
    Set rRes = wsRes.Cells(1, 1) 

With wsSrc 
    vSrc = .Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp)) 
End With 

Set COL = New Collection 
For Each W In vSrc 
    Select Case W 
     Case Is = "Hello" 
      If Not IsEmpty(V) Then 
       COL.Add V 
       MaxCols = IIf(MaxCols > UBound(V), MaxCols, UBound(V)) 
      End If 
      ReDim V(1 To 1) 
      V(1) = W 
     Case Else 
      ReDim Preserve V(1 To UBound(V) + 1) 
      V(UBound(V)) = W 
    End Select 
Next W 
If Not IsEmpty(V) Then COL.Add V 
MaxCols = IIf(MaxCols > UBound(V), MaxCols, UBound(V)) 

ReDim vRes(1 To COL.Count, 1 To MaxCols) 
I = 0 
For Each V In COL 
    I = I + 1 
    J = 0 
    For Each W In V 
     J = J + 1 
     vRes(I, J) = W 
    Next W 
Next V 

Set rRes = rRes.Resize(UBound(vRes, 1), UBound(vRes, 2)) 
wsRes.Cells.Clear 
With rRes 
    .Value = vRes 
    .EntireColumn.AutoFit 
End With 

End Sub