2016-10-18 8 views
1

WITH下向きに区切ら。出力内のすべてのセルをコピーします。転置を使用して貼り付けます。次に、col Aをドラッグして空白を下に埋めます。Excelはカンマを変換するには、私はこれをやろうとしている他の列

簡単な方法:(

+0

単一のセルを分割し、結果の配列をループして各要素に新しい行を作成することができます。 – flohdieter

+0

はい、それはVBAと呼ばれます。これを行うルーチンをコーディングする必要があります。 –

+0

数式を使用して1つまたは2つのヘルパー列でそれを行うことができますが、VBAが数行だけであることは事実です –

答えて

1

を私はあなたにもヘルパー列のカップルと式でこの操作を行うことができ、コメントに記載し、それが本当だったと(b)はどのように難しい、それは希望の場合(a)に見てみたかったです答えは(a)はい、ちょうど約(b)非常に(私よりも複雑な公式に熟練した人がいるが)。ここで

は結果である: -

enter image description here

だから、ヘルパー列がちょうど私ののとjの

Column C (i) is source row 
Column D (j) is string number within source row 

VBAでのようなものです。しかし、これを達成するためにあなたには、いくつかの長い数式を必要とします。

C7とC8がちょうどD8において

にハードコードされている: - C8で

=IF(C7="","",IF(D7<LEN(INDEX(B$2:B$4,C7))-LEN(SUBSTITUTE(INDEX(B$2:B$4,C7),",",""))+1,D7+1,IF(C7=ROWS($B$2:$B$4),"",1))) 

: - B7において

=IF(D8="","",IF(D8>D7,C7,C7+1)) 

: -

=IF(C7="","",MID(","&INDEX(B$2:B$4,C7)&",",FIND("<",SUBSTITUTE(","&INDEX(B$2:B$4,C7)&",",",","<",D7))+1,FIND(">",SUBSTITUTE(","&INDEX(B$2:B$4,C7)&",",",",">",D7+1))-FIND("<",SUBSTITUTE(","&INDEX(B$2:B$4,C7)&",",",","<",D7))-1)) 

A7: -

=IF(C7="","",INDEX($A$2:$A$4,C7)) 

ソースセルの変更が宛先セルに反映されるため、半ダイナミックです。固定されたソース範囲$ B $ 2:$ B $ 4に縛られていますが、可変ソース範囲でかなり簡単に動作するように変更できます。数字はすべて7桁であるとは仮定していませんが、そうした場合、B7の式が簡略化されます。

1

が存在しなければならない私は、VBAは数式でそれをやって比較する方法を疑問に思いました。

ここではサンプルVBAであり、よりスマートな方法があるかもしれないにも関わらず、かなり短いですそれを行うの: -

Option Explicit 
Public Sub SplitRows() 

Dim a() As String 
Dim r1, r2 As Range 
Dim i, j, k As Integer 
Set r1 = Range("A2:B4") 
Set r2 = Range("A7:B1000") 
j = 1 

For i = 1 To r1.Rows.Count 
    a = Split(r1.Cells(i, 2), ",") 
    For k = LBound(a) To UBound(a) 
     r2.Cells(j, 1) = r1.Cells(i, 1) 
     r2.Cells(j, 2) = a(k) 
     j = j + 1 
    Next k 
Next i 

End Sub 
+0

ありがとう、私はこれを試してみましょう。その間、私はこのデータを処理するためのPHPスクリプトを作成しました。 XLSでそれを行うのは素晴らしいことですので、確かにこれを試してみてください(XLSでVBAを使う方法を理解する必要があります) – Mark

+0

ExcelシートからAlt-F11だけで、モジュールを挿入してコードに貼り付けます: F5を実行します。 –

関連する問題