- ベストアンサー
特定文字列から空白行までの抽出
- VBA初心者が特定文字列から空白行までのデータを抽出する方法は?
- 関数を使って特定文字列から空白行までのデータを取得する方法を教えてください
- 月次のExcelファイルから特定文字列までのデータを効率的に取得する方法は?
- みんなの回答 (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
その他の回答 (5)
- n-jun
- ベストアンサー率33% (959/2873)
#2です。 >(手動で”北棟2”の範囲を”北棟2H”のシートのB8以下へ貼り付けしました)、 セルの"北棟2"がシート名"北棟2H"なら、 rr.Copy Worksheets(r.Item(1).Offset(, 1).Value & "H").Range("B8") となります。 ⇒アップされたファイルは観られないみたい?
お礼
お手数かけました、ジオシティーズは制限が多かったようです。ご迷惑をおかけしました。 もう一度ファイルをアップしました。 https://www.webfile.jp/dl.php?i=730597&s=b7eac4e6cd08b19bda56 よろしくお願いいたします。
- kmetu
- ベストアンサー率41% (562/1346)
ANo3 修正です EndAddress = Range("A" & m_Start.Row + j - 1).Address ↓ EndAddress = Range("A" & m_Start.Row + j - 1).Offset(0, 1).Address
補足
ありがとう御座います。VBAが途中で止まってしまい、そもそも私の表現がよろしくない事に気がつきました。 ファイルをアップ致しました。 http://www.geocities.jp/hartpopoo/test.xls この中でシート名に"H"を追加しておりますが、敢えて別名にすることが便利だと考えました。 (手動で”北棟2”の範囲を”北棟2H”のシートのB8以下へ貼り付けしました)、他のシートにも同様に該当する(当てはめる)シートのB8へそれぞれデータを貼り付けたいと思っております。 頼り過ぎて申し訳ありません。
- kmetu
- ベストアンサー率41% (562/1346)
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)
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 こちらならどうでしょうか。
補足
何度もありがとう御座います。 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)
シート構成が今一不明でしたが。 ・このシートは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 ご参考になれば。
補足
早速のご回答ありがとう御座います、投稿後に修正が必要な事にに気がつきましたが回答を頂けるまで修正が出来ずに困っておりました。申し訳ありません。 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、西棟・・・ を指定し、そこから次の行から空白(空白の前の行まで)をシートに転記できればと考えております。よろしくお願いします。
お礼
ありがとう御座いました。こんなに早く目的が達成できるとは思っておりませんでした。 完璧です。 Find(what:="*" & m_Tou(i) & "*") の"*"や所々解らない部分もありますが、助かりました ありがとう御座います。