アプリ版:「スタンプのみでお礼する」機能のリリースについて

いつもこちらで勉強させていただいています。
まだまだ、自力ではコードを書くのが難しくこちらを参考にしながらVBAを勉強しております。

色々探したのですが、同じような内容が見当たらず・・・ご教授頂きたいです!

A列に名前、B列に商品名が入っている50行くらいのデータがあります。
B列の商品名はカンマ区切りで複数入っています。(個数はバラバラ)
このデータを別シートに
A列に名前、B列に商品を1つずつ入るように形成したいです。

一行だけだったら簡単に出来たのですが、複数行あり最後の行にくっつけたいと言うのがどうかけば良いのかわからなくて困っております。

教えて頂けると嬉しいです。よろしくお願いいたします。

「【VBA】複数行あるカンマ区切りのデータ」の質問画像

A 回答 (5件)

以下のマクロを標準モジュールに設定してください。


元のシートをSheet1、別シートをSheet2としています。
(これはあなたの環境にあわせて適切に設定してください)
別シートの2行目以降からマクロで書き込みを行います。
別シートの1行目の見出しは、あなたがあらかじめ作成しておいてください。
-----------------------------------------
Option Explicit
Public Sub 注文分割()
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Dim row1 As Long
Dim row2 As Long
Dim maxrow As Long
Dim words As Variant
Dim i As Long
Set sh1 = Worksheets("Sheet1")
Set sh2 = Worksheets("Sheet2")
sh2.Rows("2:" & Rows.Count).ClearContents
maxrow = sh1.Cells(Rows.Count, "A").End(xlUp).Row 'sheet1 A列の最大行取得
row2 = 2
For row1 = 2 To maxrow
words = Split(sh1.Cells(row1, "B").Value, ",")
If UBound(words) < 0 Then
sh2.Cells(row2, "A").Value = sh1.Cells(row1, "A").Value
row2 = row2 + 1
End If
For i = 0 To UBound(words)
If i = 0 Then
sh2.Cells(row2, "A").Value = sh1.Cells(row1, "A").Value
End If
sh2.Cells(row2, "B").Value = words(i)
row2 = row2 + 1
Next
Next
MsgBox ("完了")
End Sub
    • good
    • 1
この回答へのお礼

助かりました

ありがとうございます!!!
なんとこのままで思う通りの動作をしました。
貼り付けたあとに1つ1つ内容を確認していってます。

大変勉強になりました!!ありがとうございました。

お礼日時:2022/04/14 17:20

こんばんは



シート名が不明なので適当に設定してあります。

Sub Q12898135()
Dim sht As Worksheet
Dim rng As Range, v
Dim Mrw As Long, rw As Long, drw As Long

Set sht = Worksheets("Sheet1") '←元データのあるシート
With Worksheets("Sheet2") '←別シート
Mrw = sht.Cells(Rows.Count, 1).End(xlUp).Row
.Columns("A:B").ClearContents
sht.Range("A1:B1").Copy .Range("A1:B1")
Set rng = .Cells(2, 2)

For rw = 2 To Mrw
v = Split(Replace(sht.Cells(rw, 2).Text, "、", ","), ",")
rng.Offset(, -1).Value = sht.Cells(rw, 1).Value
drw = UBound(v) + 1
If drw > 0 Then
rng.Resize(drw).Value = WorksheetFunction.Transpose(v)
End If
Set rng = rng.Offset(Application.Max(drw, 1))
Next rw
End With
End Sub
    • good
    • 5
この回答へのお礼

解決しました

ありがとうございます!!!
思う通りの動きをしました!!

内容がかなりわたりにはレベルが高い感じで
このように書くこともできるんだーとただただ感心してしまいました。

本当にありがとうございます!

お礼日時:2022/04/14 17:23

こんにちは


同様のご質問はQAサイトではよく見るご質問ですね
ですので取り合えず やり方の一例です

①A列でループ処理を行う For・・・
別シートA列に出力
②B列をカンマ区切りで分ける Split
③分けたデーター個数分 ループする
別シートB列に出力
出力する度に行を増やす(下へ)(変数を+1)
(行を増やす変数はA列出力B列出力共通の変数にする)

①に戻る Next(行方向で) 

そんなに処理数は多くないので・・Split あたりを検索して
参考サイトを見てみましょう。
ループ内の
(行を増やす変数はA列出力B列出力共通の変数にする)
を考えれば理解できると思います。。

コード書いた方が判り易いですか?
    • good
    • 1
この回答へのお礼

ありがとう

ありがとうございます!!!
教えていただいた内容ふむふむとわかった気になっておりましたが
実際に書こうとしたら③が??となってしまいました。。

他の方がコードも記載してくださっているようなので
それでももし分からないとなったら、、、、またお助け頂けると嬉しいです!!!

お礼日時:2022/04/14 16:29

>最後の行にくっつけたいと言うのがどうかけば良いのかわからなくて



既にデータが入っているのでその続きに付け足したいと言う事でしょうか?
ようはB列の最終行の次の行にA・B(1番目のデータ)列に値を入れたい?

探すっていうのも丸々同じ質問に当たる事はそんなにないですよ。
⇒BMIの計算ってのは毎年見ますけど。

どの様にデータを弄り何をすべきかって事で検索しますけど、多分そこが悩まれているのかな?
1行であれば出来たならあとは繰り返すループ処理でしょうね。
その際どこに書き出すかを何で取得するかが大きいかも。
    • good
    • 0
この回答へのお礼

ありがとうございます!
まさしくループ処理の部分で困ってしまっていました。
何をどのような順番で書いてループさせれば良いのか?というのが????となってしまいました。

お礼日時:2022/04/14 16:27

コピー元とコピー先で行番号を別々にもたせてうまいことインクリメントしてください。

    • good
    • 1
この回答へのお礼

ご回答頂きありがとうございます!!!
なんと、インクリメントという言葉を知らず。勉強することが出来まし(そこかよwって思われてしまうかもですが。。。)

お礼日時:2022/04/14 16:26

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

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


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