• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:質問:特定文字列から空白行までの抽出)

特定文字列から空白行までの抽出

このQ&Aのポイント
  • VBA初心者が特定文字列から空白行までのデータを抽出する方法は?
  • 関数を使って特定文字列から空白行までのデータを取得する方法を教えてください
  • 月次のExcelファイルから特定文字列までのデータを効率的に取得する方法は?

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

  • ベストアンサー
  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.6

Sheet1のコードとしてください Sub test() Dim m_Start As Object Dim m_Tou As Variant Dim Check As Boolean Dim EndAddress As String Dim i As Integer, j As Integer m_Tou = Array("北棟2", "南棟1", "西棟2", "東棟1", "東棟3") For i = 0 To UBound(m_Tou) Set m_Start = Range("B:B").Find(what:="*" & m_Tou(i) & "*") Check = True j = 1 Do If Range("B" & m_Start.Row + j).Value = "" Then Check = False EndAddress = Range("B" & m_Start.Row + j - 1).Offset(0, 1).Address End If j = j + 1 Loop Until Check = False Range(m_Start.Offset(1, -1).Address & ":" & EndAddress).Copy Sheets(m_Tou(i) & "H").Range("B8").PasteSpecial Next Application.CutCopyMode = False End Sub

hartpopoo
質問者

お礼

ありがとう御座いました。こんなに早く目的が達成できるとは思っておりませんでした。 完璧です。 Find(what:="*" & m_Tou(i) & "*") の"*"や所々解らない部分もありますが、助かりました ありがとう御座います。

その他の回答 (5)

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.5

#2です。 >(手動で”北棟2”の範囲を”北棟2H”のシートのB8以下へ貼り付けしました)、 セルの"北棟2"がシート名"北棟2H"なら、 rr.Copy Worksheets(r.Item(1).Offset(, 1).Value & "H").Range("B8") となります。 ⇒アップされたファイルは観られないみたい?

hartpopoo
質問者

お礼

お手数かけました、ジオシティーズは制限が多かったようです。ご迷惑をおかけしました。 もう一度ファイルをアップしました。 https://www.webfile.jp/dl.php?i=730597&s=b7eac4e6cd08b19bda56 よろしくお願いいたします。

  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.4

ANo3 修正です EndAddress = Range("A" & m_Start.Row + j - 1).Address ↓ EndAddress = Range("A" & m_Start.Row + j - 1).Offset(0, 1).Address

hartpopoo
質問者

補足

ありがとう御座います。VBAが途中で止まってしまい、そもそも私の表現がよろしくない事に気がつきました。 ファイルをアップ致しました。 http://www.geocities.jp/hartpopoo/test.xls この中でシート名に"H"を追加しておりますが、敢えて別名にすることが便利だと考えました。 (手動で”北棟2”の範囲を”北棟2H”のシートのB8以下へ貼り付けしました)、他のシートにも同様に該当する(当てはめる)シートのB8へそれぞれデータを貼り付けたいと思っております。 頼り過ぎて申し訳ありません。

  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.3

Sub test() Dim m_Start As Object Dim m_Tou As Variant Dim Check As Boolean Dim EndAddress As String Dim i As Integer, j As Integer m_Tou = Array("北棟2", "南棟1", "西棟2", "東棟1", "東棟3") For i = 0 To UBound(m_Tou) Set m_Start = Range("A:A").Find(what:="*" & m_Tou(i) & "*") Check = True j = 1 Do If Range("A" & m_Start.Row + j).Value = "" Then Check = False EndAddress = Range("A" & m_Start.Row + j - 1).Address End If j = j + 1 Loop Until Check = False Range(m_Start.Address & ":" & EndAddress).Copy Sheets(m_Tou(i)).Range("B8").PasteSpecial Next Application.CutCopyMode = False End Sub でいかがですか

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.2

n-junです。 Sub try2() Dim r As Range Dim rr As Range With Worksheets("Sheet1") ' データのあるシート For Each r In .Range("A6", .Cells(Rows.Count, 1).End(xlUp)).SpecialCells(xlCellTypeConstants, 3).Areas Set rr = r.Offset(1).Resize(r.Rows.Count - 1, 2) rr.Copy Worksheets(r.Item(1).Offset(, 1).Value).Range("B8") Next End With Set rr = Nothing End Sub こちらならどうでしょうか。

hartpopoo
質問者

補足

何度もありがとう御座います。 rr.Copy Worksheets(r.Item(1).Offset(, 1).Value).Range("B8") で止まってしまいます。シートレイアウトの伝え方がまずいのだと思います。 ファイルをアップ致しました。 http://www.geocities.jp/hartpopoo/test.xls この中でシート名に"H"を追加しておりますが、敢えて別名にすることが便利だと考えました。 (手動で”北棟2”の範囲を”北棟2H”のシートのB8以下へ貼り付けしました)、他のシートにも同様に該当する(当てはめる)シートのB8へそれぞれデータを貼り付けたいと思っております。よろしくお願いします。

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

シート構成が今一不明でしたが。 ・このシートはA~B列に値がある。 ・このシートの6行目以下が対象である。 ・このシートのA列にあるデータの塊のうち、 ”小計”を除いた塊で1つ目はコピーするシート名を指定する。 ・指定されたシートのB8以下に、このシートのA列の値をコピペする。 ・各シートは事前に存在するものとする。 と判断しました。 Sub try() Dim r As Range With Worksheets("Sheet1") ' データのあるシート For Each r In .Range("A6", .Cells(Rows.Count, 1).End(xlUp)).SpecialCells(xlCellTypeConstants, 3).Areas If r.Item(1).Value <> "小計" Then r.Copy Worksheets(r.Item(1).Value).Range("B8") Next End With End Sub ご参考になれば。

hartpopoo
質問者

補足

早速のご回答ありがとう御座います、投稿後に修正が必要な事にに気がつきましたが回答を頂けるまで修正が出来ずに困っておりました。申し訳ありません。      A   B  C 5  xxxxxx名   日付  5行目までは不要な文字で御座います 6  空白  空白   空白  7  30010  北棟2     ←30010がA列 北棟2がB列(30010が記入漏れ)  8  1111  鈴木 5    抽出したいデータ部分(A:1111 B:鈴木 C:5) 9  2222  武田 5 10  11200  山田 5 11  4444  高橋 4 12  5555  佐藤 5 13  6666  小林 4 14  7777  村上 0    15  空白  空白 空白   ←空白の一つ上の行までが抽出したいデータ  16     【小計 28】←B列(B16セルに【小計 28】が入っております、値は変わります) 17  空白  空白 空白   18 30020 南棟1 29 30030 西棟2 A列のコード(30010)(30020)(30030)(30040)・・・(30070)か B列の北棟2、南棟1、西棟・・・ を指定し、そこから次の行から空白(空白の前の行まで)をシートに転記できればと考えております。よろしくお願いします。

関連するQ&A