• ベストアンサー

1セル内のスペースで区切られた数列1360個を先頭から1個づつ抽出しするには?

Excel 2003を使用しています。 Cell内に1360個の数字が並んでおり、それを1セルに1数字ずつ先頭から抽出し別のセルに振り分ける方法はありますか。区切り位置機能ではセル内に全ての数字が入りきらない為全て数字がセルに入りません。 LEFT、MIDコマンドでは文字列として扱われるためスペースが邪魔になる。 1セル内の内容 0 0 0 4 0 0 230 0 0 23 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 234 0 0 0...... ↓こうしたい、 0 0 0 4 0 0 230 0 0 23 0 0 0 0 0 0 0 0 0 0 0 ........... よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.9

#08です。仕様を変えました。データがあるセルを選択して実行すると、新しいシートを追加しそのシートにデータを書き込むようにしました。なお7行目末尾の数字を変更すれば1行あたりの列数を変更できます。 Sub Macro5() Dim cnt As Long, wkStr As String, ptr Dim psw As Boolean  wkStr = ActiveCell.Value  Sheets.Add  Do While psw = False   wkStr = Application.Substitute(wkStr, " ", "@", 7)   ptr = Application.Find("@", wkStr & "@")   Cells(1, 1).Offset(cnt, 0).Value = Left(wkStr, ptr - 1)   cnt = cnt + 1   If ptr >= Len(wkStr) Then    psw = True   Else    wkStr = Right(wkStr, Len(wkStr) - ptr)   End If  Loop  Cells(1, 1).Resize(cnt, 1).TextToColumns Destination:=Cells(1, 1), _    DataType:=xlDelimited, Space:=True, Other:=False End Sub

ruru_papa
質問者

お礼

ご回答有難う御座いました。 私には難しいかと思いましたが丁寧に指導頂き目的通りの事ができました。大変助かりました。有難う御座いました。

その他の回答 (8)

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.8

解決済みとも思いましたがマクロを書いてみました。2行目のデータのセルアドレスは書き換えてください。アクティブセルから下にバラしたデータを展開します。実行前にはブックを保存してくださいね。 (なお区切り文字は半角の空白を想定しています。全角ならお手数ですが半角に置換してください) Sub Macro5() Const trgADRS As String = "A1" '←ここにデータのセルアドレスを記述 Dim cnt As Long, wkStr As String, ptr Dim actCell As Range, psw As Boolean  Set actCell = Selection.Cells(1, 1)  wkStr = Range(trgADRS).Value  Do While psw = False    wkStr = Application.Substitute(wkStr, " ", "@", 7)    ptr = Application.Find("@", wkStr & "@")    actCell.Offset(cnt, 0).Value = Left(wkStr, ptr - 1)    cnt = cnt + 1    If ptr >= Len(wkStr) Then      psw = True    Else      wkStr = Right(wkStr, Len(wkStr) - ptr)    End If  Loop  actCell.Resize(cnt, 1).TextToColumns Destination:=actCell, _    DataType:=xlDelimited, Space:=True, Other:=False End Sub マクロはALT+F11でVBE画面を開き、「VBAProjectエクスプローラのシート名右クリック」→「挿入」→「標準モジュール」で表示される画面にペーストして下さい。実行はALT+F8を押して、マクロ名を選択します。

  • DVD-RW
  • ベストアンサー率36% (195/541)
回答No.7

Excelの仕様で列数が256までなのでそれに引っかかるということですよね。 1360個の数字が一行だけでしたら、 1.そのEXCELシートをテキストファイルとして保存する 2.ノートパッド等で7つ目のスペースごとに改行してから保存しなおす 3.Excelでそのテキストファイルをインポートすれば早いでしょう。 1360個の数字が複数行あるのでしたら、VBS(Visual Basic Script)で、上の2の作業をするプログラムを作ると良いでしょう。

ruru_papa
質問者

お礼

ご回答有難う御座いました。 データが1360個になり桁数もまばらで間違いを起こしやすい為 ノートパッドで見直し後の編集をするのはやめました。 有難うございました。

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.6

あ、、補足します。 クリップボードにタブ区切りで転送してるので、もし試すなら [データ]-[区切り位置] でタブにチェックを入れておかないと ペーストしたとき、分割されません。

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.5

こんにちは。KenKen_SP です。 VB による方法です。 標準モジュールに下記を貼り付け、Microsoft Forms 2.0 Object Library を 参照設定して下さい。 ご質問文では 7個になってましたが 1360/7 で 195 行にもなってしまいます ので、16個区切りにしてます。コード内の COL_COUNT で変更できます。 なお、セルに分割した最後に 余計な 0 があるけど、何だか今日は頭が良く 回らなくてデバッグしてません...が、まぁ特に問題は無いと思います。 どんな出力方法が良いかなと考えたのですが、良い方法が思いつかなかった ので結果をクリップボードに入れて、転記作業はユーザーにまかせる仕様に しました。 Public Sub SampleProc()   ' Microsoft Forms 2.0 Object Library の参照が必要です   ' Visual Basic Editorのメニューから[ツール]-[参照設定]を選択し   ' [参照設定]ダイアログボックスから     ' 区切りをここで指定(現在16個区切り)   Const COL_COUNT = 16      Dim CPB As DataObject   Dim vBuf As Variant   Dim vDat As Variant   Dim sRet As String   Dim j  As Long      vBuf = Split(ActiveCell.Value, " ")   j = 1   ReDim vTmp(1 To COL_COUNT)   For Each vDat In vBuf     vDat = Val(Trim$(vDat))     If Len(vDat) > 0 Then       If j > COL_COUNT Then         sRet = sRet & Join$(vTmp, vbTab) & vbCrLf         ReDim vTmp(1 To COL_COUNT)         j = 1       End If       vTmp(j) = vDat       j = j + 1     End If   Next   sRet = sRet & Join$(vTmp, vbTab)   If sRet <> "" Then     Set CPB = New DataObject     CPB.Clear     CPB.SetText sRet     CPB.PutInClipboard     Set CPB = Nothing     MsgBox "クリップボードにコピーしました(´・ω・`)", vbInformation   End If End Sub

ruru_papa
質問者

お礼

とても難しいかったですが、なんとかできました。 有難う御座いました。

  • shanglee
  • ベストアンサー率43% (58/134)
回答No.4

ANo.3です。 > →プレビュー画面で全列を選択(左端の列を選択し、Shiftを押しながら右端の列をクリックすると全選択できます)&列のデータ形式は[G/標準]にチェック に関して補足です。このダイアログの[表示先]についてです。 0 0 0 4 0 0 230 0 0 23 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 234 0 0 0...... が[A1]セルにある場合、表示先には[$A$1]が入っていると思いますが、例えばこれを[$A$2]または[A2]に変えれば [A1]の内容はそのままで [A2][B2][C2]・・・に分割された値が表示されるようになります。 [$A$1]のままにしておくと、区切る前の長いデータは上書きされてしまいますのでご留意ください。

  • shanglee
  • ベストアンサー率43% (58/134)
回答No.3

ANo.2の回答と似ていますが、別に一度テキストに保存する必要はありません。 現状のまま、データが入っているセルを選択して、メニューバーから[データ]-[区切り位置]をクリックしてください。 そして、[カンマやタブなどの区切り位置によってフィールドごとに区切られたデータ]にチェック →区切り文字は[スペース]のみにチェック →プレビュー画面で全列を選択(左端の列を選択し、Shiftを押しながら右端の列をクリックすると全選択できます)&列のデータ形式は[G/標準]にチェック →完了 ※ 列のデータ形式は[文字列]を選択すれば文字列形式にもなります。

ruru_papa
質問者

お礼

ご回答有難う御座いました。この方法ですとデータ数が1360個となり全てのデータがセルに入りませんでした。 有難う御座いました。

  • NIWAKA_0
  • ベストアンサー率28% (508/1790)
回答No.2

>0 0 0 4 0 0 230 0 0 23 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 234 0 0 0...... 中身を一度、テキストファイルに保存して、 エクセルで[ファイル]→[開く]→ファイル形式を[テキストファイル]にして、 テキストファイルウィザード1/3で [元のデータの形式]を[カンマやタブなどの区切り文字によって・・・]の方にチェック→[次へ] 2/3で、 [区切り文字]の[スペース]にチェック→[次へ] 3/3で、 [データのプレビュー]で全範囲選択して [列のデータ形式]を[G/標準]に。 [完了] これでどうですか?

ruru_papa
質問者

お礼

ご回答有難う御座いました。この方法ですとデータ数が1360個となり全てのデータがセルに入りませんでした。 有難う御座いました。

  • mshr1962
  • ベストアンサー率39% (7418/18948)
回答No.1

まず7つずつに分けてみては? A1="0 0 0 4 0 0 230 0 0 23 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 234 0 0 0......" A2=MID($A$1,1,FIND(",",SUBSTITUTE($A$1," ",",",(ROW()-1)*7))) A3=MID($A$1,FIND(",",SUBSTITUTE($A$1," ",",",(ROW()-2)*7)),FIND(",",SUBSTITUTE($A$1," ",",",(ROW()-1)*7))) でA3を下方にコピー 分割できたら、コピーして値として貼り付けして、区切り位置でスペースで分割

ruru_papa
質問者

お礼

ご回答有難う御座いました。早速やってみましたが区切り位置でスペース分割するとセルの数の制限により一部が表示できなくなりました。 有難う御座いました。

関連するQ&A

  • スペースを含んだ文字列から文字列の抽出

    エクセルバージョン2007 スペースを含む文字列で、A列に文字列がある時、以下の式を組んで文字列を抽出しています。 先頭にIDの数字が有る場合は、それぞれの目的に合った文字列を抽出しています。 B1=LEFT(A1,SEARCH(" ",A1,1)-1) C1=LEFT(MID(A1,SEARCH(" ",A1,1)+1,LEN(A1)-SEARCH(" ",A1,1)),SEARCH(" ",MID(A1,SEARCH(" ",A1,1)+1,LEN(A1)-SEARCH(" ",A1,1)),1)-1) 3 3df-32654-10 CCCCHH 10 1ab-12345-00 AAABBBB この文字列の場合、B列に3と10が表示、C列に 3df-32654-10 1ab-12345-00が表示されます。 先頭に、IDの無い文字列は以下の様な構成です。 6rt-95132-00 PPPKKK この文字列の場合、B列に6rt-95132-00、C列にPPPKKKが表示されてしまい、この場合、IDの数字が無い場合はB列には表示させない又は、C列に6rt-95132-00させたいと思っています。 ご教授頂ければ幸いです。 以上、宜しくお願い致します。

  • エクセルのセルの先頭行にスペースを入れたい

    エクセルのセル内で複数行にわたり文字を入力しているとき(折り返して全体を表示にチェックがついている)、2行目、3行目の先頭にスペースを入れようとしてもセル内でスペースが空いてくれません。何かよい方法はないでしょうか?

  • セルの中の数字を切り取る、または分割する方法

    お世話になっております。 質問致します。 エクセルで1つのセルに「1212123434」「1212125656」「1212127878」とう様に1列に数字が入っています。 上6ケタは同じ数字で下4ケタが異なる数字となっており、カンマやスペースはありません。 1列全てにおいてこの上6ケタの121212のみ削除したいのですがどのようにすればよろしいでしょうか。 上6ケタを削除する、もしくは上6ケタと下4ケタを2つのセルに分ける方法を教えてください。 「区切り位置」で色々やってみましたがわかりませんでした。 よろしくお願いします。

  • 指定した文字列が抽出できる関数

    Excelで、指定した文字列だけを抽出表示する場合、「文字列を先頭(左)から抽出する」などの関数は「LEFT関数」や「RIGHT関数」がありますが、位置の指定ではなく、文字列の中にある、特定の文字だけを指定して抽出してできる関数は何でしょうか? たとえば「ラーメン」「うどん」「そば」いずれかを「含む」文字列が入っているセルの中から、「うどん」のセルだけを抽出して表示するという場合です。

  • 文字抽出

    エクセル初級者です。マクロは分かりません。 セルに ”漢字 半角スペース (ピンイン表記)” されています。 例)麻婆豆腐 (mápó dòufu) これから漢字とピンインを分けて抽出したい。 対象のセルの列には漢字は1~7文字で文字数に応じてピンインも変化します。 FIND,MID,LEFTなどの関数を調べてみましたが、所望には至りませんでした。 何かアドバイスいただければ有難く。

  • Excelで1つのセルに3つの情報を入れた情報の抽出方法は?

    いつも教えてもらいありがとうございます。 今Excelにて1つのセルの中に3つから4つの情報が半角スペースで開けて入れているのですが、 別シートにそれらを分けて1つのセルに1つの情報を入れたいのですが、 1つ目の情報は文字列操作関数SEARCHとLEFTの組み合わせで 抽出することが出来たのですが、2つめ以降が上手くいきません。 どうすればできますか教えてください。

  • Excelで各セルの先頭からスペースを含めた10文字を消去する方法

    OSは XP SP2 Office2007を使用しています。Excelも2007です。 1000行あるデータの中から、ある列においてのみ、先頭から半角26文字(スペースを含む)だけを消去したいのですが、簡単に消去できる方法はないでしょうか? 26文字の構成は、年月日  時刻  1桁数字 1桁数字で、「2010/01/10  12:30:30  0  3」となっております。スペース部分はスペースが半角2つ並んでいます。 わかる方、ぜひ教えてください。

  • エクセルVBAで、セル内のテキストを二つ以上のスペースを基準に分割する

    エクセルVBAで、セル内のテキストを二つ以上のスペースを基準に分割する方法。 A AA BBB CC CCC CC DD EEE EE FF FF GG のようなテキストがあり、二つ以上スペースがある場合、そこでセルを分割するモジュールを作ろうと考えています。 テキストの開始位置や、スペースx2の位置がセルによって違う上、区切りたいのスペース二つ以上なので、区切り位置ではできません。 現在はinstrで二つスペースがある位置を変数とし、midでそこから最後まで次にセルに出力した後、先ほどのInstrの変数をもう一度使い、元のセルのinstrで出した位置から最後までを消す。これをdo loopで繰り返す処理し、最後に空白のセルだけを全ていっぺんに消す方法を考えています。 しかし、この場合、一つのセルに対して何度も処理をしなければならない上、スペースが素数(例、3)の場合、出力されるセルにスペースが一つ入ってしまいます。また、スペースが30など多くある場合も、スペースだけのセルを複数を出力することになります。 この他に何か良いアイディアはないでしょうか?

  • エクセルで100行ほどのセルに、単語が3~10個、半角スペースで区切ら

    エクセルで100行ほどのセルに、単語が3~10個、半角スペースで区切られて入力されています。 これを一気にスペースごとに別のセルに移したいのですが。「データ」→「区切り位置」だと1行ごとに行わなければならないので…よろしくお願いします。

  • Excelで数字だけ抽出

     Excelを最近になって職場で使い始めました。 初心者ですのでよろしくお願いします。  「パソコン(25%)」,「プリンタ(55%)」のような列の中から %の前の数字の部分だけを抽出したいのですがうまくできません。 MIDやLEFTだと、%の前の部分の文字数が同じでないといけないし、、。  今は隣の列に数字だけを手入力して、その数値を使って 計算しているのですが面倒なので、なにかいい手段があれば 教えてください。    

専門家に質問してみよう