質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

3回答

1799閲覧

同じ品番ごとに右隣りのセルをコピー 行列を入替えて貼り付け

tomochan24

総合スコア13

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2018/10/31 09:24

A列に重複する品番があり
B列にA列に品番に対する紐づくコードがあります
A列の重複する同じ品番ごとにB列の紐づくコードを
コピーし、行列を入替えてA列の品番の隣の列へ
行列を入替えて貼り付けをした表を作成したいのですが
構文が全くできません。

A列   B列
A 123
A 456
A 789
B qqq
B eee
B uuu
B ppp
C 123
C 456
C kkk
D nnn
D zzz
上記の一覧を下記の一覧へ別シートに編集

A列   B列   C列  D列   E列
A 123 456 789
B qqq eee uuu ppp
C 123 456
D kkk nnn zzz

施行錯誤しましたが構文も出来ず、こちらへ質問させて頂きました。
このような事がvbaで可能でしょうか。
ご教授頂ければ、幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

品番の重複排除、品番に紐づくコードの検索ということなので、Dictionaryオブジェクト(連想配列)と相性のいい要件だと思います。

vba

1Sub データ変換() 2 Dim Tbl() As Variant 'Sheet1の表データを配列に角納 3 Tbl() = Worksheets("Sheet1").Range("A1").CurrentRegion.Value 4 5 Dim Dic As Object '連想配列 Keyに品番、Itemにコードのリストを角納 6 Set Dic = CreateObject("Scripting.Dictionary") 7 Dim i As Long 8 For i = 1 To UBound(Tbl) 9 If Dic.exists(Tbl(i, 1)) Then 10 Dic.Item(Tbl(i, 1)) = Dic.Item(Tbl(i, 1)) & "," & Tbl(i, 2) 11 Else 12 Dic(Tbl(i, 1)) = Tbl(i, 2) 13 End If 14 Next 15 16 Dim rng As Range 17 Set rng = Worksheets("Sheet2").Range("A1") 'コピー先の先頭セル 18 19 Dim v, a 20 For Each v In Dic 21 rng.Value = v '品番を代入 22 a = Split(Dic.Item(v), ",") 'コードリストを配列に変換 23 rng.Offset(, 1).Resize(1, UBound(a) + 1).Value = a 'コードを代入 24 Set rng = rng.Offset(1) '次行に移動 25 Next 26End Sub

投稿2018/11/01 07:38

hatena19

総合スコア33715

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tomochan24

2018/11/01 10:17

ありがとうございます。 VBAの初心者で勉強不足を痛感されられました。 ご丁寧な回答ありがとうございませす。 連想配列も知りませんでしたが、自分で頂いた回答のような構文が書けるよう。 勉強いたします。
guest

0

それほど難しい処理ではないと思います。
元のシートをA、転記用のシートをBとして書きます。

  1. N=1
  2. シートAのN行目A列を取得
  3. シートBのA列にあるか検索
  4. あればその行の右端にシートAのN行目B列をコピー
  5. なければ最終行にシートAのN行目A列とB列をコピー
  6. NをインクリメントしてシートAのN行目A列がなくなるまで繰り返す

文章に起こせばたいしたことがない処理なのはわかると思います。
あとはそれぞれの処理が実装できるかどうかですね。

投稿2018/11/01 00:01

ttyp03

総合スコア16998

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

このような事がvbaで可能でしょうか。

可能です。似たようなことを行った実績はあります。
ただし、特定の構文で一発というわけにもいかず、あーだこーだとこねくり回す必要がありました。

「手作業でやるときの手順を思い出し、書き出してみる」というのが、迷ったときの打開策になったりします。私の場合は下記のような手順になりました。

  1. 別シートを用意する。
  2. 用意したシートのA列にA, B, C, Dを書き込む
  3. A列を見比べつつ、対応するB列を横に並べていく。

他の(もっと良い)やり方もあるでしょう。

投稿2018/10/31 14:29

morinatsu

総合スコア395

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問