• ベストアンサー
※ 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

  • セル内文字を切取りその行範囲の列の空白セルに貼付

    B列3行目から添付のようにセル内にカンマを含む文字がありカンマで区切った文字ごとに切り取り矢印右のように同B列の次の空白行に順に貼り付けたく、その際カンマは削除したいです。また等間隔の名前の行がある中で枠内の空白に文字を張付けたく等間隔行数枠が多くてできればVBAコードがお分かりなる方宜しくお願いします。 環境はwindows7 office2013です。

  • 特定の列の最初にあるデーター抽出

    Sheet1のB5からB65までのセルにランダムで数字が入れてありますが必ずどのセルにも数字が入っているわけでは無く空白のセルも数字の入ったセルも混在しています。 この列の最後の数字をSheet2の任意のセルに抜き出すには、Lookup関数でできますが、列の最初の数字を抜き出すにはどのような関数で行えるのか教えてください。

  • Excelで空白行を削除したい

    2500行位使用しているシートのなかに、どのセルも空白になっている不要な行が300行くらい混ざっています。 この行を自動的に削除するにはどうすれば良いでしょうか。 ただ、その行のA~Eセルは空白でもFセルに値が入っているなど完全に空白でない行は削除できません。 メニュー、関数、VBAなど有れば教えてください。

  • EXCElで特定の文字列の行をコピー

    下記のようなシートがあります。 列A~K 行1~80程度 列は変わることがありません。 行はデータ量によって40~80くらいまで変動します。 この中の特定の行をコピーして他のシートにペーストしたいのです。 コピーしたい行のK列は430という数字が入ります。 K列には430以外の数字も入ることがあります。 また、コピーしたい行の範囲は「開始」という文字列から「小計」 と言う文字列の間です。(小計の後の行にも430という数字が出てきます) マクロを使えば出来ると言うことは聞いたのですが、ヘルプを見ても よくわかりません。 わかる方いましたら是非ご教授下さい。

  • エクセルで文字最終行の空白セルへ移動

    エクセル2000です。 1000行内で間にとびとび(順不同)に空白セル、他は文字有りです。 (1000行目は文字あり) シートが10個あり、各シートともばらばら(ウィンドー枠固定位置)ですが、ウィンドー枠固定内の行に「最終行へ移動」のボタンを設け、いずれの行からも、最終文字入力の次の行空白セル(AからZ列のいずれか)へ移動したいです。 方法がありますでしょうか? VBAの場合、素人につきVBAへの入力方法等も一緒にお願いします。またVBAの場合、ソフトを立ち上げたら直ぐに実行できるようにしたいです。(立ち上がり時のマクロ警告はあり) よろしくお願いいたします。

  • セル内文字を切り取りその列の空白セルに貼付け

    B列3行目から添付のようにセル内にカンマを含む文字がありカンマで区切った文字ごとに切り取り矢印右のように同B列の次の空白行に順に貼り付けたく、その際カンマは削除したいのですが行数が多くてできればVBAコードがお分かりなる方宜しくお願いします。 環境はwindows7 office2013です。

  • EXCELで文字検索したセルの行と前後の行の削除の方法

    EXCEL-VBAを使ってワークシートのデータ整形をしています。 ある文字列を検索し、その文字列を含む行とその前後の行を削除するロジックを記述したいのですがうまくできません。 例:検索文字列「合計」、"合計"の入っているセル「B120」のとき、B119~B121の3行分の行削除をしたい。 おそらく検索された文字列を含むセルの行番号を取得してその番号-1と+1の行を選択して削除すればよいのではないかと思ってるのですが、もっと良い方法があるのでしょうか? よろしくお願いします。

  • エクセル2002で、ある列が空白なら、その空白のある行は削除する方法

    エクセル2002で、 ある列に空白のセルがあった場合、その行を削除する方法を教えてください。 例えば、B列を選択して、 編集、ジャンプ、セル選択、空白セル、OKとたどって、 セルB11、セルB22、セルB33が空白セルなら、 11,22,33の行を削除する方法を教えてください。

  • 文字列を指定して2行へ移動

    シート1のA列に下記のデータが入力されています。 11-1111あああああ 22-2222いいいいいい 33-3333ううううう 44-4444えええええええ     ↓ シート2のA1セルに「11-1111」A2「あああああ」 B1に「22-2222」B2に「いいいいいい」 C1に「33-3333」C2に「ううううう」 と3列に繰り返し文字列を移動することは可能でしょうか? 「11-1111」と「あああああ」のフォント数も違います。 シート1のA列には実際、かなりのデータの量があります。 VBAはまったくわからないのでできたら関数で解決できたらと思います。 わかりにくい説明ですみませんが宜しくお願いします。

  • エクセル セル内の文字列を空白から空白まで抽出したい。

    一つのセルに入っている文字列を複数のセルに分割したいのですが良い方法が見つかりません。 具体的には 「商品名 単価 数量 金額」が一つのセルに入っているのですが、これをそれぞれ「商品名」「単価」「数量」「金額」というように別のセルに分けたいのです。 条件は次です。 ・文字列の区切りは空白(スペース)。 ・商品名や金額などそれぞれの文字列の長さは決まっていません。 ・商品名には名称の中に空白が使われている場合があります、その数も決まっていません。 以上です。いろいろ関数を使ってやってみたのですが、どうもうまくいきません。 どなたか良い方法がありますでしょうか、よろしくお願いいたします。

専門家に質問してみよう