
VBA初心者です。ワークシート2(ws2)で検索した検索結果(9行目B~E列に表示された値)を、ワークシート1(ws1)D~G列の最終行に貼り付けるにはどうしたらよいでしょうか?
単にws2の9行目の値(検索値ではない)をws1へ貼り付けることはできたのですが(下記)、検索結果のコードをどう書くのかわかりませんでした。下記をどのように書き換えればよいか教えていただきたく、どうぞよろしくお願いいたします。
Sub 転記()
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Set ws1 = Worksheets(1)
Set ws2 = Worksheets(2)
Dim lastRow As Long
lastRow = ws1.Cells(Rows.Count,"d").End(xlUp).Row + 1
With ws1
.Cells(lastRow, 4) = ws2.RAnge("B9")
.Cells(lastRow, 5) = ws2.RAnge("C9")
.Cells(lastRow, 6) = ws2.RAnge("D9")
.Cells(lastRow, 7) = ws2.RAnge("E9")
End With
End Sub
A 回答 (6件)
- 最新から表示
- 回答順に表示
No.6
- 回答日時:
ちょっと強引ですが、以下でどうでしょうか。
Public Sub 転記()
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim lastrow As Long
Dim lastrow2 As Long
Dim row2 As Long
Set ws1 = Worksheets(1)
Set ws2 = Worksheets(2)
If ws2.AutoFilterMode = False Then
MsgBox ("フィルターなし")
Exit Sub
End If
lastrow = ws1.Cells(Rows.Count, "d").End(xlUp).Row + 1
lastrow2 = ws2.Cells(Rows.Count, "B").End(xlUp).Row
For row2 = 9 To lastrow2
If Not Application.Intersect(ws2.Cells(row2, "B"), ws2.AutoFilter.Range.SpecialCells(xlCellTypeVisible)) Is Nothing Then
ws1.Cells(lastrow, 4).Resize(, 4).Value = ws2.Cells(row2, "B").Resize(, 4).Value
Exit For
End If
Next
End Sub
No.5
- 回答日時:
下の回答を書いた後、思い出しました。
VBAを使ってフィルタを掛けた後、タイトル行を除くデータを選択し、貼り付けるプログラムを書けば、出来るはずです。
具体的なプログラムコードにつきましては、そらで書くことが出来ず、ヒントのみで申し訳ありません。
VBAを使ってフィルタを掛ける、のコードも書けないもので、、、。
フィルタを使って出て来た結果のその1行だけ、VBAで自動コピペできないかな?と思ったのですが、初心者にはなかなかハードル高いことを理解しました。
ChatGPTでコードを書けるようなのですが、お恥ずかしながら、まだChatGPT使えず、そのあたりから、ちょっと取り組んでみようかなと思います。
ご連絡に感謝いたします。
No.4
- 回答日時:
1つ下のセルを指定する「Offset」というコードがあるんですが、フィルタが掛かっている場合は使えないのでしょうか?
もしくは、VBAを使ってフィルタを掛けたら、出来ませんでしょうか?
No.2
- 回答日時:
こんばんは
>検索結果(9行目B~E列に表示された値)を、
>ワークシート1(ws1)D~G列の最終行に貼り付ける~~
検索結果が必ず9行目固定で表示される仕組みになっていて、それを転記したいというのなら、ご提示のコードで転記できるはずです。
固定行ではなく、どこかの行に表示されているというのであれば、その行をどうやって特定するのかが不明なので、何とも回答のしようがありません。
あるいは、「検索処理そのものをVBAで行いたい」という事なのかもしれませんけれど、その場合は「どこから、何を、どのように検索するのか」がまったく示されていないので、更に何ともしようがありません。
ついでながら、ご質問の文章とご提示のコードの間にもニュアンス的に若干の違いがありそうなので、老婆心ながら・・
・「ワークシート2」、「ワークシート1」との記載ですが、コードはブックの左から順に1番目、2番目のシートを採用していますので、シート名で指定したい場合には必ずしも正確ではありません。
(シートが常にその順で並んでいれば一致します)
・「D~G列の最終行に貼り付ける」とありますが、コードでは「D列の最終行の次の行」に転記するようになっています。
(「D~Gの最終行」が常にD列で代表でき、また、その次の行で良い
のなら問題はありません。
特に、D列に空白セルが存在する可能性がある場合は、意図と異なる
結果になることがありそうです。)
・連続するセル値を転記する場合には、Rangeオブジェクトを利用してまとめて転記するような記法にした方が簡単に記述できますし、処理も若干ながら速くなります。
(たかだか4セル分なので、差はないとも言えますが・・)
No.1
- 回答日時:
こういうのは得意なんですが 歳で面倒くさくなったので ChatGPTに丸投げしました。
以下はその回答です。検索結果を貼り付けるコードの書き換え方法について、ポイントは 検索結果の範囲を直接コピーして貼り付ける ことです。
もし ws2の9行目B~E列に表示された検索結果の範囲 をそのまま ws1のD~G列の最終行 に貼り付けたい場合は、次のようにコードを書き換えるとシンプルに実現できます。
Sub 転記()
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Set ws1 = Worksheets(1) ' ワークシート1
Set ws2 = Worksheets(2) ' ワークシート2
Dim lastRow As Long
lastRow = ws1.Cells(ws1.Rows.Count, "D").End(xlUp).Row + 1 ' ws1のD列の最終行を取得
' 検索結果の範囲を貼り付け
ws2.Range("B9:E9").Copy ' ws2のB9~E9をコピー
ws1.Cells(lastRow, 4).PasteSpecial Paste:=xlPasteValues ' D列の最終行に値のみ貼り付け
Application.CutCopyMode = False ' コピー範囲の点線を解除
End Sub
・ポイント解説
1. ws2.Range("B9:E9").Copy
→ ws2のB9~E9の検索結果をコピーしています。
2. PasteSpecial Paste:=xlPasteValues
→ 値のみを貼り付けるので、書式などは反映されません。
3. Application.CutCopyMode = False
→ コピー後の点線表示を解除するおまじないです。
・もし書式も一緒に貼り付けたい場合
ws1.Cells(lastRow, 4).PasteSpecial Paste:=xlPasteAll
に変更すれば、書式も含めてそのまま貼り付けできます!
これで検索結果の範囲をきれいに貼り付けられるはずです!
試してみてください
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルマクロで出力行の増やし方がわかりません。 4 2023/09/28 23:40
- Visual Basic(VBA) VBAコードが作動しません。修正したいのですが何処に原因かあるか教えて下さい。 1 2024/01/08 16:23
- Visual Basic(VBA) ユーザーフォームに別シートからデータを反映させたい。 10 2023/11/03 08:46
- Visual Basic(VBA) VBA指定行削除 2 2024/05/26 10:02
- Visual Basic(VBA) VBA listBoxについて 2 2024/03/26 16:14
- Excel(エクセル) エクセルマクロでデータ出力の際の条件がうまく機能しません。 2 2023/09/30 13:01
- Visual Basic(VBA) 2つ目のコンボボックスが動作しません。 3 2023/03/25 12:29
- Visual Basic(VBA) コードを直していただきたいです。 以下のコードはネットで拾ったものをほんの少しいじった物なのですが、 7 2024/01/10 22:50
- Excel(エクセル) 【マクロ】AブックからBブックへデータコピーの後、Bブックに上書きされないようにするには? 3 2024/12/22 11:53
- Excel(エクセル) B列に文字がはいったらA列に数字が入るマクロードを完成させたい 4 2023/04/21 01:58
このQ&Aを見た人はこんなQ&Aも見ています
-
VBAの「To」という語句について
Visual Basic(VBA)
-
vbaマクロについて
Visual Basic(VBA)
-
以下のプログラムの実行結果はどうなると思いますか? その理由も教えてください。
Visual Basic(VBA)
-
-
4
質問58753 このコードでうまく動作しません。どうしたら良いですか Private Sub Wor
Visual Basic(VBA)
-
5
エクセルのマクロについて教えてください。
Visual Basic(VBA)
-
6
VBAについてです。 どなたかご教示いただけないでしょうか。 データのチェックシートを作成しています
Visual Basic(VBA)
-
7
【マクロ】開いているブックの名前を取得した後、名前をセルに1つづつ入力するには?
Visual Basic(VBA)
-
8
不要項目の行削除方法について
Visual Basic(VBA)
-
9
エクセル数式に問題があります
Excel(エクセル)
-
10
VBAで特定の文字が入った行をコピーして貼り付けたい
Visual Basic(VBA)
-
11
VBA_日時のソート
Excel(エクセル)
-
12
改行文字「vbCrLf」とは
Visual Basic(VBA)
-
13
エクセルのファイルのコピーをとりたい
Excel(エクセル)
-
14
Excel VBAについて。こんな動作をさせるためにはどう書けばよいでしょうか。
Visual Basic(VBA)
-
15
算術演算子「¥」の意味について
Visual Basic(VBA)
-
16
ユーザーマクロ作成
Excel(エクセル)
-
17
【マクロ】Call関数で呼び出した場合、共通の変数宣言は、省略できますか?
Excel(エクセル)
-
18
【マクロ】参照渡しとモジュールレベル変数 どっちが よく使うものですか?
Excel(エクセル)
-
19
Excelで〇のついたものを抽出したい
その他(Microsoft Office)
-
20
【マクロ】変数を使った、文字の種類の変更にて、エラーとなる。
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【マクロ】並び替えの範囲が、...
-
【マクロ】売上一覧YYYYMMDDHHS...
-
エクセルの改行について
-
[VB.net] ボタン(Flat)のEnable...
-
質問58753 このコードでうまく...
-
【ExcelVBA】5万行以上のデー...
-
vbs ブック共有を解除
-
VBAでCOPYを繰り返すと、処理が...
-
vbaにてseleniumを使用したedge...
-
【マクロ】開いているブックの...
-
(EXCEL超初心者)EXCELの関数(ま...
-
算術演算子「¥」の意味について
-
Excel 範囲指定スクショについ...
-
2つのマクロでチェックボックス...
-
vbsでのwebフォームへの入力制限?
-
【マクロ】変数を使った、文字...
-
以下のプログラムの実行結果は...
-
VBA レジストリの値の読み方に...
-
Vba セルの4辺について罫線が有...
-
エクセルのマクロについて教え...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
testファイル内にある複数のpng...
-
改行文字「vbCrLf」とは
-
エクセルVBA 検索結果を隣のシ...
-
vb.net(vs2022)のtextboxのデザ...
-
エクセルのVBAコードと数式につ...
-
【マクロ】切取りの場合、形式...
-
【ExcelVBA】5万行以上のデー...
-
ExcelVBAでパワポを操作したい
-
(EXCEL超初心者)EXCELの関数(ま...
-
エクセルの改行について
-
Excelマクロで使うVBAコードを...
-
ワードの図形にマクロを登録で...
-
【マクロ】変数を使った、文字...
-
VBAでFOR NEXT分を Application...
-
VBAの質問(Msgboxについて)です
-
エクセルのVBAコードについて教...
-
Excelマクロで使うVBAコードを...
-
Excelのマクロについて教えてく...
-
VBAの「To」という語句について
-
【マクロ】値を渡されたプロシ...
おすすめ情報
検索結果はワークシート2の9行目に表示された値と書いてしまったのですが、検索値は9行目の固定行ではなく、フィルター検索で、見出し行8行目の次の行に出て来た行です(フィルター検索で8行目の次の行に出て来た、例えば12行目とか130行目とか)。
ワークシート2、見出し行:B8番号、C8氏名、D8日付、E記号
現在は、ワークシート2 B8に番号を入れフィルター検索、検査値(出て来た行)のD列に日付を入れて、B~E列を手でコピーして、ワークシート1のD~G列の最終行に貼り付けをしています。
検索で出て来た行のワークシート2のB~E列をワークシート1のD~G列の最終行へボタンを押したら自動で貼り付けする。or ワークシート2のD8日付に新しく日付が入った行を、ボタンを押したらワークシート1のD~G列の最終行へボタンを押したら自動で貼り付けする。のどちらかができたらたいいな、と思っておりました。