■メールアドレス ■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も見ています
-
見学に行くとしたら【天国】と【地獄】どっち?
みなさんは、一度だけ見学に行けるとしたら【天国】と【地獄】どちらに行きたいですか? 理由も聞きたいです。
-
あなたにとってのゴールデンタイムはいつですか?
一週間の中でもっともテンションが上がる「ゴールデンタイム」はいつですか? その逆で、一週間でもっとも落ち込むタイミングでも構いません。 よかったら教えて下さい!
-
これが怖いの自分だけ?というものありますか?
人によって怖いもの(恐怖症)ありませんか? 怖いものには、怖くなったきっかけやエピソードがあって聞いてみるとそんな感覚もあるのかと新しい発見があって面白いです。
-
ちょっと先の未来クイズ第5問
日本漢字能力検定協会が主催し、12月12日に発表される、2024年の「今年の漢字」に選ばれる漢字一文字は何でしょう?
-
14歳の自分に衝撃の事実を告げてください
タイムマシンで14歳の自分のところに現れた未来のあなた。 衝撃的な事実を告げて自分に驚かせるとしたら何を告げますか?
-
エクセルで複数行に散らばった同一人物の情報を一行にまとめたい
Excel(エクセル)
-
エクセル 複数行ある同一商品を1行にまとめるには?
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~12/2】 国民的アニメ『サザエさん』が打ち切りになった理由を教えてください
- ・ちょっと先の未来クイズ第5問
- ・【お題】ヒーローの謝罪会見
- ・これが怖いの自分だけ?というものありますか?
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
数値に見えるものはすべて数値...
-
マクロで最終行を取得してコピ...
-
VB.net
-
【VBA】条件に一致しない行を削...
-
VBAで特定の行と一つ上の行を削...
-
Excel マクロ 検索結果を別シ...
-
エクセルのデータがない行には...
-
エクセルで空白行を削除する ...
-
Excel VBAでオートフィルタで抽...
-
空白を複数行一気に挿入するには?
-
Excel97 指定した行だけマク...
-
vbaエクセルマクロについて she...
-
マクロにて指定の文字間の文字...
-
【VBA】条件に一致しない行を削...
-
関数入りの行挿入。。。上書き...
-
コマンドボタンでの自動計算マ...
-
【EXCEL VBA】行の表示・非表示...
-
【VBA】指定月のオートフィルタ...
-
VBAで保存しないで閉じると空の...
-
Excel マクロの編集がグレーに...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルのデータがない行には...
-
【VBA】条件に一致しない行を削...
-
エクセルで空白行を削除する ...
-
マクロで最終行を取得してコピ...
-
数値に見えるものはすべて数値...
-
Excel VBAでオートフィルタで抽...
-
【VBA】条件に一致しない行を削...
-
VB.net
-
EXCEL VBAでA列にある空白行よ...
-
エクセルのVBAで指定した行数の...
-
Excel マクロ 検索結果を別シ...
-
列から特定の文字列検索→該当以...
-
各個体に対する平均値の自動計...
-
【至急】Excel 同一人物の情報...
-
Excel 別ブックから該当データ...
-
マクロにて指定の文字間の文字...
-
Excel VBA オートフィルタの結...
-
エクセルマクロでグループごと...
-
VBAで特定の行と一つ上の行を削...
-
エクセルで階層図を作る方法
おすすめ情報
皆様ご支援ありがとうございます!
優しさと知識量に感動しています。。。
少し動きが変わりまして、
以下のようなマクロに変更したいのですが、知識が足りな過ぎて分かりません!
ご教示の程よろしくお願いいたします!
添付ファイルの上の表が元データ(Aファイル)このファイルは随時更新されるので、定期的にマクロを実行します。
Aファイルでマクロを実行して、Bファイルに情報をまとめた表を出力したいです。(毎回Bファイルに結果が出るようにする)