Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


11915 / 76734 ←次へ | 前へ→

【70348】Re:複数のシートからデータを抽出するマクロ
回答  UO3  - 11/11/3(木) 19:22 -

引用なし
パスワード
   ▼JIRORO さん:

出張、おつかれさまでした。

コードで気になるところは多々あるのですが、直接の間違いポイントは
s.Range(s.Cells(f, 1), s.Cells(f, 7)).Copy
f は このシートで最初に見つかったセルの行番号ですから、常に、この行の内容がコピペされます。
かといって、毎回、この f を変更すると、ループでの最終制御ができなくなります。
s.Range(s.Cells(c.Row, 1), s.Cells(c.Row, 7)).Copy
こうすれば、とりあえずはOKになるはずです。

ところで、Set c = s.Range("B:B").Find(what:=a)
Findメソッドで検索開始セルを指定しない場合、その領域の最初が検索開始セルになります。
一見、よさそうに見えますが、実は、検索開始セルの「次から」検索しなさいという機能なので
これでは、B1の次からという意味になってしまい、B1が最後に検索されます。
ですから、仮に、B1に検索値と同じものが入っていても、それはtestシートの下の方にコピペされることになります。
対応策としては、その領域の最後のセルを開始セルにします。
実際には開始セルの次からの検索ですから、つまりB1からということになります。

そのほかの構成は、基本、アップされたコードのままで、ちょっとお化粧直しをしたものが以下です。
( f を行番号で使っておられますが、以下ではセルアドレス変数にしてあります)

Sub Sample()
  Dim s As Worksheet
  Dim sh2 As Worksheet
  Dim myR As Range
  Dim a As Variant
  Dim c As Range
  Dim f As Range
  Dim las As Long
  
  las = 1
  Set sh2 = Sheets("test")
  sh2.Columns("A:G").ClearContents
  
  a = sh2.Range("H1").Value '仮です
  
  For Each s In Worksheets
    If Not s Is sh2 Then  'testシート以外を対象に
      If MsgBox(s.Name & "を検索しますか", vbYesNo) = vbYes Then
        Set myR = s.Range("B1", s.Range("B" & s.Rows.Count).End(xlUp))
        Set c = myR(myR.Cells.Count)
        Set c = myR.Find(what:=a, After:=c, LookIn:=xlFormulas, LookAt:=xlPart, _
            SearchOrder:=xlByRows, SearchDirection:=xlWhole, _
            MatchCase:=False, MatchByte:=False, SearchFormat:=False)
        If Not c Is Nothing Then
          Set f = c
          Do
            sh2.Cells(las, 1).Resize(, 7).Value = s.Cells(c.Row, "A").Resize(, 7).Value
            las = sh2.Cells(sh2.Rows.Count, 1).End(xlUp).Row + 1
            Set c = myR.FindNext(c)
          Loop While c.Address <> f.Address
        End If
      End If
    End If
  Next
  
  sh2.Select
  Set sh2 = Nothing
  Set c = Nothing
  Set f = Nothing
  
  MsgBox "貼り付けが終了しました"
  
End Sub
9 hits

【70341】複数のシートからデータを抽出するマクロ JIRORO 11/11/3(木) 11:19 質問
【70342】Re:複数のシートからデータを抽出するマクロ UO3 11/11/3(木) 12:00 発言
【70343】Re:複数のシートからデータを抽出するマクロ JIRORO 11/11/3(木) 12:42 回答
【70348】Re:複数のシートからデータを抽出するマクロ UO3 11/11/3(木) 19:22 回答
【70353】Re:複数のシートからデータを抽出するマクロ JIRORO 11/11/4(金) 20:30 お礼

11915 / 76734 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free