• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Excel VBAで検索結果を新規ブックにコピー)

Excel VBAで検索結果を新規ブックにコピー

このQ&Aのポイント
  • Excel VBAを使用して、コンボボックスで選択した文字列とSheet1のC列の文字列が一致した場合、その行を新規ブックのSheet1にコピーする方法が分からない
  • 既存のブックのSheet2にはコピーできるが、新規ブックのSheet1へのコピーがうまくいかない可能性がある
  • 書籍やインターネットで調査しても解決策が見つからなかったため、助けを求めている

質問者が選んだベストアンサー

  • ベストアンサー
  • kybo
  • ベストアンサー率53% (349/647)
回答No.2

宣言している変数と使用している変数が全然ばらばらですね。 Dim newBook As Workbook としているのに、 Set newB = Workbooks.Add としてみたり。 あと、表は1行目からあるのに、 gyou = 4 としているのは?gyou = 1では? この辺とか無茶苦茶ですよ。アクティブでないブックはちゃんとシート名も明示しないと。 Rows(gyou).Copy newBook.Cells(Rows.count, 1).End(xlUp).Offset(1, 0) 「newBook.Cells」はおかしい。newSheet.Cellsです。基本:ブック.シート.セルの順なので。 一応訂正サンプルつけておきます。訂正はご容赦。 Sub Search_Click() Dim SearchWord As String Dim gyou As Long Dim word As String Dim LastRow As Long Dim count As Integer Dim baseBook As Workbook Dim newBook As Workbook Dim baseSheet As Worksheet Dim newSheet As Worksheet SearchWord = cmbsSyutokubutu_search.Text Set baseBook = ThisWorkbook Set baseSheet = baseBook.Worksheets("Sheet1") baseSheet.Activate With Worksheets("Sheet1") count = 0 gyou = 1 LastRow = baseSheet.Cells(Rows.count, 5).End(xlUp).Row Set newBook = Workbooks.Add Set newSheet = newBook.Worksheets("Sheet1") Do While baseSheet.Cells(gyou, 3) <> "" word = baseSheet.Cells(gyou, 3) If InStr(word, SearchWord) >= 1 Then baseSheet.Rows(gyou).Copy newSheet.Cells(newSheet.Rows.count, 1).End(xlUp).Offset(1, 0) End If gyou = gyou + 1 Loop End With End Sub

komakoma2012
質問者

お礼

早速教えて頂き大変ありがとうございました。ご指摘の通り、変数宣言している名前と実際に使っている名前が違っていました。それから、現在どのシートやセルを扱っているのかが分かっていなかったということがよく分かりました。訂正して頂きましたコードの通りにすれば、私の希望する動きをしてくれました。本当に大変助かりましたし、勉強になりました。Excel VBAは調べながらやっていたので、きちんと基本から勉強しないといけないことがよく分かりました。ありがとうございました。

その他の回答 (1)

回答No.1

試してません。サッと見ただけです。 With Worksheets("Sheet1")   count = 0   gyou = 4   LastRow = baseSheet.Cells(Rows.count, 5).End(xlUp).Row   Set newB = Workbooks.Add   Set newS = newBook.Worksheets("Sheet1")   Do While Cells(gyou, 3) <> ""     word = Cells(gyou, 3)     If InStr(word, SearchWord) >= 1 Then       Rows(gyou).Copy newBook.Cells(Rows.count, 1).End(xlUp).Offset(1, 0)     End If     gyou = gyou + 1   Loop End With 試してませんが、上記の With Worksheets("Sheet1") と End With は不要だと思う。 で、それは今回の問題とは別の話。 不具合の原因としては   Do While Cells(gyou, 3) <> ""     word = Cells(gyou, 3)     If InStr(word, SearchWord) >= 1 Then       Rows(gyou).Copy newBook.Cells(Rows.count, 1).End(xlUp).Offset(1, 0)     End If     gyou = gyou + 1   Loop って部分に Cells とか Rows って出てきますが、コレがどのブックのどのシートを参照しているのか、あなたの期待する参照先と、プログラムが実際に参照している参照先とが違っているのでは? Set newS = newBook.Worksheets("Sheet1") を実行すると新規ブックがアクティブになるため、その後の Cells や Range はブックを指定していないため、新規ブックの先頭のシートを参照していると思います。 newsheet とか basesheet とか、シートを参照している変数を使っているのだから newsheet.Cells とかの書き方にしてみてください。

komakoma2012
質問者

お礼

丁寧に教えて頂きましてありがとうございました。おっしゃる通り、私は現在どのシートやセルを参照させたいのかを記述できていなかったとよく分かりました。ネットで調べながらやっているので、イマイチ基本的な部分が分かっておりませんでした。このように親切に教えて頂き、大変助かりましたし、勉強になりました。ありがとうございました。

関連するQ&A

専門家に質問してみよう