VBAお助け願います
①sheet1:元データ
②sheet2:追加分データ
③sheet3:VBA実行結果を貼り付けるシート
※リストはアドレスになります
□sheet1
123@gmail.com
1234@gmail.com
12345@gmail.com
123456@gmail.com
.....何行あるかは未定
□sheet2
123@gmail.com
123@yahoo.co.jp
12345@yahoo.co.jp
1234567@gmail.com
.....何行あるかは未定
□sheet3
123@yahoo.co.jp
12345@yahoo.co.jp
1234567@gmail.com
sheet2に貼り付けられたデータ(何個あるかは未定)をsheet1のデータの中から
重複チェックを行い、重複しないデータをsheet3に貼り付ける
※実行する前の段階でsheet3は何も記入されていないsheetとします
※1回実行させた分に関し重複しないデータはsheet1に追加していくので
sheet1は常に増えていきます
VBAお助け願います
A 回答 (17件中1~10件)
- 最新から表示
- 回答順に表示
No.17
- 回答日時:
#6です。
VBAでなければならないのですか。関数ではだめですかね。
#6で UNIQUE は使えると思うという回答があったので。
sheet1の続きに、sheet2をコピーして、(A列にデータがあるとして)
sheet3に
=UNIQUE(sheet1!A:A)
でいけると思いますがいかがですか。
No.16
- 回答日時:
shut0325です。
他の方がすでに回答されているようですが、私の回答で書いていたものをベタにコードにしたものです。
ごく基礎的な処理(for文とIf文)でやっていますので、ご自身でVBAを学ばれる際の参考になればと思います。
Sheet1に追加するタイプの物で、各シートのA列1行目からリストが書かれている想定です。
Sub リスト追加()
Set WS1 = Worksheets("sheet1")
Set WS2 = Worksheets("sheet2")
S1RowEnd = WS1.Cells(Rows.Count, 1).End(xlUp).Row
S2RowEnd = WS2.Cells(Rows.Count, 1).End(xlUp).Row
S1WP = S1RowEnd + 1
For i = 1 To S2RowEnd
For j = 1 To S1RowEnd
If WS2.Cells(i, 1).Value = WS1.Cells(j, 1).Value Then
Exit For
End If
Next j
If j = S1RowEnd + 1 Then
WS1.Cells(S1WP, 1).Value = WS2.Cells(i, 1).Value
S1WP = S1WP + 1
End If
Next i
MsgBox ("処理が完了しました")
End Sub
No.15
- 回答日時:
No2です
Sheet2の非重複データを、直接Sheet1に追加するごく簡単なサンプルです。
No2で回答した方法で処理していますので、Sheet2のB列を作業列として利用しています。
(B列をすでに使っている場合は、別の列にすれば良いです)
Sheet3が必要な場合は、先にSheet1をSheet3にコピペしてからSheet3に対して実行するようにすればよいでしょう。
Sub Sample()
Dim r, d
Set d = Worksheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Offset(1)
With Worksheets("Sheet2")
Set r = .Cells(1, 2).Resize(.UsedRange.Rows.Count)
r.FormulaLocal = "=if(COUNTIF(Sheet1!A:A,A1)=0,1,"""")"
r.Value = r.Value
If Application.Sum(r) > 0 Then
r.SpecialCells(xlTextValues).Offset(, -1).Copy Destination:=d
End If
r.ClearContents
End With
End Sub
No.14
- 回答日時:
動くコードがほしいと言われたので作りました。
ざっくりなので、自分で理解して、自分のものとして落とし込んでください。
Public Sub Test()
' 値の走査を行うSheet2の開始行
Const FirstRowIndex As Long = 1
' 値の出力を行うSheet3の開始行
Const OutputFirstRowIndex As Long = 1
Dim compareWs As Worksheet
Dim targetWs As Worksheet
Dim destWs As Worksheet
Set compareWs = Worksheets("Sheet1")
Set targetWs = Worksheets("Sheet2")
Set destWs = Worksheets("Sheet3")
' Sheet2の最終行を取得
Dim lastRowIndex As Long
lastRowIndex = targetWs.Range("A1").SpecialCells(xlCellTypeLastCell).Row
Dim i As Long
Dim j As Long
j = OutputFirstRowIndex
For i = FirstRowIndex To lastRowIndex
Dim targetValue As String
targetValue = targetWs.Cells(i, 1).Value
' Sheet1のA列に対してCOUNTIFを実施し、見つからないものをSheet3に出力
Dim containsCount As Long
containsCount = Application.WorksheetFunction.CountIf(compareWs.Range("A:A"), targetValue)
If containsCount < 1 Then
destWs.Cells(j, 1).Value = targetValue
j = j + 1
End If
Next
End Sub
No.13
- 回答日時:
#12です。
間違いがありましたので訂正いたします。
検証せずに投稿してしまい申し訳ありません。
Sheets("sheet1").Cells(Rows.Count, "A").End(xlUp).Resize(UBound(Ary)) = Application.Transpose(Ary)
最終行にダブって入力されるので間違い。
下記で新規行に追加されます。
Sheets("sheet1").Cells(Rows.Count, "A").End(xlUp).Offset(1).Resize(UBound(Ary)) = Application.Transpose(Ary)
No.12
- 回答日時:
こんにちは、
VBAがご希望と言う事で取敢えずデータ加工が出来れば良いのかと
よくある私的アドバイスは割愛します。
Sheet1の最終行に追加されます。
Sub sple()
Dim Ary, Rng, n As Long
ReDim Ary(Sheets("sheet2").Cells(Rows.Count, "A").End(xlUp).Row)
For Each Rng In Sheets("sheet2").Range("A1", Sheets("sheet2").Cells(Rows.Count, "A").End(xlUp))
If Application.CountIf(Sheets("sheet1").Range("A:A"), Rng.Value) = 0 Then
Ary(n) = Rng.Value
n = n + 1
End If
Next
Sheets("sheet1").Cells(Rows.Count, "A").End(xlUp).Resize(UBound(Ary)) = Application.Transpose(Ary)
End Sub
内容は、#1さんのアドバイスと同じようなものです。
苦言を呈すなら、
#1#2さんのアドバイスで自身で作成する事に挑戦するべきかと思います。
この時点で作成したものを補足で足すとか、、、まぁ
作ってくれる私みたいな無責任な者がいるので必要ないかもしれませんが、
直す時は苦労すると思いますので、、、
No.11
- 回答日時:
こんにちは!
一例です。
尚、Sheet1・Sheet2とも1行目からデータはあるとします。
標準モジュールにしてください。
Sub Sample1()
Dim i As Long
Dim c As Range
Dim cnt As Long
Dim wS1 As Worksheet, wS2 As Worksheet
Set wS1 = Worksheets("Sheet1")
Set wS2 = Worksheets("Sheet2")
With Worksheets("Sheet3")
.Range("A:A").ClearContents '//←Sheet3、A列データを一旦消去//
For i = 1 To wS2.Cells(Rows.Count, "A").End(xlUp).Row
Set c = wS1.Range("A:A").Find(what:=wS2.Cells(i, "A"), LookIn:=xlValues, lookat:=xlWhole)
If c Is Nothing Then
cnt = cnt + 1
.Cells(cnt, "A") = wS2.Cells(i, "A")
End If
Next i
.Activate
End With
MsgBox "完了"
End Sub
※ 他の方のお礼欄にSheet1に追加云々とありますが、
とりあえず、Sheet1のA列にないSheet2A列のデータをSheet3のA列に表示するようにしています。m(_ _)m
No.8
- 回答日時:
これではどうですか?
sub 不一致チェック再()
Dim Sh1 As Worksheet, Sh2 As Worksheet, sh3 As Worksheet
Dim i As Long
Dim Startrow As Long
Dim Lastrow1 As Long
Dim Lastrow2 As Long
Set Sh1 = Worksheets("sheet1")
Set Sh2 = Worksheets("sheet2")
Set sh3 = Worksheets("sheet3")
Startrow = 1
Lastrow1 = Sh1.Cells(1048576, 1).End(xlUp).Row
Lastrow2 = Lastrow1 + 1
For i = Startrow To Lastrow1
If Sh1.Cells(i, 1).Value <> Sh2.Cells(i, 1).Value Then
Sh1.Cells(Lastrow2, 1).Value = Sh2.Cells(i, 1).Value
Lastrow2 = Lastrow2 + 1
End If
Next i
End Sub
何度もお手間とらせてしまい申し訳ありません。
上記で実行させたところ、sheet1の最後尾に貼り付けるように組んでいただいたかと思いますが
不一致条件を読んでおらず、同じものがあるのに最後尾に張り付くようになってしまっております。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAでvlookup関数から、別シート参照するやり方・・・ 2 2022/11/14 18:49
- Visual Basic(VBA) vbaのvlookup関数エラー原因を教えていただけないでしょうか。 3 2022/04/25 16:16
- Excel(エクセル) 【Excel質問】別シートにある複数の同型の表から、同じ行項目にある数字を集計する 4 2023/02/16 00:14
- Excel(エクセル) SUMIFSと日付変換 10 2023/04/16 15:38
- Visual Basic(VBA) 改行ごとに行を追加し、数量を分割 4 2023/07/11 16:39
- Visual Basic(VBA) このプログラムなんですがsheetにデータを置いて表示できるようにしてありますがsheetに101を 2 2023/02/23 20:13
- その他(プログラミング・Web制作) pythonでクラスで複数のメソッドを利用する方法 2 2022/04/15 04:17
- Visual Basic(VBA) VBA active sheetをPDF化して指定フォルダに保存 1 2022/07/07 11:27
- Visual Basic(VBA) 【変更】ファイルを閉じてダイアログで保存した時、更新したシートだけの処理の実行をする 5 2022/03/26 18:31
- Visual Basic(VBA) VBA 別sheetからの転記なのですが 2 2023/05/22 15:55
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで「-0.0」と表示さ...
-
【マクロ】シート名を取得する...
-
エクセルの条件付き書式につい...
-
【マクロ】毎回、ファイル名が...
-
エクセルで 例えば 伊藤と名前...
-
excel で二つのどちらかを選ぶ
-
Aというブックの1というシート...
-
Excel 2019 のピボットテーブル...
-
マクロの有効化するダイヤログ...
-
Excel元に戻す方法を教えてくだ...
-
写真のコピー
-
VBA Private Sub Worksheet_Cha...
-
【マクロ】フォルダからエクセ...
-
Excelでの時間帯の入力
-
文字列になっている時間をVBAで...
-
エクセルの順位別一覧表の自動...
-
Excelはなんで先頭の0を消すん...
-
行数が不規則な一週間ごとの合...
-
ある列、或いは、ある行のセル...
-
エクセルで特定の範囲内から小...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルの表示形式を保ったま...
-
excelのマクロでrangeの選択が...
-
エクセル 1つのセル毎に入力...
-
Excel VBA For Each Next構文...
-
Excel2000 VBA ダブルクリック...
-
Excel VBAのComboboxのRemoveItem
-
Gメールの内容をスプレッドシ...
-
エクセルの関数を連続コピー
-
エクセルのIF関数がうまくいき...
-
EXCEL(エクセル)で0.001以下...
-
エクセルで重複するセルを削除...
-
EXCELで2つの数値のうち大きい...
-
Excelで隣のセルと同じ内容に列...
-
エクセルで二つの数字の小さい...
-
PowerPointで表の1つの列だけ...
-
エクセルで、2種類のデータを...
-
エクセルで最初のスペースまで...
-
エクセルでオートフィルタのボ...
-
エクセルのオートフィルタで最...
-
エクセルで時刻(8:00~20:00)...
おすすめ情報