いつもお世話になってます。
Win98 Excel97です。
過去ログうをいつもありがたく拝見させて頂いてるのですが頭が足りず理解できませんでした。#REF!になってしまい
途方にくれてます。
シート1に4万件、シート2に800件のデータがあり、
シート3に重複したものだけを呼び出したいので過去ログを参考にVLOOKUPを使用して呼び出そうとしてるんですが
#N/Aや#REFになってしまい困ってます。
キーはA列に入れた名前で、列の数はAKまでです。
なにかよいやり方があればお教え下さい。
よろしくお願い致します。
なお、説明が拙いので補足があればすぐお返事させていただきます。
No.2ベストアンサー
- 回答日時:
まずシートの名前を確認してください。
作例はSheet1~Sheet3を使用するようになっていますので、必要に応じて変更してください。質問に明記されていないのですが、シート2のキー(名前)もA列にあるものとします。
メニューバーから「ツール」→「マクロ」→「VisualBasicEditor」を選びます。VisualBasicEditorが別ウィンドウで起動します。VisualBasicEditorのメニューバーの「挿入」→「標準モジュール」を選びます。
画面の右半分に真っ白な広いウィンドウが開きますので、ここに下記の点線内の内容を貼り付けます。
'-----------------------------------------
Sub データ比較()
Dim sa(65536) As Byte
Dim ii, fg, de1, de2 As Integer
Dim c1, c2, c3 As Integer
Dim c As Variant
Set WS1 = Worksheets("Sheet1")
Set WS2 = Worksheets("Sheet2")
Set WS3 = Worksheets("Sheet3")
de1 = WS1.Range("A1").End(xlDown).Row
de2 = WS2.Range("A1").End(xlDown).Row
WS3.Range("A1") = "重複"
WS3.Range("B1") = "シート1にのみ存在"
WS3.Range("C1") = "シート2にのみ存在"
WS3.Range("A2:C65536").ClearContents
For Each c In WS1.Range("A1:A" & de1)
fg = 0
For ii = 0 To de2 - 1
If StrComp(c, WS2.Range("A1").Offset(ii, 0).Value) = 0 Then
WS3.Range("A2").Offset(c1, 0).Value = c
sa(ii) = 1
fg = 1
c1 = c1 + 1
ii = de2
End If
Next
If fg = 0 Then
WS3.Range("A2").Offset(c2, 1).Value = c
c2 = c2 + 1
End If
Next
For ii = 0 To de2 - 1
If sa(ii) = 0 Then
WS3.Range("A2").Offset(c3, 2).Value = _
WS2.Range("A1").Offset(ii, 0).Value
c3 = c3 + 1
End If
Next
End Sub
'-----------------------------------------
貼り付けたら、Excelのほうに戻って、
メニューバーから「ツール」→「マクロ」→「マクロ」を選びます。「マクロ」と書かれたウィンドウが画面上に開きます。「データ比較」という行が反転していることを確認して(反転していないときは、クリックして反転させる)「実行」ボタンを押します。Sheet3に実行結果が書き出されます。
以上です。お望みのような結果が得られましたでしょうか?
この回答への補足
ご回答ありがとうございます。
ありがたく使わせていただいたのですが
「オーバーフローしました」と出て
de2 = WS2.Range("A1").End(xlDown).Rownの
部分が黄色くなり左側に→が出てます。
お忙しいところ恐れいりますが対処法を
教えて頂けますでしょうか?
No.5
- 回答日時:
#2です。
#4さんの仰るとおり、ちとミスってました(^_^;)
Dim ii, fg, de1, de2 As Integer
の行を
Dim ii, fg, de1, de2
あるいは
Dim ii, fg, de1, de2 As Long
に変更すれば、エラーは出なくなるはずです。
失礼しました。
snoopy64さん、ありがとうございます。
お礼は遅くなって申し訳ありません。
希望通りの抽出が出来ました。
ありがとうございます。
今後も勉強を重ねていきたいと思います。
ありがとうございました。
No.4
- 回答日時:
de2 が扱える範囲を超えています。
とりあえず
Dim ii, fg, de1, de2 As Integer
を
Dim ii, fg, de1, de2
に変更してみてください。
しゃしゃり出ちゃいました(^^ゞ
No.1
- 回答日時:
#REF!は参照範囲が削除されたときなどにでるエラー
#N/Aは参照範囲にキーと同じ物がない場合にでるエラー
になります。
=VLOOKUP(A1,Sheet1!A2:G40000,2,false)
の様になっていませんか?
参照範囲は絶対参照にしてください。
Sheet1!$A$2:$G$40000の様になります。名前付けした方がいいと思いますよ。
#N/Aは重複していない場合ですがここで空白にしたい場合は
=IF(ISNA(VLOOKUP(省略)),"",VLOOKUP(省略))
の様にしてください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ゼロを表示
-
Excelの計算が合いません。 諸...
-
今まで文字化けなく開けていたc...
-
Excelの警告について
-
ExcelでASCを使って全角を半角...
-
スプレッドシートで指定された...
-
作成した数式を値として表示し...
-
EXCELの散布図で日付が1900年に...
-
Excel関数について教えてくださ...
-
Excel関数について教えてくださ...
-
マクロの処理が遅くなった
-
エクセルを使用して、円周率を...
-
エクセルでファイルの最終更新...
-
エクセルのセル内に分数などの...
-
条件付き書式設定で罫線を引き...
-
シートの情報を別のシートへま...
-
【マクロ】フォルダ内にあるPDF...
-
エクセルで曜日を入れたい
-
Microsoft 365Excelの見開きペ...
-
Excelで時間の計算の方法 7時45...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelの警告について
-
Excelで数値を時間数に変換する...
-
エクセルの数式バーのフォント...
-
エクセルで数字の組み合わせを...
-
エクセルを使用して、円周率を...
-
Excelで特定の文字列が含まれて...
-
Excel 対象のセルに入力が無い...
-
任意の値が存在する行に名前を...
-
エクセルでファイルの最終更新...
-
index関数の説明をお願いします。
-
条件付き書式でやりたいのですが
-
重複しない値を取り出したい
-
【ExcelVBA】UTF-8(BOM無)でC...
-
【マクロ】マクロが割当てされ...
-
エクセル IF計算式?でしょうか?
-
エクセルで曜日を入れたい
-
表中の指定した条件の文字列を...
-
【Excel】版が同じ事を示す番号...
-
EXCELの散布図で日付が1900年に...
-
Excelについて。Excelに縦1列に...
おすすめ情報