Excel2013、マクロで複数の動作を行いたいのですが、以下の部分のみ完成しません。
お知恵をお借りできれば幸いです。
・book1のB列に「123」等の登録番号が不特定行続いている
・book2のC列に上記の登録番号が使用日順に並んでいる。
使用毎に追加のため順番はバラバラ、同じ番号が何度も出てくる
↑
この状態で、B列の番号をC列の上から検索していって、同番号がヒットした一番最初の行ごと新規ブック(book3)にコピーし、
B列の次の番号を再度C列の上から検索していき、ヒットすればその行をbook3の下にコピーし……
という事をして行きたいです。
B列の番号は、C列で一度ヒット&コピーすれば、それ以降は検索せず次の番号へと移ります。
ここに至るまでの他マクロの動作は上手く行ったのですが、この部分のみ色々と調べてみても動作するものが出来上がりません。
どういった構文を使えばいいか等でもご教授頂ければ幸いです。
どうぞよろしくお願い致します。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
book1のB列にある登録番号がbook2のC列にあれば、その行を新規ブックにコピーしたいということですね。
ws1=Book1.xlsmのSheet1
ws2=Book2.xlsxのSheet1
ws3=新規ブックのSheet1
a=ws1の最終行番号
b=ws2の最終行番号
c=ws2の最終列番号(表全体の最終列番号を取得しています)
d=ws3の転記開始行番号
e=ws2のC列チェック数のカウンタ
としています。
新規ブックを開き、そのSheet1をws3とします。
まずws1のB列i行目をws2のC列j行目と総当たりで確認します。
ws1のB列i行目の値がws2のC列j行目と同じだったら
ws3のd行目にws2のj行A列からc列の値を転記します。
転記したらd=d+1(次に転記する行)とし
ループを終了して、次に進みます。
同じでなかったらe=e+1とし、見つからなかった時には
ws1.Cells(i, "B").Value & "が見つかりません"と表示し、
次に進みます。
Sub test()
Dim a, b, c, d, e, i As Long, j As Long
Dim ws1 As Worksheet, ws2 As Worksheet, ws3 As Worksheet
Set ws1 = Workbooks("Book1.xlsm").Worksheets("Sheet1")
Set ws2 = Workbooks("Book2.xlsx").Worksheets("Sheet1")
a = ws1.Cells(Rows.Count, "B").End(xlUp).Row
b = ws2.Cells(Rows.Count, "C").End(xlUp).Row
c = ws2.Range("A1").CurrentRegion.Columns.Count
d = 1
Workbooks.Add
Set ws3 = ActiveWorkbook.Worksheets("Sheet1")
ws1.Activate
For i = 2 To a
e = 0
For j = 2 To b
If ws1.Cells(i, "B").Value = ws2.Cells(j, "C").Value Then
ws3.Cells(d, "A").Resize(1, c).Value = ws2.Cells(j, "A").Resize(1, c).Value
d = d + 1
Exit For
Else
e = e + 1
End If
Next j
If e = b - 1 Then
MsgBox ws1.Cells(i, "B").Value & "が見つかりません", vbExclamation
End If
Next i
End Sub
No.1
- 回答日時:
こんばんは。
>・book2のC列に上記の登録番号が使用日順に並んでいる。
このC列の重複を取り去れば、それで、そのままつかえないでしょうか。Book3 に貼り付けてもよいのではありませんか?
データ・タブのデータツールの重複の削除の記録マクロを使うか、マクロのDictionary Objectで、重複を取り去ってしまうか、それだけなのですが、それを、book1との照合をするとか必要なのですか。
もし、照合を必要とする場合は、やり方をまったく変えて、
>B列の番号をC列の上から検索していって、
というのは、B列に重複がないという前提ですが、その上で、C列に現れていないものは、リストには省くものが出てくるのでしょうか。
そうすると、ちょっと複雑だなって思います。
ワークシート関数のCountIfで、Book2 のC列を検索して、C列に登場しないものを拾わず、そのまとまったものを、Book3 に貼り付けるという方法を考えました。
'照合を必要とする場合
Sub CheckNumberList()
Dim rng1 As Range
Dim rng2 As Range
Dim Ary() As Variant
Dim i As Long, j As Long, c
With ThisWorkbook.Worksheets("Sheet1") 'BookA のSheet1
Set rng1 = .Range("B1", .Cells(Rows.Count, "B").End(xlUp))
End With
With Workbooks("BookC.xlsx").Worksheets("Sheet1")
Set rng2 = .Range("C1", .Cells(Rows.Count, "C").End(xlUp))
End With
For Each c In rng1
If WorksheetFunction.CountIf(rng2, c.Value) > 0 Then
ReDim Preserve Ary(i)
Ary(i) = c.Value
i = i + 1
End If
Next c
If i = 0 Then
MsgBox "番号を収録できませんでした。", vbExclamation
Exit Sub
End If
Workbooks.Add '新規ブック
ActiveWorkbook.ActiveSheet.Range("A1").Resize(i).Value = Application.Transpose(Ary)
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルVBA 2 2022/04/27 13:29
- その他(Microsoft Office) マクロVBAについて 1 2022/09/06 18:12
- Excel(エクセル) 【Excel】指定のセル内容を基に別シートのセルを検索して選択する【VBA】 1 2022/06/16 16:16
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- Excel(エクセル) Excelの列から検索して該当する行を別シートに転記するVBA 2 2022/12/20 09:35
- Excel(エクセル) 関数EXACT(文字列,文字列)とexcelVBA 3 2022/04/14 15:07
- Visual Basic(VBA) 【困っています2】VBA 追加処理の記述を教えてください。 2 2022/08/26 11:42
- Access(アクセス) Accessのクエリの結果を、既存のエクセルに追加したい 2 2022/07/31 22:44
- Visual Basic(VBA) 2つのシートの任意のセルの番号が一致したら、一致した行をコピーする VBA 2 2023/06/19 20:48
- Excel(エクセル) 製品番号での整列と、検索に関して 3 2023/06/28 19:20
このQ&Aを見た人はこんなQ&Aも見ています
-
それもChatGPT!?と驚いた使用方法を教えてください
仕事やプライベートでも利用が浸透してきたChatGPTですが、こんなときに使うの!!?とびっくりしたり、これは画期的な有効活用だ!とうなった事例があれば教えてください!
-
人生最悪の忘れ物
今までの人生での「最悪の忘れ物」を教えてください。 私の「最悪の忘れ物」は「財布」です。
-
これが怖いの自分だけ?というものありますか?
人によって怖いもの(恐怖症)ありませんか? 怖いものには、怖くなったきっかけやエピソードがあって聞いてみるとそんな感覚もあるのかと新しい発見があって面白いです。
-
この人頭いいなと思ったエピソード
一緒にいたときに「この人頭いいな」と思ったエピソードを教えてください
-
我がまちの「給食」自慢を聞かせてっ!
富山県の給食には「ベニズワイガニ」が出る、、、なんて話を聞いたことがあります。 日本全国「え、給食にそれ出るの!?」な驚きメニューがまだまだあるはず!
-
【VBA】2つのシートの値を比較して条件一致したら、同じ行の隣の値を別ブックへ転記したいです。 VB
Visual Basic(VBA)
-
VBAを使って検索したセルをコピーして別の場所に貼り付ける。
Visual Basic(VBA)
-
Exel VBA 別ブックから該当データを検索し、必要なデータを取得する方法について
Visual Basic(VBA)
-
-
4
vba 2つの条件が一致したらコピーして別シートに値のみ貼り付け
Visual Basic(VBA)
-
5
VBA 別ブックから条件に合うものを転記したいです
Visual Basic(VBA)
-
6
VBA 値と一致した行の一部の列のデータを転記について教えてください
Visual Basic(VBA)
-
7
エクセル vba ある検索値を別ブックから参照し一致したすべての行で特定の列の値を返す
Visual Basic(VBA)
-
8
【VBA】元のシート内の文字列を別シートと比較し、一致したら元のシートの別のセルへ転記する方法。
Excel(エクセル)
-
9
エクセルVBAで、条件に一致するセルへ移動
Excel(エクセル)
-
10
excel VBA 2つのシートの特定の列を比較して同じ値のセルがあったらその行を上書きしたい
Excel(エクセル)
-
11
エクセル VBA find は別シートを検索できますでしょうか?
Excel(エクセル)
-
12
特定の文字がある行以外を削除するマクロ
その他(Microsoft Office)
-
13
エクセルVBA C列に特定の文字列を含む行のみを抽出し、一つのExcelにまとめたい。
Excel(エクセル)
-
14
特定の文字列が含まれている行のみ抜き出して、別シートに書き出す方法(Excel 2007)
Excel(エクセル)
-
15
VBAでファイルを開くときにファイル名でワイルドカードを使用したいです
その他(プログラミング・Web制作)
-
16
【マクロ】【VBA】別ブックへのデータ転記について
Excel(エクセル)
-
17
VBA Cのセルが空白でなかったら、Aのセルに順番に数値を入力
Visual Basic(VBA)
-
18
VBA 別ブックからコピペしたいのですが、軽くしたいです
Visual Basic(VBA)
-
19
エクセルVBAで、ある文字を含んでいたら別シートに抽出したい
Excel(エクセル)
-
20
VBAで複数のブックを開かずに処理する方法
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・【穴埋めお題】恐竜の新説
- ・我がまちの「給食」自慢を聞かせてっ!
- ・冬の健康法を教えて!
- ・一番好きな「クリスマスソング」は?
- ・集合写真、どこに映る?
- ・自分の通っていた小学校のあるある
- ・フォントについて教えてください!
- ・【大喜利】【投稿~12/6】 西暦2100年、小学生のなりたい職業ランキング
- ・これが怖いの自分だけ?というものありますか?
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・遅刻の「言い訳」選手権
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・10代と話して驚いたこと
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「段」と「行」の違いがよくわ...
-
エクセルで離れた列を選択して...
-
VLOOKUPの列番号の最大は?
-
LEFT関数とIF関数の組み合わせ...
-
VBA 指定した列にある日時デー...
-
Excelの行数、列数を増やしたい...
-
リストからデータを紐付けしたい
-
列方向、行方向の定義
-
エクセルのソートで、数字より...
-
VBAで結合セルを転記する法を教...
-
VBAで別ブックの列を検索し、該...
-
横軸を日付・時間とするグラフ化
-
エクセルで住所を県と市・郡と...
-
データシートビューのタイトル...
-
エクセルで複数列の検索をマク...
-
【Excel VBA】列幅の設定
-
VBAで重複データを合算したい(...
-
エクセル 重複したデータを別...
-
csvデータの列の入れ替えができ...
-
エクセル マクロ 範囲の値を上...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「段」と「行」の違いがよくわ...
-
エクセルで離れた列を選択して...
-
VLOOKUPの列番号の最大は?
-
LEFT関数とIF関数の組み合わせ...
-
Excelの行数、列数を増やしたい...
-
VBA 指定した列にある日時デー...
-
列方向、行方向の定義
-
エクセルで最初の行や列を開け...
-
VBAで結合セルを転記する法を教...
-
エクセルマクロの組み方
-
エクセルのソートで、数字より...
-
エクセル マクロ 範囲指定で...
-
Excel文字列一括変換
-
データシートビューのタイトル...
-
エクセルマクロPrivate Subを複...
-
Alt+Shift+↑を一括で行うには、...
-
横軸を日付・時間とするグラフ化
-
エクセルで複数列の検索をマク...
-
リストからデータを紐付けしたい
-
Accessのレポートで繰り返し表...
おすすめ情報
ご回答ありがとうございます。
大変申し訳ありません、説明が不足しておりました。
>>・book2のC列に上記の登録番号が使用日順に並んでいる。
>このC列の重複を取り去れば、それで、そのままつかえないでしょうか。
↑
book1B列の登録番号種類数=book2C列の登録番号種類数となっておりません。
book2の方が原本で、book1はそのうちの幾つかを抜き出し、「このbook1内にある登録番号の最新使用日を調べろ」という命令での作業といった感覚になります。
>B列に重複がないという前提ですが、その上で、C列に現れていないものは、リストには省くものが出てくるのでしょうか。
B列に重複はございません。基本的にはB列にある番号はC列にありますが、人ごく稀にB列にありC列に無い番号が出ます。
実際のマクロまで提示して頂き、誠にありがとうございます。こちらを一度組み込んでみたく思います。