No.1
- 回答日時:
VBAは組めるものとして、間単に内容説明します。
最初にSHEET3クリア
次に、SHEET1の最終行求めます
Range("A1").End(xlUp)で最終行なのでその値まで繰り返せば
VLOOKUP関数を式にしてください。
範囲はSHEET2(値はTRUE)
FOR~NEXT(最終行)
出力が出せますので、それをSHEET3に出力してください。
その後に
その出力されたものを重複削除し、並べ替えをすれば普通に出る
と思います。
考え方はこの順番です。
VBAはこの考え方で組めます。
サンプルコードについての要求はなようなので、考え方のみ回答し
ます。
No.2
- 回答日時:
方法1:ベタだけど判りやすい
sub macro1()
dim h as range
dim c as range
dim c0 as string
for each h in worksheets("Sheet2").range("A1:A" & worksheets("Sheet2").range("A65536").end(xlup).row)
if h <> "" then
set c = worksheets("Sheet1").range("B:B").find(what:=h.value, lookin:=xlvalues, lookat:=xlpart)
if not c is nothing then
c0 = c.address
do
worksheets("Sheet3").range("A65536").end(xlup).offset(1).value = c.value
set c = worksheets("Sheet1").range("B:B").findnext(c)
loop until c.address = c0
end if
end if
next
end sub
方法2:推奨・高速
sub macro2()
dim Target as range
dim Crit as range
dim r as long
with worksheets("sheet1")
.range("1:1").insert shift:=xlshiftdown
.range("B1") = "myList"
set target = .range(.range("B1"), .range("B65536").end(xlup))
end with
with worksheets("sheet2")
.range("1:1").insert shift:=xlshiftdown
.range("B:B").insert shift:=xlshifttoright
.range("A1:B1") = "myList"
r = .range("A65536").end(xlup).row
with .range("B2:B" & r)
.formula = "=""*""&A2&""*"""
.value = .value
end with
set crit = .range("B2:B" & r)
end with
target.advancedfilter _
action:=xlfiltercopy, _
criteriarange:=crit, _
copytorange:=worksheets("Sheet3").range("A1"), _
unique:=false
worksheets("Sheet2").range("B:B").delete shift:=xlshifttoleft
worksheets("Sheet2").range("1:1").delete shift:=xlshiftup
worksheets("Sheet1").range("1:1").delete shift:=xlshiftup
end sub
この回答への補足
早速のご回答ありがとうございます。
非常に助かります。
再度の質問で申し訳ありません。
検索結果の並び順はソートしない場合はどこを修正すれば良いのでしょうか?
No.3
- 回答日時:
>検索結果の並び順はソートしない場合はどこを修正すれば良いのでしょうか?
#1です
#2さんへの補足に、割り込み回答
上記確認したいなら、F8で1行ずつデバックしてみてください。
どの時点でソートされているか分かります。
自分で確認しないと覚えないと思いますので。
あえて、コードは示しませんが・・・・
それでも分からない様なら、もう一度、補足でも入れてください。
No.4ベストアンサー
- 回答日時:
sub macro1r1()
dim h as range
dim c as range
dim c0 as string
worksheets("Sheet3").cells.clearcontents
for each h in worksheets("Sheet2").range("A1:A" & worksheets("Sheet2").range("A65536").end(xlup).row)
if h <> "" then
set c = worksheets("Sheet1").range("B:B").find(what:=h.value, lookin:=xlvalues, lookat:=xlpart)
if not c is nothing then
c0 = c.address
do
worksheets("Sheet3").range("A65536").end(xlup).offset(1).value = c.value
set c = worksheets("Sheet1").range("B:B").findnext(c)
loop until c.address = c0
end if
end if
next
worksheets("Sheet3").select
range("A1:B1") = array("res", "work")
range("B2:B" & range("A65536").end(xlup).row).formula = "=MATCH(A2,Sheet1!B:B,0)"
range("A:B").sort key1:=range("B1"), order1:=xlascending, header:=xlyes
range("B:B").clearcontents
end sub
sub macro2r1()
dim Target as range
dim Crit as range
dim r as long
worksheets("Sheet3").cells.clearcontents
with worksheets("sheet1")
.range("1:1").insert shift:=xlshiftdown
.range("B1") = "myList"
set target = .range(.range("B1"), .range("B65536").end(xlup))
end with
with worksheets("sheet2")
.range("1:1").insert shift:=xlshiftdown
.range("B:B").insert shift:=xlshifttoright
.range("A1:B1") = "myList"
r = .range("A65536").end(xlup).row
with .range("B2:B" & r)
.formula = "=""*""&A2&""*"""
.value = .value
end with
set crit = .range("B1:B" & r)
end with
target.advancedfilter _
action:=xlfiltercopy, _
criteriarange:=crit, _
copytorange:=worksheets("Sheet3").range("A1"), _
unique:=false
worksheets("Sheet2").range("B:B").delete shift:=xlshifttoleft
worksheets("Sheet2").range("1:1").delete shift:=xlshiftup
worksheets("Sheet1").range("1:1").delete shift:=xlshiftup
end sub
この回答への補足
ご回答ありがとうございます。
Macro2のパターンでは希望通りに出力できました。
私の勉強不足でこちらのパターンはあまり理解できていないのですが・・・
Macro1では前回同様並び替えて出力されています。
自分でも修正チャレンジしているのですが・・・
お忙しい中ご回答ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
VBA 別シートのセルから、文字列を参照するには?
Visual Basic(VBA)
-
【VBA】元のシート内の文字列を別シートと比較し、一致したら元のシートの別のセルへ転記する方法。
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ExcelでASCを使って全角を半角...
-
今まで文字化けなく開けていたc...
-
Microsoft 365Excelの見開きペ...
-
Excel関数について教えてくださ...
-
マクロの処理が遅くなった
-
スプレッドシートで指定された...
-
エクセルの質問です。 F列からL...
-
Excel関数について教えてくださ...
-
エクセルのセル内に分数などの...
-
作成した数式を値として表示し...
-
ワークシートに出現したこの画...
-
条件付き書式設定で罫線を引き...
-
EXCELの散布図で日付が1900年に...
-
シートの情報を別のシートへま...
-
Excelでの文字色
-
【マクロ】VLOOKUPにて参照元に...
-
エクセルの文字が途中から消える
-
エクセルの数式バーのフォント...
-
エクセルでファイルの最終更新...
-
OFFSET関数を使用したいのです...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
(UWSC)エクセルのセルの値を読...
-
【Excel2002VBA】Destinationを...
-
VBAでオートフィルができません
-
EXCEL VBA 別シートの文字を...
-
DHCPサーバで複数のレンジを指...
-
VBA-指定した範囲で重複しない...
-
VBA Excel
-
MATLABによる整定時間の求め方
-
エクセルVBAでsheet1!B2:B10ま...
-
IPアドレスを検査する関数
-
B列の最終行までA列をオート...
-
VBAマクロ実行時エラーの修正に...
-
VBA シートをコピーする際に Co...
-
Worksheets メソッドは失敗しま...
-
あああ..ああい..ああう とい...
-
マクロの「SaveAs」でエラーが...
-
エクセルVBAが途中で止まります
-
エクセルで特定の文字列が入っ...
-
「段」と「行」の違いがよくわ...
-
Excelで、あるセルの値に応じて...
おすすめ情報