No.2ベストアンサー
- 回答日時:
こんな感じはいかがでしょうか。
sheetはActiveSheetにしています。
抽出先は、B列最終データ行の2行下からになっています。
Sub 不一致抽出()
Dim Dic As Object
Dim dkey As Variant
Dim dtRow As Integer
Dim opRow As Integer
Set Dic = CreateObject("Scripting.Dictionary")
dtRow = 2 'A列データ開始行
'A列をDictionaryオブジェクトに格納
Do Until ActiveSheet.Cells(dtRow, 1).Value = ""
dkey = ActiveSheet.Cells(dtRow, 1).Value
If Not Dic.exists(dkey) Then
Dic.Add dkey, Null
End If
dtRow = dtRow + 1
Loop
dtRow = 2 'B列データ開始行
opRow = Cells(Rows.Count, 2).End(xlUp).Row + 2 'B列の最終行+2行
'B列がDicitonaryオブジェクトにない場合はB列の下に書き出します
Do Until ActiveSheet.Cells(dtRow, 2).Value = ""
dkey = ActiveSheet.Cells(dtRow, 2).Value
If Not Dic.exists(dkey) Then
ActiveSheet.Cells(opRow, 2).Value = dkey
opRow = opRow + 1
End If
dtRow = dtRow + 1
Loop
End Sub
No.5
- 回答日時:
No3です
少しわかりにくかったかも知れないので、補足しておきます。
No3で例示したコードの前半では対象範囲(=A,B列)の各名前をkeyにしたDictionaryを作成しています。
値がとり得る範囲は、1、2、3のいずれかで、それぞれ以下のような意味になります。
1:A列だけに存在する名前
2:B列だけに存在する名前
3:A列、B列に存在する名前
No3の例示では、値が3以外(=1と2)を抽出するようにしてありますが、これを「1を抽出」や「2を抽出」とすることによって「A列のみのチェック」、「B列のみのチェック」の処理に変えることができるという次第です。
ついでながら…
>このコード等は fujillin 様がプログラミングされたのでしょうか?
ご質問の内容がどこかにころがっているものとは思えません。作成しています。
>ものすごい高度ですね。
私は、見よう見まねで覚えただけなので、コーディングはほんの趣味程度です。
ですので、決して「高度なもの」は作成できませんので、誤解のなきように。
No.4
- 回答日時:
No.1です。
逆があり得ないなら、
・まずB列の値を.NET FrameworkのSystem.Collections.ArrayListに全て放り込みます。
・次にA列を調べ同じ値があったらArrayListから削除していきます。
・最後に残った値の数でメッセージボックスの表示を変えます。
Sub megu()
Dim al As Object
Dim ra As Range, rb As Range
Dim st As String
Set al = CreateObject("System.Collections.ArrayList")
For Each rb In Range("B2", Cells(Rows.Count, "B").End(xlUp))
If al.IndexOf_3(rb.Value) < 0 Then al.Add (rb.Value)
Next
For Each ra In Range("A2", Cells(Rows.Count, "A").End(xlUp))
If al.IndexOf_3(ra.Value) >= 0 Then al.Remove (ra.Value)
Next
st = ""
If al.Count = 1 Then
st = al(0)
ElseIf al.Count > 1 Then
st = Join(al.ToArray(), vbCrLf)
Else
st = "共に同じです"
End If
MsgBox st
Set al = Nothing
End Sub
ただもしかすると、
・Set al = CreateObject("System.Collections.ArrayList")
でエラー表示とかが出るなら、.NET Frameworkの古いバージョンがPCにないと思いますのでこの回答は無視して下さい。
No.3
- 回答日時:
こんにちは
>A欄、B欄のそれぞれのリストを照合して重複していない
>文字を別セルに抽出したいのです。
文章通りの意味にとると、No1様がすでにご指摘のように、B列だけでなくA列に対してもチェックが必要になると思われます。
>A欄の名簿を基本としてB欄で重複していない文字を~~
だと、B列だけをチェックすれば良いものと読み取れます。
下記はとりあえず両方の列をチェックする一例ですが、不明点は以下の様に仮定しています。
・A列、B列のそれぞれ最下行(可変)までのデータを対象とする。
・A列内での重複、B列内での重複は重複とみなさない。
(他の列と重複しているか否かで判断する)
※ 最下行までを対象としているため、結果をA、B列に表示するのは好ましいとは思えないので、ひとまずメッセージボックスに表示するようにしてあります。(複数存在する場合は改行で表示)
どこかのセルに表示したい場合は、そのまま結果をセルに入れれば良いです。
※ B列だけチェックすれば良いのであれば、Dicの値が2のものを抽出すればよいです。
(A列だけをチェックしたい場合は、同様に値が1のものだけを抽出)
Sub Sample()
Dim Dic As Object, k
Dim rw As Long, col As Integer
Dim s As String, res As String
Set Dic = CreateObject("Scripting.Dictionary")
For col = 1 To 2
For rw = 2 To Cells(Rows.Count, col).End(xlUp).Row
s = Cells(rw, col).Value
If s <> "" Then
If Dic.Exists(s) Then Dic.Item(s) = Dic.Item(s) Or col Else Dic.Add s, col
End If
Next rw
Next col
res = ""
For Each k In Dic.Keys
If Dic.Item(k) <> 3 Then res = res & vbNewLine & k
Next
res = Mid(res, 3)
MsgBox res
End Sub
回答有難うございました。
>ひとまずメッセージボックスに表示するようにしてあります。(複数存在する場合は改行で表示)
これは非常に良いと思いました。
このコード等は fujillin 様がプログラミングされたのでしょうか?ものすごい高度ですね。
有難うございました
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルで#以降の文字を取得したい 1 2022/03/28 13:14
- Excel(エクセル) エクセル 3つの値の中からデータを抽出させる方法 4 2023/08/24 11:00
- Excel(エクセル) 名前と日付が一致する箇所にフラグを立てる関数が知りたいです 4 2022/08/11 02:24
- Visual Basic(VBA) Excel VBA キーワードから列を取得して、さらに空欄行を非表示にする 3 2022/10/21 22:49
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/04/21 13:46
- Excel(エクセル) エクセルで重複データを行ごとに抽出したい 4 2022/12/05 08:18
- Access(アクセス) Accessのクエリの結果を、既存のエクセルに追加したい 2 2022/07/31 22:44
- Excel(エクセル) 【Excel】指定した文字列に該当する行を重複しないようにリスト 3 2022/03/30 12:27
- Visual Basic(VBA) 複数シートの複数列に入力されているデータを重複なしで抽出するVBAを作りたいです。 9 2022/06/17 10:33
- Excel(エクセル) Excelの数式についての質問 1 2022/10/31 15:50
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教える店舗&オフィスのセキュリティ対策術
中・小規模の店舗やオフィスのセキュリティセキュリティ対策について、プロにどう対策すべきか 何を注意すべきかを教えていただきました!
-
エクセルVBAで 2種のリストを比べて重複していないデータを最下行に追加するには
Excel(エクセル)
-
Excelで[表1]にあって、[表2]にないものを抽出する関数
その他(Microsoft Office)
-
Excel VBAで比較して数値があってなかったらセルの色を変換
Visual Basic(VBA)
-
-
4
ExcelVBAでデータ不一致のものの抽出
Excel(エクセル)
-
5
EXCEL VBA 一致しないデータの抽出及びデータ更新
Excel(エクセル)
-
6
Excelマクロの差分抽出のコードを教えていただきたいです。
Excel(エクセル)
-
7
2つ以上の変数を比較して最大数を求めたい
Word(ワード)
-
8
VBAでファイルを開くときにファイル名でワイルドカードを使用したいです
その他(プログラミング・Web制作)
-
9
excel VBA 2つのシートの特定の列を比較して同じ値のセルがあったらその行を上書きしたい
Excel(エクセル)
-
10
A列にあってB列にはない単語をC列に残したいです。
Excel(エクセル)
-
11
EXCELで2つのシートから一致しない情報だけ抽出
Excel(エクセル)
-
12
vba 2つの条件が一致したらコピーして別シートに値のみ貼り付け
Visual Basic(VBA)
-
13
【VBA】条件に一致しない行を削除したい
Visual Basic(VBA)
-
14
エクセルでエラーが出て困っています。
Excel(エクセル)
-
15
EXCEL VBAで全選択範囲の解除
Excel(エクセル)
-
16
メッセージボックスに表示する文字を大きくしたい
Excel(エクセル)
-
17
エクセルVBAでセルに入力したパスでブックを開く
Excel(エクセル)
-
18
複数の条件に合う行番号を取得するには
その他(Microsoft Office)
-
19
【EXCEL】【VBA】空欄は飛ばして処理する方法を教えて下さい。
Excel(エクセル)
-
20
【VBA】条件に一致しない行を削除したい 複数条件
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
vba 2つの条件が一致したら...
-
B列の最終行までA列をオート...
-
Worksheets メソッドは失敗しま...
-
【VBA】2つのシートの値を比較...
-
VBAでのリスト不一致抽出について
-
エクセル 2つの表の並べ替え
-
VBAを使って検索したセルをコピ...
-
VBAのFind関数で結合セルを検索...
-
エクセルVBA intersect colu...
-
マクロ 最終列をコピーして最終...
-
マクロについて。S列の途中から...
-
EXCEL VBA 条件に合致しない行...
-
エクセルVBAにて =A1=B1とすれ...
-
エラーコード1004
-
VBマクロ 色の付いたセルを...
-
【Excel VBA】カンマと改行コー...
-
URLのリンク切れをマクロを使っ...
-
VBAで指定範囲内の空白セルを左...
-
エクセルで最大列を増やす
-
vba 重複データ合算
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Worksheets メソッドは失敗しま...
-
Cellsのかっこの中はどっちが行...
-
VBAのコードを教えてください
-
VBAを使って検索したセルをコピ...
-
B列の最終行までA列をオート...
-
エクセルvbaについて
-
vba 2つの条件が一致したら...
-
Excelで、あるセルの値に応じて...
-
VBA UserFormからの転記で
-
VBAのFind関数で結合セルを検索...
-
文字列の結合を空白行まで実行
-
IIF関数の使い方
-
VBA 何かしら文字が入っていたら
-
マクロ 最終列をコピーして最終...
-
Changeイベントでの複数セルの...
-
エクセルVBAにて =A1=B1とすれ...
-
【VBA】2つのシートの値を比較...
-
データグリッドビューの一番最...
-
VBマクロ 色の付いたセルを...
-
VBAで指定範囲内の空白セルを左...
おすすめ情報