Sheet1には以下のデータが入力されています。
NO TIMES SCORE
1 1 20
1 2 30
1 3 25
2 1 50
2 2 40
2 3 45
3 1 70
3 2 75
4 3 3
いっぽうsheet2には以下のデータが入力されています。
NO NAME SEX AGE
1 Aさん 男 31
2 Bさん 女 27
3 Cさん 女 33
4 Dさん 男 26
この2つのデータをNOをキーとして横に結合したいのですが
VBAでこのような結合操作はできるものでしょうか?
NO NAME SEX AGE TIMES SCORE
1 Aさん 男 31 1 20
1 Aさん 男 31 2 30
1 Aさん 男 31 3 25
2 Bさん 女 27 1 50
2 Bさん 女 27 2 40
2 Bさん 女 27 3 45
3 Cさん 女 33 1 70
3 Cさん 女 33 2 75
4 Dさん 男 26 3 3
if文を使ってNOが1ならNAMEがAさん、SEXが男・・・という
条件文をかけばできないこともありませんが、
実際のデータではNOが450もありますので
非効率と考えています。
もしご存知でしたら教えていただけませんか。
よろしくお願いいたします。
No.3ベストアンサー
- 回答日時:
シート1の横にシート2の情報を貼り付ける方法です。
質問に提示された列の並びと異なりますが、結合と言う意味では
要件を満たしていると思います。
シート2は見出しを含め451行あると仮定します。
Sub Sample()
Dim SH1 As Range
Dim SH2 As Range
Dim i As Long
Set SH1 = Sheets("Sheet1").Range("a1").CurrentRegion
Set SH2 = Sheets("Sheet2").Range("a1:d451")
For i = 2 To SH1.Rows.Count
SH1.Cells(i, 4) = Application.VLookup(SH1.Cells(i, 1), SH2, 2, 0)
SH1.Cells(i, 5) = Application.VLookup(SH1.Cells(i, 1), SH2, 3, 0)
SH1.Cells(i, 6) = Application.VLookup(SH1.Cells(i, 1), SH2, 4, 0)
Next i
Set SH1 = Nothing
Set SH2 = Nothing
End Sub
以上です。
ありがとうございます。
コンパクトで分かりやすいですね。
SETというものを知らなかったので、大変勉強になりました。
ありがとうございます。
自分でもコードを1からなぞって勉強させていただきます。
ところでコード中にa1:d451ってありますが、この451を
SH1.Rows.COUNTに置き換えることってできるのでしょうか?
No.5
- 回答日時:
#3です。
>ところでコード中にa1:d451ってありますが、この451を
>SH1.Rows.COUNTに置き換えることってできるのでしょうか?
シート1とシート2では行数が異なると思いますので、出来ません。
汎用性と言う意味ではRange("a1:d451")の代わりにRange("a1").CurrentRegion
とした方が良いかもしれません。
No.4
- 回答日時:
VBAを持ち出さずとも、VLOOKUPで十分ではないかと思いましたが、VBAで式を、動的な対象範囲に対して生成するのはどうやるのかなと、気になったのでやってみました。
#3と考え方は似ているかもしれません。ご参考まで...とは言い難いですが。'Sheet1,Sheet2のデータを照合して、Sheet3にまとめる
Sub test()
Dim destRange As Range
Dim i As Long
Dim master As Range
Dim fieldNames As Range
Sheets("Sheet1").Cells.Copy Sheets("Sheet3").Range("a1")
Set master = Sheets("Sheet2").Range("a1").CurrentRegion
Set fieldNames = master.Rows(1)
Set master = master.Offset(1, 0).Resize(master.Rows.Count - 1, master.Columns.Count)
Set destRange = Sheets("Sheet3").Range("a1").CurrentRegion
Set destRange = destRange.Offset(1, 0).Resize(destRange.Rows.Count - 1, destRange.Columns.Count)
For i = 2 To 4
destRange.Columns(i).EntireColumn.Insert Shift:=xlToRight
destRange.Columns(i).FormulaR1C1 = "=VLOOKUP(RC1,Sheet2!" & master.Address(True, True, xlR1C1) & "," & Format(i, "0") & ",false)"
Next i
fieldNames.Copy Sheets("Sheet3").Range("a1")
End Sub
関数入力を自動記録すると、R1C1形式で記述される事を知りました。
ありがとうございます。
今まではvlookupでやっていたのですが、ここひと月前から
VBAを勉強中でして、実際に今までやってきた業務を
VBAでできるかチャレンジしていたのでした。
いやいやみなさん、スラスラとお書きになられるようで
すばらしいです。
いただいたコードを勉強します!
No.1
- 回答日時:
Sheet2にはNoの重複がないものとして、結果をSheet3に書き出します。
Sub test()
Dim Dic As Object
Dim i As Long, j As Long
Dim m As Long, n As Long
Dim v, w, x
Set Dic = CreateObject("Scripting.Dictionary")
With Worksheets("Sheet2")
v = .Range(.Range("A2"), .Range("A" & Rows.Count).End(xlUp).Resize(, 4)).Value
End With
ReDim x(1 To 6, 1 To 1): m = 1
For i = 1 To UBound(v, 1)
Dic.Add v(i, 1), Array(v(i, 2), v(i, 3), v(i, 4))
Next
With Worksheets("Sheet1")
w = .Range(.Range("A2"), .Range("A" & Rows.Count).End(xlUp).Resize(, 3)).Value
For j = 1 To UBound(w, 1)
If Dic.exists(w(j, 1)) Then
x(1, m) = w(j, 1): x(2, m) = Dic(w(j, 1))(0)
x(3, m) = Dic(w(j, 1))(1): x(4, m) = Dic(w(j, 1))(2)
x(5, m) = w(j, 2): x(6, m) = w(j, 3)
m = m + 1
ReDim Preserve x(1 To 6, 1 To m)
End If
Next
End With
With Worksheets("Sheet3")
.Range("A1:F1").Value = Array("NO", "NAME", "SEX", "AGE", "TIMES", "SCORE")
.Range("A2").Resize(m - 1, 6).Value = Application.Transpose(x)
End With
Set Dic = Nothing
Erase v, w, x
End Sub
ご参考になれば。
ありがとうございます。
非常にエレガントなコードですね。
コードを見せていただきましたが、知らない構文がいろいろと
あるので、いい勉強材料をいただいたと感謝しております。
やはり本よりも人が書いたコードのほうが勉強になりますね。
私もあなたのようにスラスラとコードが書けるように
がんばっていきたいです。
今後ともよろしくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
家の中でのこだわりスペースはどこですか?
自分の家で快適に過ごすために工夫しているスペースはありますか? 例)ベランダでお茶を飲むためのカフェテーブル ゲーミングに特化したこだわりのPCスペース
-
家・車以外で、人生で一番奮発した買い物
どんなものにお金をかけるかは人それぞれの価値観ですが、 誰もが一度は清水の舞台から飛び降りる覚悟で、ちょっと贅沢な買い物をしたことがあるはず。
-
「これはヤバかったな」という遅刻エピソード
寝坊だったり、不測の事態だったり、いずれにしても遅刻の思い出はいつ思い出しても冷や汗をかいてしまいますよね。
-
牛、豚、鶏、どれか一つ食べられなくなるとしたら?
牛肉、豚肉、鶏肉のうち、どれか一種類をこの先一生食べられなくなるとしたらどれを我慢しますか?
-
「お昼の放送」の思い出
小学校から中学校、ところによっては高校まで お昼休みに校内放送で、放送委員が音楽とかおしゃべりとか流してましたよね。 最近は自分でもラジオができるようになって、そのクオリティもすごいことになっていると聞きます。
-
EXCEL VBAで複数シートから該当列のみを別シート列方向に順番に貼り付け
Visual Basic(VBA)
-
複数のCSVファイルを横に並べてひとつのエクセルファイルへ結合する方法
Excel(エクセル)
-
複数csvを横に追加していくマクロについて
Visual Basic(VBA)
-
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
男性側はセックスでの挿入時、...
-
男性に質問です! 男性は女性の...
-
女性はマンコ舐めてほしいんで...
-
生とゴムの違い
-
昨日の晩にスゴくいやらしい体...
-
息子と性的関係になり抜け出せない
-
処女とエッチして 相手の男性が...
-
エロくなってきた妻
-
28才OLです、マスターベー...
-
男性が好きな人でオナニーする...
-
付き合えそうな女性との行為…想...
-
入れられてる側は(女性側)どん...
-
男性は好きな女性なら挿入行為...
-
職場の女性社員を見て妄想する...
-
男の人が勃ってるときって、頭...
-
処女のとき、何回目のHで挿入...
-
セフレの女性が離れていきそうな時
-
彼女はみんな彼氏にクンニをし...
-
男性に質問!女の人がイク時っ...
-
私はちんこが好きです。 凄く下...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
男性側はセックスでの挿入時、...
-
男性に質問です! 男性は女性の...
-
昨日の晩にスゴくいやらしい体...
-
処女とエッチして 相手の男性が...
-
男性が好きな人でオナニーする...
-
息子と性的関係になり抜け出せない
-
男性に質問:彼女をオカズにし...
-
女性はマンコ舐めてほしいんで...
-
エロくなってきた妻
-
28才OLです、マスターベー...
-
生とゴムの違い
-
処女を抱いた男性へ質問です
-
付き合えそうな女性との行為…想...
-
男性は好きな女性なら挿入行為...
-
入れられてる側は(女性側)どん...
-
職場の女性社員を見て妄想する...
-
処女のとき、何回目のHで挿入...
-
セフレの女性が離れていきそうな時
-
男の人が勃ってるときって、頭...
-
男性は前戯だけでも我慢できる...
おすすめ情報