• ベストアンサー

マクロ 選択範囲及び切り取り&貼り付けについて教えてください。

(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行ぐらいデータが入っています。 *見えずらくてすみません。

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

  • ベストアンサー
  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.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

その他の回答 (2)

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

マクロの記録で勉強しているレベルでは出来ないでしょう。 質問がわかりにくい。 >(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シートで、次々検索する操作をマクロの記録を撮るのも参考になる。 ーー 他に、結局何がわからないのか、ブレークダウンして質問のこと。

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

A列のセル値を上から順番に見ていって、”ち”が見つかったらカウントを入れる。 カウントが2になった時、その行から最終行までを切り取り別シートへ移動する。 ただし”空白”だった場合はカウントを0にする。 とても鈍行な方法ですけど。

関連するQ&A

  • マクロの記録で任意の文字を検索してそのセルから範囲を選択したいのですが

    マクロの記録で任意の文字を検索して、見つかったセルから範囲を選択して別なシートへ切り取りし、貼り付けたいですが何か方法はありますか?現在は検索をしたセル番号になってしまいます。 マクロはじめたばかりです。 検索→い→(A2:C5)選択&切り取り→sheet2貼り付け→検索(sheet2)→え→(A3:C4)選択&切り取り→sheet3貼り付け sheet1    →sheet2   →sheet3  ABC     ABC    ABC 1あかさ    1いきし   1えけせ 2いきし    2うくす   2おこそ 3うくす    3えけせ 4えけせ    4おこそ 5おこそ できれば検索で発見されたA2やA3を任意のアクティブセルにし、範囲はC列の一番下のセルを選択し切り取りたいのですができますでしょうか。

  • EXCELで指定した範囲の切り取り貼り付け

    Excelで シート1のA1~E1000までデータがあります。 B列には0~1500の数値データがあり昇順で並んでいます。 このB列のデータの700~1000の数値データのA~E列全ての範囲を「切り取り」・シート2に「形式を指定して貼り付け」(値)という作業をマクロにてできませんか? 尚、1つセルが下がるごとに1数字があがるとは限りません。 大変困ってます。詳しい方ご教授ください。

  • 【エクセルマクロ】シート間のデータ切取⇒貼付マクロをくみたいです。

    シートが2つあって、それぞれ「商品・顧客マスタ3」、「取引終了データ」というシート名です。 「商品・顧客マスタ3」のシートの列A~Kまでをドラッグしている状態で「CTRL+SHIFT+U」 をおすと、切り取り処理されて、「取引終了データ」シートの同じA~Kまでに「すべて貼り付け」されるマクロをつくりたいのですが、スキル不足からできません。ぜひ教えていただけないでしょうか? 【備考】 ・「商品・顧客マスタ3」シートのドラッグしている行は様々で1行限りのときもあれば、5行(超え)等になるときもあります。列はつねにA~Kまでです。例 5行のとき⇒A401~K405までをドラッグしている状態。常に連続しています。 ・「取引終了データ」の貼り付け位置はA~K列の文字が入っていないところの一番最初の位置にしたい  です。現在では、A1~K402までデータがぎっちり入っていて、A403を先頭に切り取ったデータを貼り付けしたいです。(データのはいっていないA列の一番上にはりつけできれば十分です。) ・貼り付け後は、「商品・顧客マスタ3」の空欄になったところを「削除」して上方向につめたいです。削除は行  全体ではなく、列A~Kまでとしたいです。 なお、EXCEL2002をビスタで使っています。 お手数をおかけいたしますが、ぜひよろしくお願いいたします。

  • 特定セルから29右までを範囲選択→切り取り→

    特定セルから29右までを範囲選択→切り取り→50個右に移動して貼り付け 毎回A列が先頭にあるのですが、どこのA列になるかは、データによってまちまちになってしまうため、自分自身でそこを選択してからマクロ実行をしようと考えてます。

  • リンク貼り付けをマクロで簡素化したい

    1)個人票ブック(太郎シート 花子シート 次郎シー・・・・・)の各シートのA1からA5まで、値や公式がはいっています。 2)このシートのA1からA5までの値等を、別の総括表ブック(一枚のシートしかない)にリンク貼り付けをします。 3)まず、太郎シートのA1~A5までは、総括表ブックのB列にリンク貼り付けするマクロボタンを、太郎シートに設置します。 4)さらに、花子シートのA1~A5までは、総括表ブックのC列にリンク貼り付けするマクロボタンを、花子シートに設置します。 5)そして、次郎シートのA1~A5までは、総括表ブックのD列にリンク貼り付けするマクロボタンを、次郎シートに設置します。 6)こうしてマクロボタンを順次貼り付けていきます。 7)各シートの貼り付け場所は列に貼り付けていきますが、上から順番ではなく、任意に飛んでいますが、  各シートの行は、みな一律で同じ行です。 列は違っても皆おなじ行にリンク貼り付けしたいです。 このような操作をマクロ記録でつくりましたが、膨大な作業が必要です。これをなんとかVBAで簡素化したいのですが・・よろしくお願いします。

  • Excelマクロに、「検索」は記録されない?

    A列とB列にそれぞれ文字が入っています。 A列に含まれる文字を全て検索 ↓ 見つかったセルを含む行を選択。(A列のセルだけでなくその横のB列のセルもとりたいのです) ↓ 切り取り ↓ 別のシートに貼り付け と言う処理を順次行うマクロを作りたいのですが、自動記録してみたところ、文字列の検索・選択の部分が全く記録されません。 この部分、どのように記述したらよろしいのでしょうか? また、A列のセルのみならず、そのセルを含む行全体を選択するにはどうしたらいいのでしょうか? お分かりの方がいらっしゃいましたら、どうかご教示ください。

  • 【再】エクセル2013 マクロをご教示ください

    Sheet1で選択しているセルの行をSheet2に転写したいです。 Sheet1とSheet2の4行目に見出し。 Shet1にはA~U列までデータがあります。(途中空白セルの場合もあり) Sheet1の5行目以降の、あるセルを選択してマクロを実行すると Sheet1のC~S列までをSheet2のA~Q列へコピペしたいです。 Sheet1は H列に必ずデータがあるので それらを最終行の判断基準とします。 Sheet1での選択セルは複数の場合もあります。 ただし、同じ行のセルを複数選択しても Sheet2への貼り付けは1行とします。 マクロを実行する度に、Sheet1での選択セルの該当行が Sheet2へ追加されるようにしたいです。 (Sheet2へコピペされたデータは残します) また、Sheet2への貼り付け内容が同じだった場合は 注意喚起のため メッセージで 「重複データが存在します」を表示したいです。 重複の判断基準はSheet2の B、D、F列とします。 宜しくお願い致します。

  • 範囲選択について教えてください。全くの初心者です

    全くの初心者です。 Excel2003を使用しています。   A  B  C  D  E 1 タイトル 2 番号 日付 項目 1項目 2項目 3 1  1/1  1000 2000 1500 4 2  2/1  2000 3000 4000 5 3  3/1  1000 2000 2000 6 4      4000 7000 7500 7 5 8 6 …というようにデータが入っています。 ただし、A列には999まで番号が入ってしまっています。 BからE列に入るデータの行数はシートごとに違います。 上の例で言うと、BからEのデータは3つ(3から5行目まで)しか入っていないことになります。 やりたいことは、6行目にC、D、Eの縦計(4000 7000 7500)を入れた上で、 6 Eから1Aまでを範囲選択して、印刷範囲の設定をしたいのです。 しかし、別のシートには5行分データが入るかもしれず、また別のシートには20行分のデータが入るかもしれません。 こんなとき、どうやってマクロを作ればいいのか、教えてください。 できれば自動記録という方法がいいのです。 言語はよくわからないので… 勝手なお願いですが、どなたか助けてください。 よろしくお願いします。

  • Excelのシート間のコピー&貼付け

    皆様にお聞きしたいのですが。。m(_ _)m あるシートで作成したデータ(罫線等は入れてません。セルに入力したデータのみです)を、一番上の項目名のみまず最初に別シートにコピーしました。 そして元データでフィルタで抽出した間違いがあったデータのみ、複数の行番号をドラッグで選択して別シートにコピー&貼付けをしていたら、なぜか元のシートと列の数が合わなくなりました; 列の数は40前後と多いのですが・・・ 一番上の項目名と途中か合わなくなっていました(T-T) 普通に行を選択してコピー、そして別シートへ貼付けしていただけなのですが。。 こうゆうことってあるのでしょうか??? どなたか、どうかご教授ください。宜しくお願い致します。。 補足 ちなみに、ちゃんとコピー先のシートのA2(項目行の先頭の下の行)にコピーしたのですが・・。

  • エクセルのマクロで範囲を選択するマクロ

    教えてください。 下記の通り、例えばA列の2~5にデータが入っている場合に、B2~D5の範囲を選択するマクロを教えてください。 A列のデータが入っている行は可変です。   A B C D E 1  2 6 3 7 4 9 5 10 6 7

専門家に質問してみよう