• ベストアンサー

ひとつのセル内の文字列を複数のセルに分割する

エクセルについて、初歩的かも知れませんが教えて下さい。 A1のセルに 0 85 254 などと、スペースを含む数字が並んでいます。 それをA2 B2 C2 に自動で入力したいのですが、どういった関数を使えばよいのでしょうか? ご存知の方、よろしくお願いいたします。

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

  • ベストアンサー
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.3

こんばんは! 他の方々が回答されている「区切り位置」を使うのが一番簡単な方法だと思います。 しかし、 >自動で入力したいのですが とありますので、何とか関数で!と頑張ってみましたが ちょっと難しいようです。 そこでVBAになってしまいますが、一例です。 画面左下の操作したいSheet見出し上で右クリック → コードの表示 → VBE画面に ↓のコードをコピー&ペーストしてA1セルにデータを入力してみてください。 Private Sub Worksheet_Change(ByVal Target As Range) 'この行から Dim k As Long Dim myArray As Variant If Target.Address = "$A$1" Then Rows(2).ClearContents If Target <> "" Then myArray = Split(Target, " ") For k = 0 To UBound(myArray) Cells(2, k + 1) = myArray(k) Next k End If End If End Sub 'この行まで ※ スペースは半角としています。 関数で出来る方法があればごめんなさいね。m(_ _)m

gekikaraou
質問者

補足

ご回答ありがとうございます。 やってみました。 目的が果たせて大変嬉しいです、ありがとうございます。 しかし、複数データがありVBAって言うんですか? 私には少し難しく見えるんです! 複数データって言うのは以下のようなものです。 A3 B3 C3 に E6  A6 B6 C6 に E12 A9 B9 C9 に E43 A12 B12 C12 に E49 A15 B15 C15 に E55  A18 B18 C18 に E61  A21 B21 C21 に E18  A24 B24 C24 に E24  A27 B27 C27 に E30 A30 B30 C30 に E36  とこう言った物です。 EセルのデータをA,B,Cに振り分けます。 分割したい元データは 一桁か二桁数字 スペース 一桁数字 スペース 二桁数字です。 0 1 02 か 10 1 20 みたいな感じです。 どうぞ、よろしくお願いします。

その他の回答 (6)

  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.7

>E列のほかの部分には文字だったり、数字だったりのデータが存在します。 私の提示した数式は、E列の上から順に空白以外のセル(スペースが入った数字)を探し、そのデータをA~C列の3行目、6行目、9行目・・・のセルに分割する数式です。 したがって、E列にスペース数字以外のデータが入力されてる場合は、規則性がありませんので基本的に1つの関数で処理することはできません(例えばスペース数字以外のデータは先頭文字が数字ではないや対象セル以外にはスペースが含まれないなどの人間が見て判断できる規則があれば数式で対象セルを判定することも可能です)。 >A-C列の部分は以下の様になっています。     A            B          C 1  日付 英数字       漢字        漢字 2  E列の最初の数字 E列の2番目の数字  E列の3番目の数字 3  数字           数字         数字 3行目、6行目・・・・にE列の数字を分割して入れるのではないのでしょうか? このようなケースでは「例えば」でなく、実際のセルのレイアウトを具体的に提示されたほうが解決が早いと思います。 >教えて頂いた関数を入れてみました。 >A3を選択し、Ctrl+G でジャンプダイアログ から セル選択 セル空白を押しOKするとデータ周囲が全部選択されました。 >そのまま関数を貼り付けして、Ctrl+Enter で、その選択された全部のセルに他のデータが貼り付けられてしまいました。 >どこかいけないところがあったのでしょうか? 私の提示した操作は(E列にスペース数字以外がないパターンの回答ですが)、A3セルを選択するのではなく、A列の数式を入力したいデータ範囲を選択して操作するように回答しています(Ctrl+Emterで空白セルにまとめて数式を入力することができる)。 >また、この作業は毎日、100回近くする必要がありますので、なるべく効率的に行いたいと思っています。 この部分が具体的にどのような作業をするのか(目的が書かれていないため)良くわかりません。 同じレイアウトの(E列のセル位置が変更されない)シートでデータだけが変わる場合に、それらのデータを自動的に表示したいという意味なら、1回だけそれらのE列のセルを参照する数式を入力しておけば良いことになります。 この場合は、数式を各セルにドラッグアンドドロップする操作が必要となりますが、簡単にオートフィルだけで必要な数式を作成することができます。 いずれにしろ、どのような目的でこのような作業をするのかによって最も効率的なアプローチがありますので、実際の操作やE列のレイアウトなどを補足説明されると良いと思います。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.6

No.3です。 補足を読ませていただくと・・・ E列とA~C列に表示する行に規則性がないみたいですね! 仮に関数で可能だとしても、A~C列の各行に一つずつ数式を入れてやる必要があります。 それでは大変ですので、今回もマクロでやってみました。 画面左下の操作したいSheet見出し上で右クリック → コードの表示 → VBE画面に ↓のコードをコピー&ペーストしてマクロを実行してみてください。 (Alt+F8キー → マクロ → マクロ実行です) Sub セルに振り分け() 'この行から Dim i As Long Dim k As Long Dim n As Long Dim myG As Variant Dim myArray As Variant myG = Array(6, 12, 18, 24, 30, 36, 43, 49, 55, 61) For k = 0 To UBound(myG) Select Case myG(k) Case 6 i = 3 Case 12 i = 6 Case 18 i = 21 Case 24 i = 24 Case 30 i = 27 Case 36 i = 30 Case 43 i = 9 Case 49 i = 12 Case 55 i = 15 Case Else i = 18 End Select Range(Cells(i, 1), Cells(i, 3)).ClearContents myArray = Split(Cells(myG(k), 5), " ") For n = 0 To UBound(myArray) Cells(i, n + 1) = myArray(n) Next n Next k End Sub 'この行まで ※ 関数でないので、データ変更があるたびにマクロを実行する必要があります。 ※ E列に1セルずつデータを入力するのであれば 前回のようにデータ変更のたびに表示することは可能です。 お望みの方法でなかったらごめんなさいね。m(_ _)m

gekikaraou
質問者

お礼

ご回答ありがとうございます。 まさに求めたい結果だと感じます。 データを貼り付けし直して、マクロ実行のみで求める結果にたどり着けそうです。 関数の他に、マクロって言うんですね。 こんな方法があるとは知りませんでしたが、使いこなすのは至難の技のような気がします。 なにはともあれ、再度のご回答ありがとうございます!

  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.5

E列の不規則なセルに入力されている1~2桁、スペース、1桁、スペース、2桁の数字を、A~C列に3行ごとに規則的に分割して入力したいということですね。 その場合、E列にはそれらの数字以外のセルは空白なのでしょうか? また、A~C列の数式以外の部分はすでに入力済みのデータなのでしょうか? また、表示した数字データはその後それらの値を数式などに使用しない(結果を表示するだけなの)のでしょうか? 一回限りの操作なら、エクセルの一般機能を利用した操作をお勧めしますが、データを変更した同じような処理を何回もしたい場合は、VBAまたは関数を使う必要があります。 例えば、E列には数字の組み合わせ以外には何も入力されておらず、A~C列にはすでにデータが入力されているなら以下のような操作で一括して必要なセルに数式を入力することができます。 A列のデータ範囲を選択して、Ctrl+Gでジャンプダイアログを出して、「セル選択」「空白セル」でOKして、そのまま数式バーに以下の数式を入力し、Ctrlキーを押しながらEnterします。 =TRIM(LEFT(INDEX($E:$E,SMALL(INDEX(($E$1:$E$100="")*1000+ROW($E$1:$E$100),),ROW(A3)/3)),2)) 同様にB列を選択して、以下の数式を一括入力します。 =LEFT(RIGHT(INDEX($E:$E,SMALL(INDEX(($E$1:$E$100="")*1000+ROW($E$1:$E$100),),ROW(A3)/3)),4),1) C列には以下の式を入力します。 =RIGHT(INDEX($E:$E,SMALL(INDEX(($E$1:$E$100="")*1000+ROW($E$1:$E$100),),ROW(A3)/3)),2) これからフォーマットを作成するなど、A~C列に既入力データが無い場合は、A3~C3セルに上記の数式を入力し、A1~C3セルを選択して下方向にオートフィルしてください。 文字列数字ではなく、実際の数値データにしたい場合は上記の式の最後に「*1」を追加してください。 #補足説明では操作の目的などが記載されていませんので、ひとまず関数の方法を紹介しましたが、同じ操作を繰り返す必要が無い(このような操作がしたい)ということがご希望なら、複雑な関数で対応するのではなく一般機能で対応されることをお勧めします。

gekikaraou
質問者

補足

ご回答ありがとうございます。 E列のほかの部分には文字だったり、数字だったりのデータが存在します。 また、 A-C列の部分は以下の様になっています。     A            B          C 1  日付 英数字       漢字        漢字 2  E列の最初の数字 E列の2番目の数字  E列の3番目の数字 3  数字           数字         数字 こんな感じですが、これが繰り返し456セルと続きます。 教えて頂いた関数を入れてみました。 A3を選択し、Ctrl+G でジャンプダイアログ から セル選択 セル空白を押しOKするとデータ周囲が全部選択されました。 そのまま関数を貼り付けして、Ctrl+Enter で、その選択された全部のセルに他のデータが貼り付けられてしまいました。 どこかいけないところがあったのでしょうか? また、この作業は毎日、100回近くする必要がありますので、なるべく効率的に行いたいと思っています。 以上、ご報告でした、よろしくお願いいたします。

  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.4

数字の個数などにより数式を修正する必要がありますが、例示のようなデータならA2セルに以下のような数式を入力して右方向にオートフィルすれば「文字列」の数字に分割することができます。 =TRIM(MID(SUBSTITUTE(ASC($A$8)," ",REPT(" ",100)),1+(COLUMN(A1)-1)*100,100)) ひとまず、文字列で数字を返す方法を提示しましたが、その後の分割した数字の使い方によって、最も合理的な操作や数式が異なりますので、どのような目的で数字を分割したいのかを具体的に説明されたほうが的確な回答が得られると思います。

gekikaraou
質問者

補足

ご回答ありがとうございます。 便利そうな関数ですね、使ってみたいけど、複数のデータがあるんです。 それは A3 B3 C3 に E6  A6 B6 C6 に E12 A9 B9 C9 に E43 A12 B12 C12 に E49 A15 B15 C15 に E55  A18 B18 C18 に E61  A21 B21 C21 に E18  A24 B24 C24 に E24  A27 B27 C27 に E30 A30 B30 C30 に E36  とこう言った物です。 EセルのデータをA,B,Cに振り分けます。 分割したい元データは 一桁か二桁数字 スペース 一桁数字 スペース 二桁数字です。 0 1 02 か 10 1 20 みたいな感じです。 どうぞ、よろしくお願いします。

  • shintaro-2
  • ベストアンサー率36% (2266/6244)
回答No.2

どのバージョンのエクセルをお使いかわかりませんが、 リボンのデータの中に、 区切り位置というのがあります (2003以前なら、 データ(D)→区切り位置(E) ) そこを開くと、  テキストファイルを開く時と同じ画面がでますので、 ウィザードに従って  カンマやタブなどの・・・ を選択  区切り文字としてスペースを選択   と進んでいけば、   お望みのことはできると思います。、

gekikaraou
質問者

お礼

ご回答ありがとうございます。 同じスペースに違うデータを貼り付けて何度も同じ作業をすえる必要があるので、毎回この作業をするのは現実的に無理みたいでした! しかし、便利な機能があるものですね、エクセルって。 覚えておいて次回使いたいと思います。 ありがとうございます!

回答No.1

スペース区切りのテキストファイルを 「データ」-「外部データの取り込み」-「データの取り込み」 で複数セルに読み込ますことはできますが、その方法ではだめですか。 今あるファイルを、「名前をつけて保存」 ファイルの種類を、「テキストタブ区切り」で保存しておいて、 新規に作成した表に、 メニューから 「データ」-「外部データの取り込み」-「データの取り込み」 として、 保存したテキストファイルを選ぶ 元のデータ形式を、 「カンマやタブなどのク入文字・・・」にチェック 「次へ」 「スペース」にチェック 「次へ」 「完了」で  最後に場所を指定するという方法がありますが、どうでしょうか。

gekikaraou
質問者

お礼

ご回答ありがとうございます。 毎日600個程度のデータがあり、大量のデータをエクセルに貼り付けて任意の場所のみ羅列するのが目的でした。 なので、少し手間が掛かりそうです。 私の説明不足でごめんなさい。 とは言えそんな方法もあるのですね! 勉強になりました。 ありがとうございます!

関連するQ&A

  • エクセルで複数のセルにセルにある数字を1つのセルに

    こんばんは、エクセルに関してあまり詳しくないので教えて頂けませんか? A1のセルに1 B1のセルに3 C1のセルに5と、数字が1~8まで並んでいます。 その数字を、ほかの一つのセルに、135~と8桁表示するにはどうしたらよいでしょうか? その数字はrank関数で入力されたものです。 詳しい方よろしくお願いいたいます!

  • エクセルの文字列結合

    ご存知の方がいらっしゃいましたらよろしくお願い致します。 エクセルの文字列でA1のセルに「あ」と入れて、 B1のセルに「い」、C1のセルに「う」と入力して、 D1のセルに「A1&B1&C1」という数式を立てれば D1のセルは「あいう」となるのですが、 A1のセルに「あ」と入力して B1のセルに「0001」と半角で入力し、C1のセルに 「A1&B1」という数式を立てれば C1のセルが「あ1」となってしまいます。 そこでC1のセルを「あ0001」とするには どうしたらよろしいでしょうか? 0001は0002、0003・・・と続いていくため、 文字列扱いにはできません。 なんとかして A1に「あ」B1に「0001」C1のセルを自動で「あ0001」 A2に「あ」B2に「0002」C2のセルを自動で「あ0002」 A3に「あ」B3に「0003」C3のセルを自動で「あ0002」 としたいのです。よろしくお願い致します。

  • 対象セル内(複数)が埋まったら文字を表示させたい

    よろしくお願い致します。 エクセルで A1からA10のセルに月末にはなんらかの数字が入力されます。 A1からA10のセルに全て数字が埋まったらB1セルに『済』などの文字が 自動で表示されるようにしたいのですが、これは可能でしょうか? 可能でしたら方法をご教授下さい。 よろしくお願い致します。

  • 複数のセルを同時に削除する方法

    DATE関数を使って曜日をセルに表示させました。 セルA1→年(和暦入力) セルB1→月 セルC1→日 セルD1→曜日を表示する =IF(COUNT(A1:C1)<3,"",DATE(A1+1988,B1,C1)) このとき、セルA1に入力した数字をdelキーで削除したときセルB1とC1も空欄にすることが出来るでしょうか? 出来たら、関数で行いたいのですが ご存じの方教えて頂けないでしょうか? よろしくお願いします。

  • 複数のセルの文字列を;(セミコロン)を介してひとつのセルに文字列として結合するには?

    エクセルで以下のような事は出来るのでしょうか? 複数のセルの文字列を;(セミコロン)を介してひとつのセルに文字列として結合するには? 例) A  B  C     D    あ  い  う  →  あ;い;う ひょっとしたら同じような質問が無いかと思い、色々と探してみたのですが、見つけることが出来ませんでした。 大量のデータを入力する必要があり、大変困っています。 ご存知の方がおられましたら、ご教授頂けるとありがたいです。 宜しくお願いいたします。

  • 複数のセルの文字を違うシートの一つのセルに表示するには

    複数のセル たとえばA1:B8にそれぞれ文字が入っているとします それを別のシートの C5にまとめて表示させたいのですが 何か方法がありますか? 複数のセルに入っているのは数字ではなく文字で それをそのまま まとめて表示させたいのです 関数でできるのかと調べてみたのですが エクセルは初心者なものでいまいちわからなくて・・・

  • セルに入力されている数字列を 一文字ずつセルにふりわけたい

    たびたびよろしくお願いします。 ひとつのセルに6~7桁の数字が入力されてます。 (数字と数字の間にはスペースはありません) A 7桁の場合はこの数字を一文字ずつ  別のセルひとつひとつに  振り分けたいのですが 可能でしょうか? 例 「9654321」→   「9」「6」「5」「4」「3」「2」「1」 B 6桁の場合は頭にゼロを入力して   同様に別のセルひとつひとつに   振り分けたいのですが 可能でしょうか? 例 「654321」→   「0」「6」「5」「4」「3」「2」「1」  

  • あるセルに特定の文字列を打つと、他のセルに決められた文字が自動入力するように

    お世話になります。 表題の通り、 あるセルに特定の文字列を打つと、 他のセルにあらかじめ決められた文字が自動入力するようにしたいです。 具体的に言うと、 (1)セル(A,1)に「キリン」と打ち込むと    A   B   C   D 1 キリン 2 3 4 (2)1列目の B,C,Dに予め決めておいた文字が入力されるようにしたい    A   B   C   D 1 キリン 首  長い  アフリカ 2 3 4 のです。 エクセルで可能でしょうか? 詳しい方よろしくお願いいたします!

  • セルとセルの文字列を結合について

       A     B       C 1       2008/1/2   0:00:00 2       2008/1/2   0:15:00 3       2008/1/2   0:30:00 4       2008/1/2   0:45:00 5       2008/1/2   1:00:00 6       2008/1/2   1:15:00 ↓     A          B       C 1 2008/1/2 0:00   2008/1/2   0:00 2 2008/1/2 0:15   2008/1/2   0:15 3 2008/1/2 0:30   2008/1/2   0:30 4 2008/1/2 0:45   2008/1/2   0:45 5 2008/1/2 1:00   2008/1/2   1:00 6 2008/1/2 1:15   2008/1/2   1:15 といった感じにA列に Bの日付とCの時刻を半角スペースを挟んで 入力させたいのですが Excel上で以下の関数を使って手動でやると =CONCATENATE("2008/1/1"," ",0:15) 2008/1/1 0:00 と表示されるが マクロでの記述上では上手くいかない。 For i = 1 To 10 Range("A1,A10") = CONCATENATE(Cells(i, 2), Cells(i, 3)) Next ↑書き方としてはやっぱり間違ってる? 何かいい書き方ってないでしょうか・・? お手数おかけいたしますがよろしくお願いします。

  • EXCELでA列とB列の文字が合わせてC列に入るやり方を教えて欲しいで

    EXCELでA列とB列の文字が合わせてC列に入るやり方を教えて欲しいです。 例 A1セルは04+  B1セルは2000 C列に04+ 2000のように作りたいです(真ん中に1個スペース)。 セルが多すぎて、一個ずつやるのは大変時間かかりますので、関数のやり方をご教示ください。 よろしくお願いします。

専門家に質問してみよう