dポイントプレゼントキャンペーン実施中!

いつもお世話になっております。
現在dictionary勉強中ですが、なかなかコツをつかめず
思ったとおりのマクロを作成することができません(ノ_;)

ところで、今回作成しているのは
元データ.xlsというファイルのシート(データ)に
  |【A】| B | C |【D】| E | F |・・・|H|I|【J】|K
3  【顧客ID】|顧客|受付日|【担当】|・・・|【会場名】|(見出し)
4  データの始まり↓

と、ありまして、

集計データ.xlsのシート(集計)に
 | A | B | C | D | E | F |
1 顧客ID|担当|会場名|

と二行目から一覧表があります。

A列のIDが一致するものに
Sheet(データ)  →  Sheet(集計)
 セル( i, "D")の値 → セル( j, "B") に
セル( i, "J")の値 → セル( j, "C")に
    セル(j,"C")に値が入っているとき、セル(j,"D")に→Fまで(4回のみ)
A列のIDが一致するものがない時
セル( i, "A")の値 → セル( 最終,"A")に
 セル( i, "D")の値 → セル( 最終, "B") に
セル( i, "J")の値 → セル( 最終,"C")に追加


というように、入れたいのですが、
以下のようなコードをネットで見つけ自分なりに考えて変更を加えてみましたが
あまり分かっていないためどのように変更すればいいのかよく分かりません。どなたかご教授ください。お願いします。
Sub Try()
Dim data_1() As String
Dim data As Long
Dim maxrow As Long
Dim t As Integer, f As Integer, y As Integer

Set ws1 = Worksheets("集計")
Set ws2 = Worksheets("データ")
Application.ScreenUpdating = False
maxrow = ws2.Range("a65536").End(xlUp).Row

With ws1
For i = 2 To Range("a65536").End(xlUp).Row
data = .Cells(i, 1)
f = 0
t = 0
With ws2
t = Application.WorksheetFunction.CountIf(.Range("a4:a" & maxrow), data)
If t > 0 Then
For n = 1 To maxrow
ReDim Preserve data_1(f)
If data = .Cells(n, 1) Then
data_1(f) = .Cells(n, 10)
f = f + 1
If t = f Then Exit For
Else
'A列にIDが存在しなければ追加する:ここの記述がよく分かりません。
data_1(f) = .Cells(n, 1)
End If
Next n

For y = 0 To UBound(data_1)
ws1.Cells(i, maxcol(i)) = data_1(y)
Next y
End If
End With
Next i
End With
Application.ScreenUpdating = True
End Sub
'--------------------------
Private Function maxcol(ByVal i As Long) As Integer
Dim j As Integer

With Worksheets("集計")
j = 4
Do While .Cells(i, j) <> ""
j = j + 1
Loop
maxcol = j
End With
End Function

A 回答 (14件中11~14件)

>dictionary勉強中ですが・


dictionaryはVBSや.NETの概念ではないですか。エクセルVBA独自でそんな機能ありましたっけ。私の不勉強ならすみません。
何で難しい概念・仕組みで解決する必要があるのかな。
ーー
この質問をざっと見て、Findメソッドで「顧客ID」を同じものを他ファイル「集計データ」側で見つけ、そこにデータまたは「顧客ID」で集計済みデータを代入したらよいようなんだが。
こんなに長いコードにならないのではないですか。
見つからなければ最終行以下に追加。
ーー
両ファイルのレコードの並び順と重複出現の点は書いて置いてください。
集計データの顧客ID他は(前月作業とかで)暫定的に中身が出来上がっているのですか。
ーー
読者のことも考えて、読者に長いコードを解読させるコード実例は困る。今後は要点を文章で添えるとかポイントを絞る質問をお願いします。

この回答への補足

Findですね。ありがとうございます。調べます。

補足日時:2008/07/11 12:51
    • good
    • 0

私ならDictionaryを用いますが、過去ログを検索してみては?


”重複”関連も結構ありますよ。
(”OKWaveコミュニティー > デジタルライフ > ソフトウェア > Office系ソフト”
 こちらとかの過去ログも参考になります。

ただ、重複しているものを上に・重複のないものを後ろには、
質問としては私は初めて見ましたので、まったく同じ物が
見つかるかはわかりません。

この回答への補足

アドバイスありがとうございます
一応過去ログは読ませていただきましたが載っていなかったので質問しました

補足日時:2008/07/11 11:36
    • good
    • 0

>セル(j,"C")に値が入っているとき、セル(j,"D")に→Fまで(4回のみ)


重複は4つまでしかないのでしょうか?
5つ以上あるとした場合、4つとは上からor下から?

>dictionary勉強中ですが・・・
Excel(エクセル) VBA入門:Dictionaryオブジェクトを利用する
http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/v …
ご参考まで。

この回答への補足

重複は4つまで、というか基本的にA列目の重複は一つしかありません。
見つからない場合はA列目データを集計シートに追加し
見つかったときには
四回までデータを取り込むようにしたいのです
説明不足ですみません

補足日時:2008/07/11 09:29
    • good
    • 0

>A列のIDが一致するものに


>A列のIDが一致するものがない時
ここが不明です。
何と一致する・しないと言っているのか?

あと、コードとタイトルの関係が不明。

例えば、重複のあるIDを前に・重複のないIDを後ろに、と言う事なら
何となく理解できますけど。。。?

この回答への補足

重複のあるIDの場合C列以降のデータを追加
重複のないIDの場合後ろに
データを追加

です。

補足日時:2008/07/11 07:30
    • good
    • 0

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