
シート1 シート2
A列 A列
AAA AAA
BBB BBB
CCC DDD
AAA CCC
↓
シート3
A列
AAA
BBB
CCC
DDD
上記のように複数シートに入力されているデータを別のシートに重複なしで抽出するVBAを作りたいので、お知恵を貸して頂きたいです。
VBA初心者ですので、ご迷惑をおかけするとは思いますが、よろしくお願いします。
ちなみに
単一の列を同じシートの列に抽出するVBAはネットで探して成功しました。
それが以下のコードです。
Sub リスト作成()
Dim A As New Collection, i As Long
On Error Resume Next
For i = 3 To Cells(Rows.Count, 3).End(xlUp).Row
A.Add Cells(i, 3), Cells(i, 3)
Next i
On Error GoTo 0
For i = 1 To A.Count
Cells(i + 2, 6) = A(i)
Next i
End Sub
No.8ベストアンサー
- 回答日時:
以下のマクロを標準モジュールに登録してください。
Option Explicit
Dim sh3 As Worksheet
Dim dicT As Object
Dim row3 As Long
Public Sub 重複無()
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Dim maxrow3 As Long
Set sh1 = Worksheets("Sheet1")
Set sh2 = Worksheets("Sheet2")
Set sh3 = Worksheets("Sheet3")
Set dicT = CreateObject("Scripting.Dictionary") ' 連想配列の定義
maxrow3 = sh3.Cells(Rows.Count, "B").End(xlUp).Row 'B列最終行を求める
sh3.Range("B4:B" & maxrow3).ClearContents 'B列4行以降をクリア
row3 = 4
Call シート3出力(sh1)
Call シート3出力(sh2)
MsgBox ("完了")
End Sub
Private Sub シート3出力(ByVal ws As Worksheet)
Dim maxrow As Long
Dim wrow As Long
Dim key As String
maxrow = ws.Cells(Rows.Count, "A").End(xlUp).Row 'A列最終行を求める
For wrow = 3 To maxrow
key = ws.Cells(wrow, "A").Value
If key <> "" Then
If dicT.exists(key) = False Then
dicT(key) = True
sh3.Cells(row3, "B").Value = key
row3 = row3 + 1
End If
End If
Next
End Sub
No.9
- 回答日時:
質問はあくまで重複をなくすことではありますが、実際には重複に絡むデータ列が存在しているとかでは?
とまずは気になりますね。
その重複削除した際にデータを追従させる手段も悩まれてたりはしませんか?
⇒セル範囲の取得法など。
違ってたらスル~して下さいな。
No.6
- 回答日時:
こんにちは
説明にはA列と書いてあって、コードでは3列目(=C列)をいじくっているように見えるけれど、本当のところは何をなさりたいのでしょうか?
>貼り付ける場所がデータ量によって異なりませんか?
VBAなんだから、調べれば良いだけ。
なさりたいことがよくわからないので、勝手に妄想してみました。
(当たるも八卦ですが、A列を集約します)
・「指定シートが存在しない」など、エラーチェックは一切行省いてあります。
Sub Q13000652()
Dim sh As Worksheet, rg As Range
Dim rw As Long, sName
With Worksheets("Sheet3")
.Columns(1).ClearContents
Set rg = .Cells(1, 1)
For Each sName In Array("Sheet1", "Sheet2")
Set sh = Worksheets(sName)
rw = sh.Cells(Rows.Count, 1).End(xlUp).Row
rg.Resize(rw).Value = sh.Cells(1, 1).Resize(rw).Value
Set rg = rg.Offset(rw)
Next sName
.Columns(1).RemoveDuplicates (1)
End With
End Sub
No.5
- 回答日時:
dictionary 重複なし vba
で検索するとサンプル見つかると思いますよ。この用途だとCollectionよりDictionaryの方が分かりやすいです。
頑張って。
No.3
- 回答日時:
質問者さんは勘違いされていますね。
データ範囲もVBAで指定するんですよ。
手作業で範囲を指定するとき、何を基準にデータ範囲と判断するか。
それを明確にしてみましょう。
その判断に基づいて ”プログラムを組む” のです。
No.2
- 回答日時:
自分もコピーして一覧を作ったうえで重複を削除することを薦めます。
それにそのほうが処理が速い。
データ範囲を指定して複製。
Sheet3の1行目に【挿入貼り付け】。
これをSheet1とSheet2の両方で行った後に、
Sheet3で重複削除。
・・・余談・・・
質問文は
「これを作り直せ。オレ様の成果として使ってやるwww」
って内容になっていますが、それで間違いないでしょうか。
ここは自力で問題を解決できるようになるためのアドバイスを受ける場所です。
そのマクロを直す中で何が分からないのかをピンポイントで質問するようにしてみましょう。
例:
「マクロを探してきましたが、解説がないため意味不明です。
どなたか解説をお願いします」
「シートを指定する書き方が分かりません」
など。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) 改行ごとに行を追加し、数量を分割 4 2023/07/11 16:39
- Visual Basic(VBA) コード名シートA列と集計シートA列のコードが一致したら、コード名シートA5からk12の範囲をコピーし 1 2022/08/29 23:46
- Visual Basic(VBA) Changeイベントで複数セルへの貼り付けおよび値削除時に1個目のセルのみエラーになる 3 2022/12/21 09:07
- Visual Basic(VBA) vba 重複データ合算 5 2023/07/05 18:55
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) 【VBA】特定のワードが入っている行全体を塗りつぶしたい 4 2022/04/20 15:22
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 2 2022/06/25 22:42
- Visual Basic(VBA) VBAで、シート間の転記するコードをFOR~NEXTで教えてください。 9 2023/04/30 20:04
このQ&Aを見た人はこんなQ&Aも見ています
-
離れた2列を比べて重複しないデータを隣の列に表示させる方法 Excel
Visual Basic(VBA)
-
エクセルVBAで 2種のリストを比べて重複していないデータを最下行に追加するには
Excel(エクセル)
-
エクセル 重複したデータを別シートに抽出させる
Excel(エクセル)
-
-
4
EXCEL VBAで複数シートから該当列のみを別シート列方向に順番に貼り付け
Visual Basic(VBA)
-
5
excel VBA 2つのシートの特定の列を比較して同じ値のセルがあったらその行を上書きしたい
Excel(エクセル)
-
6
VBAでFormat がうまく使えない
Excel(エクセル)
-
7
「Columns(A:C")」の列文字を数字にして表記したい"
Excel(エクセル)
-
8
エクセルVBA 重複データから1種類ずつ抽出
Visual Basic(VBA)
-
9
VBAで最終行まで罫線を掛ける方法
Excel(エクセル)
-
10
VBAで重複するデータがあれば1個だけ残して他の重複セルを"(空白)にしたいのですが
Excel(エクセル)
-
11
ユーザーフォーム、コンボボックスで重複せず選択リストを表示させるには
Excel(エクセル)
-
12
VBA シートをコピーする際に Copyメソッドは失敗しましたのエラーが出てしまいます
Visual Basic(VBA)
-
13
VBAで重複データを確認したい
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA 空白行に転記する
-
EXCELのSheet番号って変更でき...
-
同じ作業(データコピー・貼付...
-
マクロ実行後に別シートの残像...
-
VBAのグラフに違うシートの...
-
集計して別シートに集計結果を出す
-
検索して修正したデータの上書転記
-
Excelマクロで不要な行を繰り返...
-
VBA別シートの最終行の次行へ転...
-
Unionでの他のシートの参照につ...
-
Excel フィルターで条件を絞っ...
-
VBA 重複チェック後に値をワー...
-
別シートから年齢別の件数をカ...
-
Excelで横書き50行の漢字テス...
-
【VBA】特定の条件でセルをコピー
-
ExcelのVBA ListBox.RowSource...
-
Changeイベントで複数セルへの...
-
VBAで質問ですが、皆さんはどの...
-
エクセル 複数シートの同一セ...
-
2010 Excel VBA 測定結果を貼...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
マクロの「SaveAs」でエラーが...
-
EXCELのSheet番号って変更でき...
-
VBA 空白行に転記する
-
マクロ実行後に別シートの残像...
-
VBA別シートの最終行の次行へ転...
-
Count Ifのセルの範囲指定に変...
-
VBA 別ブックからの転記の高速...
-
Changeイベントで複数セルへの...
-
【VBA】特定の条件でセルをコピー
-
100万件越えCSVから条件を満た...
-
楽天RSSからエクセルVBAを使用...
-
複数シートの複数列に入力され...
-
Excel VBA オートフィルターで...
-
VBAで変数の数/変数名を動的に...
-
Unionでの他のシートの参照につ...
-
Excel2013で切り取り禁止
-
VBA 実行時エラー1004 rangeメ...
-
ExcelのVBマクロを、バックグラ...
-
VBA 最終行を選んだシートにコ...
-
アクセスからエクセルへ出力時...
おすすめ情報
回答していただき、ありがとうございます。
その方法は各シートにあらかじめ、データがどのくらい入っているかが分かっていればできると思います。
できれば知識がない人でもボタン1つでできるようにVBAで探しています。
回答していただき、ありがとうございます。
その方法だと、データをコピーして貼り付ける場所がデータ量によって異なりませんか?
また、余談の件ですが私は「分からない問題に対して答えを教えてもらう場所」だと認識しています。
学校であれば、次回からできるようにするが目的かもしれませんが、私はそうではありません。
質問はあくまでも例として挙げさせて頂きました。
実際は
シート1、2はC列の3行目から始まっています。
シート3はB列の4行目から始まっています。
宜しくお願いいたします。