[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『VBAをつかったデータ抽出方法について教えてほしい』(さな)
VBAをつかったデータ抽出方法について教えてほしい
エクセルに「抽出先シート」、「データ1」、「データ2」というシートがあります。
以下が各シートの特徴です。
「抽出先シート」
・セルC4〜C7まで取引先のデータがある
・セルE3〜G3に「日付」「No」「取引先」という項目がある
「データ1」
・セルB2〜D2に「日付」「No」「取引先」という項目がある
・B3〜D9にそれぞれの項目のデータ内容が入っている(行は可変)
「データ2」
データ1と全く同じ
「抽出先シート」の取引先を選択したとき
セルE3〜G3に「日付」「No」「取引先」の下セルE4〜G4以下にデータ1とデータ2の
該当するセル行を転記するプログラムを組みたいです。
< 使用 Excel:unknown、使用 OS:unknown >
Sub Sample4()
'?@シートを変数にセット Dim ws1 As Worksheet Dim ws2 As Worksheet Dim ws2 As Worksheet Set ws1 = Worksheets("抽出先") Set ws2 = Worksheets("データ1") Set ws3 = Worksheets("データ2")
Dim lastRow As Long Dim lastRow2 As Long Dim i As Long lastRow1 = ws1.Range("A" & Rows.Count).End(xlUp).Row For i = 2 To lastRow1 lastRow2 = ws2.Range("B" & Rows.Count).End(xlUp).Row ws2.Range("B" & lastRow2 + 1 & ":D" & lastRow2 + 1).Value = ws1.Range("B" & i & ":D" & i).Value Next i
'?Aシートを指定してデータを転記 ws1.Range("E4:G").Value = ws2.Range("B3:C").Value ws1.Range("E4:G").Value = ws3.Range("B3:C").Value
End Sub
(さな) 2022/10/06(木) 00:47
「抽出先シート」の取引先を選択したとき これは「抽出先シートのG3セルにカーソルを合わせた時」ですか?
それとも「抽出先シートのC4〜C7セルにカーソルを合わせた時」ですか?
選択するデータと抽出するデータに関係性が見えない場合、該当させるのは難しいと思いますが。
(ngk) 2022/10/06(木) 08:41
'「抽出先シート」
'・セルC4〜C7まで取引先のデータがある
'・セルE3〜G3に「日付」「No」「取引先」という項目がある
'「データ1」「データ2」
'・セルB2〜D2に「日付」「No」「取引先」という項目がある
'・B3〜D9にそれぞれの項目のデータ内容が入っている(行は可変)
'シートを変数にセット
Dim ws1 As Worksheet Dim ws2 As Worksheet Dim ws3 As Worksheet Dim ws As Worksheet
Dim lastRow1 As Long Dim lastRow2 As Long Dim i As Long
Set ws1 = Worksheets("抽出先") '「抽出先シート」 Set ws2 = Worksheets("データ1") '「データ1」 Set ws3 = Worksheets("データ2") '「データ2」
'抽出先(「抽出先シート」のE列)最終行を取得 lastRow1 = ws1.Range("E" & Rows.Count).End(xlUp).Row 'データ用シートを巡回 For Each ws In Worksheets(Array(ws2.Name, ws3.Name)) With ws 'データ用シートの最終行を取得 lastRow2 = .Range("B" & Rows.Count).End(xlUp).Row '3行目から最終行まで巡回 For i = 3 To lastRow2 'G列の値がkeyword(取引先)と一致したら If .Range("D" & i).Value = keyword Then '抽出先行を1加算 lastRow1 = lastRow1 + 1 '抽出先のE〜G列にデータのB〜D列を転記 ws1.Range("E" & lastRow1 & ":G" & lastRow1).Value = .Range("B" & i & ":D" & i).Value End If Next End With Next End Sub
練習問題のつもりで作成してみました。
さなさんの考えと違ったものでしたらご指摘お願いします。
(下手の横好き) 2022/10/06(木) 10:21
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Not Intersect(Target, Range("C4:C7")) Is Nothing Then '選択中範囲とC4:C7の範囲が重なっていたら Cancel = True 'ダブルクリックをキャンセル Dim r As Range For Each r In Intersect(Target, Range("C4:C7")).Cells '選択範囲とC4:C7の重複セルについて Sample r '抽出を実施 Next End If End Sub
これを標準モジュールに記入
Sub Sample(ByVal keyword As String)
'シートを変数にセット
Dim ws1 As Worksheet Dim ws2 As Worksheet Dim ws3 As Worksheet Dim ws As Worksheet
Dim lastRow1 As Long Dim lastRow2 As Long Dim i As Long
Set ws1 = Worksheets("抽出先") '「抽出先シート」 Set ws2 = Worksheets("データ1") '「データ1」 Set ws3 = Worksheets("データ2") '「データ2」
'抽出先(「抽出先シート」のE列)最終行を取得 lastRow1 = ws1.Range("E" & Rows.Count).End(xlUp).Row 'データ用シートを巡回 For Each ws In Worksheets(Array(ws2.Name, ws3.Name)) With ws 'データ用シートの最終行を取得 lastRow2 = .Range("B" & Rows.Count).End(xlUp).Row '3行目から最終行まで巡回 For i = 3 To lastRow2 'G列の値がkeyword(取引先)と一致したら If .Range("D" & i).Value = keyword Then '抽出先行を1加算 lastRow1 = lastRow1 + 1 '抽出先のE〜G列にデータのB〜D列を転記 ws1.Range("E" & lastRow1 & ":G" & lastRow1).Value = .Range("B" & i & ":D" & i).Value End If Next End With Next End Sub
一つ前の書き込みは貼り付けるものを間違えてしまいました。
(下手の横好き) 2022/10/06(木) 10:22
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.