dポイントプレゼントキャンペーン実施中!

(1)sheet1のA列からH列までデータが入っています。
(2)検索機能を使って発見されたセル(検索されるデータはA列にのみ入っています。)からA~H列のデータが入っている最終行まで選択し切り取り。(場合によっては検索を2回してから選択範囲を決めます)
(3)sheet2のA2へ貼り付け

(1)~(3)の作業をsheet7まで繰り返します。
マクロの記録を行うと選択範囲が指定され別のデータの時にも前と同じ範囲しか指定できません。


sheet1検索ち→発見されたセル(この場合A3)からA~H列の最終行(A9)選択及び切り取り→sheet2のA2へ貼り付け→検索ち→文字が縦に2回続いている場合は次を検索→発見されたセル(この場合A6)からA~H列の最終行(H8)選択及び切り取り→sheet3のA2へ貼り付け
sheet1   →     sheet2   →   sheet3
 ABCDEHGH    ABCDEHGH  ABCDEHGH
1ち あいうえおか  1          1
2ひあいう えおか 2ちあい い うえ 2ちあいうえお か
3ちあい い うえ  3 あいうえお か 3ひあいうえおかき
4ゆあいうえお か 4ちあいうおかき  4ちあ うえおき 
5ちあいうおかき  5ゆあいうえおかき 
6 あいうえおかき 6ちあいうえお か 
7ちあいうえお か 7ひあいうえおかき
8ひあいうえおかき 8ちあ うえおき 
9ちあ うえおき  
*実際のデータは2000行ぐらいデータが入っています。
*見えずらくてすみません。

A 回答 (3件)

最初に切り取り開始行を検索して配列にでも入れておき、ループを回して、切り取り開始行~最終行までのコピーを各シートに貼り付けると言う処理になるかと思います。


サンプルコードを書きますので、Step実行でもして何をしているか確認して見てください。


Sub sample()
Dim nMaxRow As Long
Dim nLoop As Long
Dim nSheet As Long
Dim nCount As Long
Dim nStartRow() As Long '切り取り開始行を入れる配列

Sheets("Sheet1").Select

'*** A2から順に見て行き、選択開始位置を求める
nMaxRow = ActiveSheet.UsedRange.End(xlDown).Row 'データのある最終行

nCount = 0
For nLoop = 2 To nMaxRow
 'セルの値が検索文字と同一かつ、次のセルの値は検索文字と不一致なら切り取り開始行
 If StrComp(Cells(1, 1), Cells(nLoop, 1)) = 0 And StrComp(Cells(1, 1), Cells(nLoop + 1, 1)) <> 0 Then
  ReDim Preserve nStartRow(nCount) '配列を広げる
  nStartRow(nCount) = nLoop '切り取り開始行を代入
  nCount = nCount + 1
  If nCount > 5 Then Exit For 'Sheet7までなのでこれ以上の切り取りは不要
 End If
Next nLoop

'*** 検索文字が無かった場合
If nCount = 0 Then
 MsgBox ("検索文字「" & sSearchWord & "」なし")
 End
End If

'*** Sheet2~7にデータを張りつけ
For nSheet = 0 To UBound(nStartRow())
 'Sheet1の切り取り開始行から最終行までを選択してコピー
 Sheets("Sheet1").Select
 Range(Cells(nStartRow(nSheet), 1), Cells(nMaxRow, 8)).Select
 Selection.Copy
 
 'Sheet2~7のA2に貼り付け
 Sheets("Sheet" & nSheet + 2).Select
 Range("A2").Select
 ActiveSheet.Paste
Next nSheet

End Sub
    • good
    • 0

マクロの記録で勉強しているレベルでは出来ないでしょう。


質問がわかりにくい。
>(1)~(3)の作業をsheet7まで繰り返します。
などはどういう意味なのか。
検索対象のシートと、結果を出すシートは、分けて説明しないと
混乱する。
Sheet2などは検索結果を出す(置く)シートなのでは。Sheet3はどういうものか
どうもSheet1-Sheet7までシートがあってこれが検索対象のシート。
そして検索結果を出すシートは例えばSheet8以後。そしてシートのA2しか使わない。
Sheet8以後は、Sheet1の中に1行の検索文字列が見つかると、Sheet8以後の1つのシートに結果を出す。(シートを変える)。そしてSheet7まで同じような操作を続ける。
ーー
同じ文字列が沢山の行で有るとSheet8以下シートが増えるがよいのか。
文字列を変えて質問の処理をすることは無いのか。その場合以前の文字列で検索した結果のシートはどうするのか(そのまま置いておいて、後にシートを増やすのか、シートを削除するのか)
ーー
結果を出すシートのA2以外のセルは内容なしでよいのか。
多分そう送ではなかろう。その点は?
ーーー
参考になりそうなことを1つ
Sub test01()
Dim sh As Worksheet
For Each sh In Worksheets(Array("Sheet1", "Sheet3", "Sheet4"))
MsgBox sh.Name '本来はここに各1シート分の処理のコードを入れる
Next
End Sub
これの応用で、選択したシートだけを処理対象に出来る。
ーー
FindメソッドはFindNextとの連携がVBA初心者には難しい。
初心者のうちは、A列全行総当りで探す方法もある。
検索の終わりも
A.オジェクトがNothing
B。最初に見つかった行に回帰
で見つける方法が有る。
WEBで「VBA Find FindNext」で照会して勉強のこと。
1シートで、次々検索する操作をマクロの記録を撮るのも参考になる。
ーー
他に、結局何がわからないのか、ブレークダウンして質問のこと。
    • good
    • 0

A列のセル値を上から順番に見ていって、”ち”が見つかったらカウントを入れる。


カウントが2になった時、その行から最終行までを切り取り別シートへ移動する。
ただし”空白”だった場合はカウントを0にする。

とても鈍行な方法ですけど。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!