
No.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
行単位で行が挿入されると思います。
知らない事は悪い事ではありませんが、間違った事を教えるのは、悪い事だと思いますので反省します。
反省なんて、そんな風に仰らないでください。感謝しております!
#3はそのままコピペでできたのですが、
逆に今回教えていただいた方が実行できないみたいです。
聞いてばかりで申し訳ありませんでした。
自分でも調べてみようと思います。
ありがとうございます。
No.7
- 回答日時:
添附圖參照(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、書式→白のフォント色
以上、「できるだけ詳細」でした。フー

ご回答ありがとうございます。
画像付きで丁寧に説明していただき、
とてもわかりやすく大変参考になります。
恥ずかしながら、一番左の画像のところからつまずいてしまっているので、
どこが違うのか、詳しく調べてみようと思います。
本当にありがとうございました!!
No.6
- 回答日時:
こんにちは
う~~ん・・・
元のデータが、
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)の方法の方が時間効率は高いと言えるかも。
ご回答ありがとうございます。
1はそれぞれの個数分列を挿入するのに時間がかかるかなと思いまして、
2はAやBの入力間違いをしてしまいそうでできれば自動でと
思ったのですが、わがままですね。。
充分使える方法を教えていただき感謝申し上げます。
ありがとうございます!!
No.5
- 回答日時:
Aに対して
C1に
=SUBSTITUTE(B1,A,"|"&A)
コピーして値貼り付け
区切り位置のボタンで|で区切る
分かれたら範囲をコピーして
行列の入れ替えで貼り付け
でした
ご回答ありがとうございます。
ご丁寧に訂正の投稿までしていただき恐縮です。
簡単にできそうですね。参考にさせていただきます。
ありがとうございます!
No.4
- 回答日時:
Aに対して
C1に
=SUBSTITUTE(A,"|"&A)
コピーして値貼り付け
区切り位置のボタンで|で区切る
分かれたら範囲をコピーして
行列の入れ替えで貼り付け
No.3
- 回答日時:
こんにちは、
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列セル範囲)に対しての繰り返し処理
抵抗が無ければ試してください。
そうでなければ、無視してくださいね。。
ご回答ありがとうございます!
試してみます。
詳しくないのでお時間かかってしまうかもしれませんので、
またご連絡させていただきます。
No.2
- 回答日時:
こんにちは!
手っ取り早く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
No.1
- 回答日時:
「区切り位置」機能を使って、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つ。
早々のご回答誠にありがとうございます。
件数が少ない時は教えていただいた方法でできそうです!
参考にさせていただきます。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) VBA 特定の列に入っているテキストをコピペ 2 2023/06/14 11:24
- Excel(エクセル) Excelで数式をそのままコピーしたい どうすればいいですか? 4 2022/09/16 02:16
- Excel(エクセル) こんなことできますか?例えば、sheetに貼り付けた図形のタイトルを、セルA1の文字で表示する。 5 2022/04/22 15:25
- Visual Basic(VBA) A列にある値をB列・C列にVBAで切り出し 3 2022/04/09 19:20
- その他(ブラウザ) テキストを入れるときの縦線の点滅がそれ以外のブラウザ上にも表れます。 1 2022/07/29 21:55
- Access(アクセス) Accessテーブルの結合で別々のテーブルのフィールドを組み合わせて値を出す方法について 2 2022/07/20 19:43
- その他(プログラミング・Web制作) python OpenPyXLを使って出力結果をエクセルに書き込み 2 2022/06/04 19:46
- Word(ワード) Word2013で、複数の表を同時に解除したい 1 2023/01/24 11:37
- その他(ブラウザ) Mycrosoft Edge の「コレクション」に、画像とテキストを追加したい 2 2022/05/28 11:10
- Excel(エクセル) Excel でマクロ利用しセル内テキストを修正しております(半角カナを全角にするなど)。 ただ、セル 4 2023/06/15 21:29
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
特定のセルだけ結果がおかしい...
-
エクセルのdatedif関数を使って...
-
エクセルのVBAで集計をしたい
-
【マクロ】【配列】3つのシー...
-
vba テキストボックスとリフト...
-
エクセル ドロップダウンリスト...
-
【関数】同じ関数なのに、エラ...
-
Office2021のエクセルで米国株...
-
【マクロ】列を折りたたみ非表...
-
9月17日でサービス終了らし...
-
【マクロ】アクティブセルの時...
-
ページが変なふうに切れる
-
【条件付き書式】シートの中で...
-
【マクロ】3行に上から下に並...
-
【マクロ】オートフィルターの...
-
【マクロ】EXCELで読込したCSV...
-
【画像あり】オートフィルター...
-
他のシートの検索
-
エクセルの循環参照、?
-
Excelファイルを開くと私だけVA...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
9月17日でサービス終了らし...
-
エクセル
-
【マクロ】WEBシステムから保存...
-
エクセルの循環参照、?
-
エクセル ドロップダウンリスト...
-
エクセルのdatedif関数を使って...
-
特定のセルだけ結果がおかしい...
-
【マクロ】A列にある、日付(本...
-
【マクロ】EXCELで読込したCSV...
-
【マクロ】アクティブセルの時...
-
【エクセル】期限アラートについて
-
iPhoneのExcelアプリで、別のシ...
-
【関数】同じ関数なのに、エラ...
-
Excelの新しい空白のブックを開...
-
【マクロ】3行に上から下に並...
-
【マクロ】宣言は、何のために...
-
VBA チェックボックスをオーバ...
-
Excelについての質問です 並べ...
-
【マクロ】アクティブセルの2...
-
【関数】不規則な文章から●●-●●...
おすすめ情報
Aのデータは数百件となり、手作業をなるべくしないで済むようにしたいので、
VBAを使用することになるのかなと思いますが、あまり詳しくないので、
できるだけ詳細にご教示いただけるとありがたいです。
よろしくお願いいたします。
ご回答ありがとうございます。
コピペそのままで実行できた上、
とても丁寧なご説明をいただき大変参考になりました。
ほぼ希望通りなのですが、質問には記載しておりませんが
欲を言うと他のセルにもデータが入力されている状態で、
追従して表示できると更に助かるのですが、
もしそちらの方法もご存知でしたらご教示いただけませんでしょうか?
ご回答ありがとうございます。
できました!
こちらを多少改良すれば、希望に沿ったものができそうです。
tom04さんのようにパッと組めること、
とても憧れますので、少しづつ勉強したいと思いました。
ありがとうございました。