• ベストアンサー

エクセル:文字列間の行を抽出

エクセルファイルで1つのシートに複数の表がひたすら縦に並んでいます。それぞれの表が別々のシートに記載されるようにしたいと思っています。 どの表も基本的な書式は同じなので列数は同じなのですが、行数は表ごとに異なります。 また各表の右下(C列)にTotalという文字列が必ずあります。 文字列Totalがある行の直下の行から次のTotalのある行まで抽出して、シートを作成できれば良いのだと思うのですが、どうすれば可能になるのか分かりません。 どなたか教えていただけ無いでしょうか。

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

これはVBA向きの課題です。 (1)では「Tptal」の2度目からの探索が難しい。 最近私はユーザー関数を作って処理する方法を回答しましたが、これもVBAといえなくも無い。 (2)Sheet2にある式をA1にセットしたとして、Sheet3に、(同一シート内の行の式を複写するようには)複写による行列の連続変化が、上手く行きません。シートと関連させるために、名前と関連させることも至難です。SheetにはVBAをやるとわかりますがIndexという番号がありますが、関数では捉えられない。ユーザー関数を使えばできそうですが、横道にそれる。 いじょう2点からVBAでやるのが簡単でしょう。 ーー H列にTotalがあるとして その行の下までを、別シートにコピーしてます。 Sub test01() Dim sh1 As Worksheet Set sh1 = Worksheets("Sheet1") d = sh1.Range("A65536").End(xlUp).Row MsgBox d s = 1 '-- For i = 1 To d If sh1.Cells(i, "H") = "Total" Then sh1.Range(sh1.Cells(s, "A"), sh1.Cells(i + 1, "J")).Copy Worksheets.Add.Activate ActiveSheet.Paste s = i + 2 i = i + 1 End If Next i End Sub

yu_10
質問者

お礼

ありがとうございます。 VBAだと意外と短いプログラムで出来るんですね。 キーボードマクロの回答と甲乙つけがたいのですが、こちらの方が処理が軽い事、キーボードマクロ動作中は同じPCで他の作業ができないことからこちらの方が私の好みに合っていました。

その他の回答 (1)

  • shintaro-2
  • ベストアンサー率36% (2266/6245)
回答No.1

お手軽な方法は、 キーボードマクロを利用し、所望の操作を記録することです。 シートの一番上を選択し、すぐ下のtotalを検索し、 そこを起点としてShift+Ctrl+homeで目的の範囲を切取り ワークシート挿入 貼り付け という一連の操作を記録させれば、後はカンタンです。 テクニックがあれば、通常のマクロを組めばすみます。

yu_10
質問者

お礼

ご回答ありがとうございます。 キーボードマクロというのは初めて知りました。 簡単そうで手作業よりも楽そうです。 データが大きいのでPCが耐えられるか心配ですが、とりあえず試してみようと思います。

関連するQ&A