ここから本文です

ありがとうございました。

hdk********さん

2011/12/1322:35:11

ありがとうございました。

Sheet1からSheet2へ。
余り綺麗ではないVBAですが、
一例になれば。

Sub try()
Dim myDic As Object
Dim r As Range
Dim st As String
Dim v As Variant
Dim m As Integer・・・・続く

上の回答頂いたものです。今後項目が増えたり色々変化があった場合に手を加えたいので誠にお手数ですが最初から最後までそれぞれの文章の意味を教えて頂けませんか?よろしくおねがいします。

閲覧数:
359
回答数:
1
お礼:
250枚

違反報告

ベストアンサーに選ばれた回答

ads********さん

2011/12/1416:24:09

Sub try()
' 変数:myDic をObject型で宣言
Dim myDic As Object
Dim r As Range
Dim st As String
Dim v As Variant
Dim m As Integer

' Dictionaryオブジェクトをセット
Set myDic = CreateObject("Scripting.Dictionary")

With Worksheets("Sheet1")

' Sheet1のB2~B列最終行までを取得
For Each r In Range(.Range("B2"), .Cells(Rows.Count, 2).End(xlUp))

' 変数:stに""を代入
st = ""

' B列からF列までの値を順次取得し
' "_"で連結しながらstに代入していく
For m = 0 To 4
st = st & r.Offset(, m).Value & "_"
Next

' 上記stで取得した値がDictionaryオブジェクトのキーに
' 存在しない場合
If Not myDic.Exists(st) Then

' そのキーに対するアイテムとして1次元配列でA~G列の値を
' 代入していく
myDic(st) = Array(r.Offset(, -1).Value, r.Value, r.Offset(, 1).Value, _
r.Offset(, 2).Value, r.Offset(, 3).Value, r.Offset(, 4).Value, r.Offset(, 5).Value)

Else ' もしキーに存在した場合

' 変数:vにstをキーとするアイテムを代入する
v = myDic(st)

' v(0) にもし"~"が含まれていたなら
' 取得したv(0)の文字列を"~"で区切った添字(0)の値と
' A列の値を"~"でつないでv(0)に代入しなおす

' もし"~"が含まれていなかったら
' 元のv(0)にA列の値を"~"でつないでv(0)に代入しなおす
v(0) = IIf(InStr(v(0), "~") > 0, _
Split(v(0), "~")(0) & "~" & r.Offset(, -1).Value, _
v(0) & "~" & r.Offset(, -1).Value)

' v(6):数量として代入されている数字をVal関数で数値とし
' G列の値と加算してv(6)に代入しなおす
v(6) = Val(v(6)) + r.Offset(, 5).Value

' 1次元配列:vを改めてアイテムとして代入しなおす
myDic(st) = v

End If

Next

End With


With Worksheets("Sheet2")

' Sheet2のA1~G1にSheet1のA1~G1の値を代入する
.Range("A1:G1").Value = Worksheets("Sheet1").Range("A1:G1").Value

' 1次元配列のDictionaryオブジェクトのアイテムを
' Transpose関数の2重くくりで2次元配列として
' Sheet2のA2以下に吐き出させる
.Range("A2").Resize(myDic.Count, 7).Value = Application.Transpose(Application.Transpose(myDic.Items))
End With

Set myDic = Nothing
Erase v

End Sub

Dictionaryオブジェクトについては

Excel(エクセル) VBA入門:Dictionaryオブジェクトを利用する
http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_dictionary.html

等が参考になるかと。

この回答は投票によってベストアンサーに選ばれました!

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる