2017-02-10 4 views
0

1列に約800行のデータがあります。列のデータは次のようになります。Excelスペースがない場合の「テキストと列」

|Column A| |Column B| |Column C| 
|195| |Marriott International| |127,500| 

はありがとう:

|Column A      | 
|195Marriott International127,500| 

は、どのように私はそれが次のようにのように見えるので、Excelが列にこれを破ることができます!

+1

どのような区切り文字も付いていないため、できないと思います。印刷できない文字がない限り、私は見ることができません。あなたの唯一の希望は、データの「列」に幅が固定されている場合です。 ColAとColCが*常に*で、ColBが*常に*非数値であることが保証されている場合は、これをマクロで行うことができます。 – vknowles

+0

列Aと列Cは常に数値になりますか?より正確に言えば、列Aは常に数字で終了し、列Cは常に数字で始まりますか? – OldUgly

+0

@OldUgly - はい、ここに該当します – BigMike

答えて

0

編集:

しかし、いくつかのパターンがあります。 1番目と3番目の列項目に数字があることに注意してください。列Aを選択し、最後の文字を= RIGHT()で抽出します。あなたは(1 - 9)を作るために9回の置換えが必要であり、次にその値を連結します。第3列の最初の数字と同じことをしてください。次に、テキストを列に使用するための区切り値を設定します。

==== Excelの[データ]タブの[テキストを列に変換]ツールを使用できます。

列内の1つ以上のセルの内容を分割し、それらの内容を隣接する列の他のセルにまたがって個別の部分として配布することができます。たとえば、ワークシートに完全な名前の列が含まれている場合は、その列を別々の姓と名の列に分割できます。

+0

デリミタがないため、それよりも少し難しいです。私は方法を見つけることができませんでした – BigMike

+0

lhsは常に3つの数字、決して2または4ですか? –

+1

lhsは常に3つの数字ですが、決して2または4ですか?そして右の3,3?その後、左(A1,3)は数字を与え、中央(A1,4、len(A1)-10)は名前を与え、右(A1,7)は計算に使用できる数字ではなく最後の数字を与える。いずれかの番号が長さを変えてしまった場合、動作が停止することをご了承ください。 –

0

Solar Mikeのコメントから解決策を見つけましたが、これは別の方法です。


以下は、データを事前処理し、デリミタを挿入する短いVBAです。限られた量のデータでテストしたので、修正が必要なエラーが発生する可能性があります。 VBA

...この変換さ

Option Explicit 
Sub MakeDelimiters() 
Dim LastRow As Long, iLoop As Long 
Dim myDelim As String, myStr As String 
Dim theRng As Range, theSht As Worksheet, theCell As Range 

    myDelim = ";" 

    Set theSht = Worksheets("Sheet1") 

    LastRow = theSht.Range("A" & theSht.Rows.Count).End(xlUp).Row 

    Set theRng = theSht.Range("A1:A" & LastRow) 

    For Each theCell In theRng 
     myStr = theCell.Value 
     For iLoop = 1 To Len(myStr) 
      If IsNumeric(Mid(myStr, iLoop, 1)) And _ 
       Not IsNumeric(Mid(myStr, iLoop + 1, 1)) And _ 
       Mid(myStr, iLoop + 1, 1) <> "," Then 
       myStr = Left(myStr, iLoop) & myDelim & Right(myStr, Len(myStr) - iLoop) 
      End If 
      If IsNumeric(Mid(myStr, iLoop + 1, 1)) And _ 
       Not IsNumeric(Mid(myStr, iLoop, 1)) And _ 
       Mid(myStr, iLoop, 1) <> "," And _ 
       Mid(myStr, iLoop, 1) <> myDelim Then 
       myStr = Left(myStr, iLoop) & myDelim & Right(myStr, Len(myStr) - iLoop) 
      End If 
     Next iLoop 
     theCell.Value = myStr 
    Next theCell 

End Sub 

...これまで

enter image description here

...

enter image description here

-1

UPDATE:

将来の訪問者のデータを単純化しすぎに見えるだろうとの考え...

は常に3つの数字、決して2または4 LHSですか?そして右の3,3? -SolarMike

...は笑われます。だから私はこの解決策を思いついた。この回答は、コメントに基づいています。

カラムAとCは常に数値になりますか?より正確に言えば、列Aは常に数字で終了し、列Cは常に数字で始まりますか? - OldUgly

@OldUgly - はい、それはケースがここにある - BigMike


"列へのテキスト" に関するご元の質問に答えるために、私は考えています。しかし、これはあなたが本当に列A-C内のデータが欲しいを前提としていた... エクセル-式をタグ付けされたので、私はそれに打撃を与え、これを思い付いた...

enter image description here

ました。 E2F2それぞれにおける2つのヘルパー配列数式はCtrl + Shiftキー + を入力してください)...

=MIN(FIND(0,SUBSTITUTE(D2,CHAR(ROW(INDIRECT("65:90"))),0)&0)) 
=MIN(FIND(0,SUBSTITUTE(D2,CHAR(ROW(INDIRECT("48:57"))),0)&0,E2+1)) 

A2で式、B2、およびC2はそれぞれ(かなり明白です)...

=LEFT(D2,E2-1) 
=MID(D2,E2,F2-E2) 
=RIGHT(D2,LEN(D2)-F2) 

ああ、良いo ld ASCIIテーブル

+0

コメントで私の答えを読んでいない...そして、 ()を追加すると、余分な列を使用せずに名前を取得できます。 –

関連する問題