ネットが遅くてイライラしてない!?

添付画像左の表から右の表のようにテキストを変換する方法はありますでしょうか?
一つのセルにテキストが入っていて、それを半角スペースで区切って縦に並べたいのですが、
できればその際に下の行との間にその区切ってできたテキストの数だけ行を追加したいです。
よろしくお願いいたします。

「セル内テキスト区切って列を挿入する方法を」の質問画像

質問者からの補足コメント

  • Aのデータは数百件となり、手作業をなるべくしないで済むようにしたいので、
    VBAを使用することになるのかなと思いますが、あまり詳しくないので、
    できるだけ詳細にご教示いただけるとありがたいです。
    よろしくお願いいたします。

      補足日時:2020/09/08 06:27
  • うれしい

    ご回答ありがとうございます。
    コピペそのままで実行できた上、
    とても丁寧なご説明をいただき大変参考になりました。
    ほぼ希望通りなのですが、質問には記載しておりませんが
    欲を言うと他のセルにもデータが入力されている状態で、
    追従して表示できると更に助かるのですが、
    もしそちらの方法もご存知でしたらご教示いただけませんでしょうか?

    「セル内テキスト区切って列を挿入する方法を」の補足画像2
    No.3の回答に寄せられた補足コメントです。 補足日時:2020/09/08 21:17
  • うれしい

    ご回答ありがとうございます。
    できました!
    こちらを多少改良すれば、希望に沿ったものができそうです。
    tom04さんのようにパッと組めること、
    とても憧れますので、少しづつ勉強したいと思いました。
    ありがとうございました。

    No.2の回答に寄せられた補足コメントです。 補足日時:2020/09/09 20:08

A 回答 (8件)

こんばんは、#3です


本当にいい加減な回答をしてしまい申し訳ありません。
#3は、うまくいったなら、たまたまうまくいっただけで、ちゃんとした処理はできません。
一応、ちがうロジックで訂正しますが#3は忘れて欲しいです。

Sub Sample()
Dim i As Long, n As Long
Dim strAry, myStr, bufAry
  strAry = Range(Cells(1, "B"), Cells(Rows.Count, "B").End(xlUp))
  For i = Cells(Rows.Count, "B").End(xlUp).Row To 1 Step -1
    Rows(i + 1 & ":" & i + UBound(Split(Cells(i, "B"), " "))).Insert Shift:=xlDown
  Next
  For i = 1 To UBound(strAry)
    bufAry = Split(strAry(i, 1), " ")
    For Each myStr In bufAry
      Cells(n + 1, "B") = myStr
      n = n + 1
    Next
  Next
End Sub
行単位で行が挿入されると思います。

知らない事は悪い事ではありませんが、間違った事を教えるのは、悪い事だと思いますので反省します。
    • good
    • 0
この回答へのお礼

反省なんて、そんな風に仰らないでください。感謝しております!
#3はそのままコピペでできたのですが、
逆に今回教えていただいた方が実行できないみたいです。
聞いてばかりで申し訳ありませんでした。
自分でも調べてみようと思います。
ありがとうございます。

お礼日時:2020/09/09 20:24

添附圖參照(Excel 2019)


Sheet1 に於いて、
C1: =LEN(B1)-LEN(SUBSTITUTE(B1," ",""))
E1: =IFERROR(FIND(" ",$B1,D1+1),99)
K1: =IFERROR(MID($B1,D1+1,E1-D1-1),123)

Sheet2 に於いて、
1.セル A1、B1 に夫々右側に示す式を入力後、下方にズズーッとオートフイル
 ̄ ̄した結果を添付図下段の左端に示す。
A1: =OFFSET(Sheet1!A$1,(ROW(Sheet1!A1)-1)/(MAX(Sheet1!C:C)+1),)
B1: =OFFSET(Sheet1!K$1,(ROW(Sheet1!A1)-1)/(MAX(Sheet1!C:C)+1),MOD(ROW(Sheet1!A1)-1,(MAX(Sheet1!C:C)+1)))
2.列範圍 A:B を選擇⇒Ctrl+C⇒マウスの右クリック⇒[貼り付けオプション]
 ̄ ̄直下の"123"(値)アイコンをチョーン⇒Winキー+F5⇒[セル選択]⇒“定数”
 ̄ ̄に目玉入れ、且つ、“数値”以外のチェック外し⇒[OK]とツン
 ̄ ̄した結果が右隣の圖
3.選擇された任意の數値セル上でマウスの右クリック⇒[削除]⇒“行全体”に
 ̄ ̄目玉入れ⇒[OK]を「エイヤッ!」と叩き附け
 ̄ ̄した結果が更に右隣の圖
4.範圍 A2:A14 を選擇して、次の[条件付き設定]を施した結果を右端圖に
 ̄ ̄示した。
 ̄ ̄ ̄ ̄ ̄ルールの種類:“数式を…を決定”
 ̄ ̄ ̄ ̄ ̄ルールの内容↓
 ̄ ̄ ̄ ̄数式→ =A2=A1、書式→白のフォント色

以上、「できるだけ詳細」でした。フー
「セル内テキスト区切って列を挿入する方法を」の回答画像7
    • good
    • 1
この回答へのお礼

ご回答ありがとうございます。
画像付きで丁寧に説明していただき、
とてもわかりやすく大変参考になります。
恥ずかしながら、一番左の画像のところからつまずいてしまっているので、
どこが違うのか、詳しく調べてみようと思います。
本当にありがとうございました!!

お礼日時:2020/09/09 19:58

こんにちは



う~~ん・・・
元のデータが、
 A 5
 B 3
 C 4
 ・・・
のような形式の方が簡単に作れるのですけれどね…

>Aのデータは数百件となり、手作業をなるべくしないで済むようにしたい
数百件程度なら、要領よくやれば数分で済みそうに思いますけれど…
>VBAを使用することになるのかなと思いますが、あまり詳しくないので、
回答を待って、それを使えるようになるまでの間にとっくにできていると思います。

VBAでやってもさほど難しくはないですが、そちらの回答はどなたかにお願い他の方にお任せするとして、手作業でも少しだけ簡単な方法を以下に。


1)ほぼ手作業による方法
「連続データ作成」あるいは「オートフィル」のの機能を利用すれば、A-1、A-2・・・のような連番データが簡単に作成できますので、手作業でも数百件程度ならすぐに終わるはずです。

2)関数を利用する方法
まず、1行目のA列、B列に、「A」、「A-1」のデータを記入します。
B2セルに
 =IF(A2="",LEFT(B1,FIND("-",B1)-1)&"-"&(MID(B1,FIND("-",B1)+1,5)+1),A2&"-1")
の式をコピペして、ずず~っと下方迄フィルコピー(ほぼこれで終わり)
後は、A列の必要な行に「B」「C」などのデータを入力するだけ。(間違えたら訂正も可能)
関数を消したければ、B列を選択して「値をペースト」で数値化する。


私が式を作成するのに数分かかっているので、トータルで考えると1)の方法の方が時間効率は高いと言えるかも。
    • good
    • 1
この回答へのお礼

ご回答ありがとうございます。
1はそれぞれの個数分列を挿入するのに時間がかかるかなと思いまして、
2はAやBの入力間違いをしてしまいそうでできれば自動でと
思ったのですが、わがままですね。。
充分使える方法を教えていただき感謝申し上げます。
ありがとうございます!!

お礼日時:2020/09/08 20:01

Aに対して


C1に
=SUBSTITUTE(B1,A,"|"&A)
コピーして値貼り付け

区切り位置のボタンで|で区切る
分かれたら範囲をコピーして
行列の入れ替えで貼り付け

でした
    • good
    • 1
この回答へのお礼

ご回答ありがとうございます。
ご丁寧に訂正の投稿までしていただき恐縮です。
簡単にできそうですね。参考にさせていただきます。
ありがとうございます!

お礼日時:2020/09/08 20:41

Aに対して


C1に
=SUBSTITUTE(A,"|"&A)
コピーして値貼り付け

区切り位置のボタンで|で区切る
分かれたら範囲をコピーして
行列の入れ替えで貼り付け
    • good
    • 1

こんにちは、


VBAの例です。標準モジュールで実行します。
B列が書き換わるのでテストは新規シートなどで

同じ場所に出力するとなると少し面倒ですが、頭に浮かんだ理屈を書いただけなので
きれいに纏められると思いますが、データ加工にしか使わないと思いますので
そのまま投稿します。。処理される対象は、実行時表示されているシートです。

Sub test()
Dim i As Long, n As Long, j As Integer
Dim strAry, myStr, bufAry
strAry = Range(Cells(1, "B"), Cells(Rows.Count, "B").End(xlUp))
For i = Cells(Rows.Count, "B").End(xlUp).Row To 1 Step -1
If i = 1 Then
n = 0
Else
n = 1
End If
For j = 0 To InStr(Cells(i, "B"), " ") - n
Cells(i + 1, "A").Insert Shift:=xlDown
Next
Next
For i = 1 To UBound(strAry)
bufAry = Split(strAry(i, 1), " ")
For Each myStr In bufAry
Cells(n + 1, "B") = myStr
n = n + 1
Next
Next
End Sub

簡単な説明
Dim i As Long, n As Long, j As Integer
Dim strAry, myStr, bufAry
変数宣言部、変数は値などを出し入れする箱のようなもの
strAry = Range(Cells(1, "B"), Cells(Rows.Count, "B").End(xlUp))
strAry配列にB列の1行目から最終行までの値を変数に入れる。初めに行うのは、処理と共にB列の値がはじめと変わるから
For i = Cells(Rows.Count, "B").End(xlUp).Row To 1 Step -1
B列の最終行から1行目に向かってループ(繰り返し処理をする)目的は例のA・・B・・・Cの行を入れる為
If i = 1 Then
半角スペースの数と必要セルの数を合わせる為の処理
For j = 0 To InStr(Cells(i, "B"), " ") - n セル文字列の半角スペースの数 InStr(Cells(i, "B"), " ")分ループ
Cells(i + 1, "A").Insert Shift:=xlDown 処理の回数分セルを追加して下にシフトする
Next 繰り返し

For i = 1 To UBound(strAry) 初めに配列に入れた値を取り出す処理、UBound(strAry)は行数と同じ
bufAry = Split(strAry(i, 1), " ") i行目の値を半角スペースで分けて取り出す
For Each myStr In bufAry 分けたられた値の集合から
Cells(n + 1, "B") = myStr  一つずと取り出してセルに書き込む
n = n + 1 繰り返し処理で増えていく行数に使う値
Next 分けた文字に対しての繰り返し
Next 初めに入れた配列(B列セル範囲)に対しての繰り返し処理

抵抗が無ければ試してください。
そうでなければ、無視してくださいね。。
この回答への補足あり
    • good
    • 1
この回答へのお礼

ご回答ありがとうございます!
試してみます。
詳しくないのでお時間かかってしまうかもしれませんので、
またご連絡させていただきます。

お礼日時:2020/09/08 20:05

こんにちは!



手っ取り早くVBAでの一例です。
元データはSheet1にあり、Sheet2に表示するとします。

標準モジュールにしてください。

Sub Sample1()
 Dim i As Long, k As Long, cnt As Long
 Dim wS As Worksheet
 Dim myAry

  Set wS = Worksheets("Sheet1")
   With Worksheets("Sheet2")
    .Range("A:B").ClearContents
     For i = 1 To wS.Cells(Rows.Count, "A").End(xlUp).Row
      myAry = Split(wS.Cells(i, "B"), " ")
       For k = 0 To UBound(myAry)
        cnt = cnt + 1
         If k = 0 Then
          .Cells(cnt, "A") = wS.Cells(i, "A")
         End If
        .Cells(cnt, "B") = myAry(k)
       Next k
     Next i
    .Activate
   End With
    MsgBox "完了"
End Sub

こんな感じではどうでしょうか?m(_ _)m
この回答への補足あり
    • good
    • 1
この回答へのお礼

ご回答ありがとうございます!
試してみます。
またご連絡させていただきます

お礼日時:2020/09/08 20:04

「区切り位置」機能を使って、C列以降にB列を ”半角スペース” で区切った列を増産する。


んで、
1行目に行挿入してC1セルに「A」を入力、
3行目に行挿入してC3セルに「B」を入力、
5行目に行挿入してC5セルに「C」を入力。
そして、
1行目から6行目を選択してA1セルに「行/列の入れ替え」で貼り付け。
さらに
1行目と2行目を削除して、
C列とD列のデータを切り取って、B列のデータの最後の行のA列のセルに貼り付け。
同様に、E列とF列のデータを切り取って、B列のデータの最後の行のA列のセルに貼り付け。

…この一連の操作をすれば良い。
ポイントは、「区切り位置」と「行/列の入れ替え」で貼り付け、の2つ。
    • good
    • 1
この回答へのお礼

早々のご回答誠にありがとうございます。
件数が少ない時は教えていただいた方法でできそうです!
参考にさせていただきます。
ありがとうございました。

お礼日時:2020/09/08 06:42

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A

このカテゴリの人気Q&Aランキング