
■メールアドレス ■A ■B ■C
123@abc.co.jp 有 有
456@abc.co.jp 有 有
123@abc.co.jp 有
同一人物のデータが何度も入力されていて、それぞれの行で情報量がバラバラです。
単純に重複と扱って1行目以降を削除するわけにいきません。
そこで、メールアドレスを基に、その他の情報は一行にまとめたいです。
どう処理すれば可能でしょうか。
まとめたい情報列はA列~I列まであります。
約500行です。
■メールアドレス ■A ■B ■C
123@abc.co.jp 有 有
456@abc.co.jp 有 有
123@abc.co.jp 有
↓↓↓↓↓↓↓↓↓↓↓↓↓↓
■メールアドレス ■A ■B ■C
123@abc.co.jp 有 有 有
456@abc.co.jp 有 有
以下のマクロで実行してみましたが、エラーとなって上手くいきません。
恐らく「SpecialCells(xlCellTypeVisible)」でエラーとなっています。
Sub Sample1() 'この行から//
Dim i As Long, lastRow1 As Long, lastRow3 As Long
Dim wS2 As Worksheet, wS3 As Worksheet
Set wS2 = Worksheets("Sheet2")
Set wS3 = Worksheets("Sheet3")
Application.ScreenUpdating = False
With Worksheets("Sheet1")
lastRow1 = .Cells(Rows.Count, "A").End(xlUp).Row
.Range("A:A").AdvancedFilter Action:=xlFilterCopy, copytorange:=wS2.Range("A1"), unique:=True
For i = 2 To wS2.Cells(Rows.Count, "A").End(xlUp).Row
wS3.Cells.ClearContents
.Range("A1").AutoFilter field:=1, Criteria1:=wS2.Cells(i, "A")
Range(.Cells(2, "A"), .Cells(lastRow1, "I")).SpecialCells(xlCellTypeVisible).Copy wS3.Range("A1")
lastRow3 = wS3.Cells(Rows.Count, "A").End(xlUp).Row
Range(wS3.Cells(1, "A"), wS3.Cells(lastRow3, "I")).SpecialCells(xlCellTypeBlanks).Delete shift:=xlUp
Range(wS3.Cells(1, "B"), wS3.Cells(1, "I")).Copy wS2.Cells(i, "B")
Next i
.AutoFilterMode = False
wS3.Cells.Clear
wS2.Columns.AutoFit
End With
Application.ScreenUpdating = True
wS2.Activate
End Sub 'この行まで//
宜しくお願いします。
No.5ベストアンサー
- 回答日時:
こんばんは
No2様に1票。
エラーの内容が不明ですが、SpecialCells()でエラーが出る場合、該当するセルが存在しないケースが多いです。
・SpecialCells(xlCellTypeVisible)
通常ならあり得ますが、ご提示の処理の場合は、抽出した値でフィルターをかけているので、最低でも1行は該当行が存在するはずなので、エラーになるとは思いにくいです。
・SpecialCells(xlCellTypeBlanks)
元データが全て「有」で埋まっている場合は、該当するセルが存在しないため、エラーになる可能性がありそうです。
シートの機能を利用する計算方法を採用なさっていると思いますが、作業用のシートを使わずとも処理は可能とそうに思います。
以下は、関数を利用して処理を行う例ですが、ご参考までに。
面倒な部分は関数にして、エクセルに計算してもらうようにしていますので、マクロそのものは比較的簡単な内容になっていると思います。(笑)
・1行目はタイトル行と仮定しています。
・元データがあるのがSheet1、結果をSheet2に表示する例です。
・セルの値が、「有」かそれ以外かで判断しています。
Sub Sample()
Dim ws As Worksheet
Dim r1 As Range, r2 As Range
Dim n As Long
Const f = "=IF(SUMPRODUCT((Sheet1!@1=$A2)*(Sheet1!@2=""有"")),""有"","""")"
Set ws = Worksheets("Sheet1")
n = ws.Cells(Rows.Count, 1).End(xlUp).Row
Set r1 = ws.Range("A2").Resize(n)
With Worksheets("Sheet2")
.Cells.UnMerge
.Cells.ClearContents
ws.Range("A1:I1").Copy .Range("A1")
r1.Copy .Range("A2")
.Range("A2").Resize(n).RemoveDuplicates 1
n = .Cells(Rows.Count, 1).End(xlUp).Row
If n < 2 Then Exit Sub
Set r2 = .Range("B2").Resize(n - 1, 8)
r2.FormulaLocal = Replace(Replace(f, "@1", r1.Address(1)), "@2", r1.Offset(, 1).Address(1, 0))
r2.Value = r2.Value
End With
End Sub
No.6
- 回答日時:
#2 です
本ご質問は掲示されたエラーについて原因と対策だと存じます
内容が変わったのなら、各回答への対応などを行ってご質問を閉じ、
再質問をしてください(D・・項目の有無や *セルの意味も気になりますしね)
後から、ご質問タイトルなどで訪れた方の為にも 同じご質問内での再質問は控えた方が良いと思います。
No.4
- 回答日時:
取り敢えずデータはA~I列で今回問題となるのはB~D列だけで、E列以降はA列が重複しててもデータに相違はないと思って宜しいのでしょうか?
⇒逆に相違があるならどうするのかとか、実はB~D列ではなくB~I列が詰める範囲になっているとか?
No.3
- 回答日時:
初期状態を以下の状態とします。
A列:■メールアドレス
B列:■A
C列:■B
D列:■C
※つまり、A2が「123@abc.co.jp」、A3が「456@abc.co.jp」の状態
1)
E2のセルに以下の式を記入します。
=IF(B2="有",1,0)
※B2のセルが"有"だったら1を、そうでなかったら0を表示する
2)
E2のセルを、E2からG4までコピペします。
3)
H列に、メールアドレスをコピペ後、H列を選んだ状態でExcelのメニューから、「データ」→「重複削除」で、選択されている範囲だけ重複削除します。
4)
I2のセルに以下の式を記入します。
=SUMIFS(E2:E4,$A2:$A4,$H2)
※H2とA2~A4の値が一致する行があったら、E2~E4の合計値を表示する
5)
I2のセルを、I2からK3までコピペします。
これで、H列からK列までを見ると、「有」にしたいセルに「1以上の値」が表示されていると思います。
どうしても「有」を表示したいのであれば、更に「=if()」を使用してください。
No.2
- 回答日時:
こんにちは
ちょっと試していませんが
良くあるのは
SpecialCells(xlCellTypeBlanks).Delete shift:=xlUp こっちでは?
ここなら、作業シートにしているws3に空白セルがない場合発生するかも・・・
SpecialCells(xlCellTypeVisible).Copyは
wS2.Cells(i, "A")該当しない値ってあるのかな・・
取り合えず On Error Resume Next で処理を飛ばすと結果が変わる?かな
No.1
- 回答日時:
とりあえずマクロコピペで試しましたが、
エラーは出ず、想定していると思われる結果になりましたよ。
どんなエラーが出ているのか、それが鍵になると思います。
補足投稿しましょう。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) マクロで最終行から上に検索を逆にしたい 1 2022/05/17 18:27
- Visual Basic(VBA) vbaを早くしたい 5 2022/09/09 10:58
- Visual Basic(VBA) エクセルVBAで教えて頂きたいのですが? 2 2022/12/31 20:28
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Excel(エクセル) なぜExit Subがあるのかわかりません 4 2023/02/19 12:34
- Excel(エクセル) VBAで組み合わせ算出やCOUNTIFSの処理を高速化したいです。 4 2022/04/07 02:38
- Visual Basic(VBA) Excelで下記のようにマクロを作ったところ、一回目は実行できたのですが、二回目以降「実行時エラー1 1 2022/03/25 08:08
- Visual Basic(VBA) ExcelVBAでDo Until loopのネスト、IF文を使って一致する物と一致しない物としたい 11 2022/12/24 17:46
- Visual Basic(VBA) VBAで教えて頂きたいのですが? 1 2022/04/29 02:36
- Visual Basic(VBA) VBA処理追加 こちらでご教示頂いたのですが回答完了させてしまいましたのでこちらからまた質問させてく 2 2022/10/27 09:57
このQ&Aを見た人はこんなQ&Aも見ています
-
初めて見た映画を教えてください!
初めて見た映画を覚えていますか?
-
歳とったな〜〜と思ったことは?
歳とったな〜〜〜、老いたな〜〜と思った具体的な瞬間はありますか?
-
あなたの「プチ贅沢」はなんですか?
お仕事や勉強などを頑張った自分へのご褒美としてやっている「プチ贅沢」があったら教えてください。
-
あなたなりのストレス発散方法を教えてください!
自分なりのストレス発散方法はありますか?
-
今から楽しみな予定はありますか?
いよいよ2025年が始まりました。皆さんには、今から楽しみにしている予定はありますか?
-
エクセルで複数行に散らばった同一人物の情報を一行にまとめたい
Excel(エクセル)
-
エクセル 複数行ある同一商品を1行にまとめるには?
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・「これはヤバかったな」という遅刻エピソード
- ・初めて自分の家と他人の家が違う、と意識した時
- ・いちばん失敗した人決定戦
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
マクロで最終行を取得してコピ...
-
Excel VBAでオートフィルタで抽...
-
【VBA】条件に一致しない行を削...
-
数値に見えるものはすべて数値...
-
エクセルのデータがない行には...
-
【VBA】条件に一致しない行を削...
-
Access2003レポート:最終ペー...
-
VBAで入力の結果を他のセルに反...
-
エクセルで空白行を削除する ...
-
VBA 複数列コンボボックス 値の...
-
エクセルマクロでの行削除の方...
-
マクロにて指定の文字間の文字...
-
Excel97 指定した行だけマク...
-
オートフィルターの複数条件検...
-
EXCEL VBAでA列にある空白行よ...
-
エクセルのマクロについて質問...
-
Excel マクロ 検索結果を別シ...
-
vbaエクセルマクロについて she...
-
Excelで、あるセルの値に応じて...
-
VB.net
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
マクロで最終行を取得してコピ...
-
【VBA】条件に一致しない行を削...
-
数値に見えるものはすべて数値...
-
エクセルで空白行を削除する ...
-
Excel VBAでオートフィルタで抽...
-
VB.net
-
エクセルのデータがない行には...
-
列から特定の文字列検索→該当以...
-
【VBA】条件に一致しない行を削...
-
Excel マクロ 検索結果を別シ...
-
マクロにて指定の文字間の文字...
-
エクセルで階層図を作る方法
-
EXCEL VBAでA列にある空白行よ...
-
VBAで入力の結果を他のセルに反...
-
各個体に対する平均値の自動計...
-
vbaエクセルマクロについて she...
-
テキストファイル読み込みにお...
-
Excel97 指定した行だけマク...
-
コマンドボタンでの自動計算マ...
-
Access2003レポート:最終ペー...
おすすめ情報
皆様ご支援ありがとうございます!
優しさと知識量に感動しています。。。
少し動きが変わりまして、
以下のようなマクロに変更したいのですが、知識が足りな過ぎて分かりません!
ご教示の程よろしくお願いいたします!
添付ファイルの上の表が元データ(Aファイル)このファイルは随時更新されるので、定期的にマクロを実行します。
Aファイルでマクロを実行して、Bファイルに情報をまとめた表を出力したいです。(毎回Bファイルに結果が出るようにする)