• ベストアンサー

VBA 別シートにコピペ後値クリア(パート2)

お世話になります。同じような質問をさせていただいて間もないのですが、またしてもわからないことがありますので質問させていただきます。 エクセルにてコマンドボタン(SHEET1上に配置)をクリックすることで下記を実行するにはどうしたら良いですか。 (1);SHEET1のB12:I23に入力した値をSHEET2のB4:I15に貼り付けを行い、その後にSHEET1のB12:I23を空白に戻す。 (2);(1)を実行後、再度SHEET1のB12:I23に値を入力を行い、同じコマンドボタンをクリックすると、今度は(1)で貼り付けたSHEET2のB4:I15の下に改行して貼り付ける。ただし、前回貼り付けられたSHEET2のB列の最終行の下に空白のセルをつくりたくないです。 例えば、(1)を実行したときにSHEET1のB15の行までしか入力が無かった場合は、(2)を実行しSHEET2にコピペするのはB7の行からということです。 あとはこの作業のくりかえし 説明ベタで申し訳ありませんが、SHEET1で入力する際は、全ての行(B12:B23)が埋まるわけではないのです。 SHEET2はSHEET1に入力した値を記録として残しておくために設けるので空白セルを作りたくないのです。どうか宜しくお願いします。

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

  • ベストアンサー
  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.2

前回回答したmerlionXXです。 これでどうでしょう? Sub test02() Dim x As Long, xx As Long Dim Rng As Range x = Sheets("Sheet1").Range("B" & Rows.Count).End(xlUp).Row xx = Application.Max(Sheets("Sheet2").Range("B" & Rows.Count).End(xlUp).Row, 4) If x < 12 Then MsgBox "表B列にデータがありません。", vbCritical, "Σ( ̄ロ ̄lll)" Exit Sub End If Set Rng = Sheets("Sheet1").Range("B12:I" & x) Rng.Copy Sheets("Sheet2").Range("B" & xx + 2) Rng.ClearContents Set Rng = Nothing End Sub

exceling
質問者

お礼

前回に引き続きのご回答ありがとうございます。 こちらのお願い以上のプログラムとは恐れ入ります。ただ・・・、仕事での使用を想定してますので、『"Σ( ̄ロ ̄lll)"』だけは・・・使えません↓ その点だけは変更させていただきます!ごめんなさい。 この度は本当にお世話になりました。ありがとうございました。

exceling
質問者

補足

ご回答いただいたプログラムを実行すると、先に貼り付けられた値と次に貼り付けられる値の間に1行空白の行が出来てしまうんですが、それを無くすにはどこを直せばよろしいですか? 大変申し訳ないですが、ご教授いただければ幸いです。 宜しくお願いします。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.3

> 先に貼り付けられた値と次に貼り付けられる値の間に1行空白の行が出来てしまうんですが 入力した値を記録として残しておくためには1行あかないとどこまでが一回分なのかわからなくなりますが、それでもいいのなら Sub test03() Dim x As Long, xx As Long '変数宣言 Dim Rng As Range x = Sheets("Sheet1").Range("B" & Rows.Count).End(xlUp).Row 'Sheet1B列最終行取得しxとする xx = Application.Max(Sheets("Sheet2").Range("B" & Rows.Count).End(xlUp).Row, 4) 'Sheet2B列最終行取得しxxとする If x < 12 Then 'xが12未満なら MsgBox "表B列にデータがありません。", vbCritical Exit Sub 'マクロ中止 End If Set Rng = Sheets("Sheet1").Range("B12:I" & x) 'Sheet1のデータ範囲をRngとする Rng.Copy Sheets("Sheet2").Range("B" & xx + 1) 'コピーペースト(ここを修正しました。) Rng.ClearContents 'Rngをクリア Set Rng = Nothing '後処理 End Sub それぞれのコードが何をしているのかコメントをつけておきました。 コメントブロック( ' )してありますのでこのままコピペしても大丈夫ですよ。 > 仕事での使用を想定してますので、『"Σ( ̄ロ ̄lll)"』だけは・・・使えません はい、お好きにどうぞ。 ただ、わたしも会社で業務使用するコードをよく書きますが平気で使ってますけど・・・。(「遊び心」があって面白いなどと言われたりしてます。)

exceling
質問者

お礼

コメントまで載せていただき、ありがとうございます!! 感謝、感謝です。 コピペ時に1行空けてたのは、merlionXX様のご配慮からだったのですね。思慮浅く、反省です。 おかげさまで、この質問第2弾を持ちまして、問題解決できそうです。 本当にお世話になりました。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

シート1のB23以下にデータがなければ、 Dim r2 As Range Set r2 = Worksheets("Sheet2").Range("B" & Rows.Count).End(xlUp) If r2.Row < 4 Then Set r2 = Worksheets("Sheet2").Range("B4") With Worksheets("Sheet1")   With .Range(.Range("B12"), .Cells(Rows.Count, 2).End(xlUp)).Resize(, 8)     .Copy r2     .ClearContents   End With End With Set r2 = Nothing こんなとか?

exceling
質問者

お礼

ご回答ありがとうございます。 わからないことばかりなので、内容をしっかり把握することから 始めてみたいとおもいます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • VBA 別シートにコピペ後、値クリア

    お世話になります。VBA初心者です。エクセルにてコマンドボタン(SHEET1上に配置)をクリックすることで下記を実行するにはどうしたら良いですか。 (1);SHEET1のB3:L9に入力した値をSHEET2のB3:B9に貼り付けを行い、その後にSHEET1のB3:L9を空白に戻す。 (2);(1)を実行後、再度SHEET1のB3:L9に値を入力を行い、同じコマンドボタンをクリックすると、今度は(1)で貼り付けたSHEET2のB3:L9の下(2回目なのでB10:L16)に改行して貼り付ける。貼り付け後は(1)と同様。これをくりかえし(B17:L23,B24:L30....)。 SHEET1に入力した値をSHEET2に記録として残しておくために、このようなことをしたいと考えます。どうか宜しくお願いします。

  • エクセル VBA 特定文字がある行を別シートに移動

    ソフト excel2003 I列(赤枠部分)に文字列が入力された表があります。 マクロ実行時下記のようにするには、VBAのコードをどのように記入すればよろしいでしょうか? 『 △ 』ボタンをクリックすると シート1の赤枠内のセルに△が入力されている行を切り取りしシート2に貼り付け (下の行は上方向にシフト) 『 × 』ボタンをクリックすると シート1の赤枠内のセルに×が入力されている行を切り取りしシート3に貼り付け (下の行は上方向にシフト) ※ シート1の内容は日毎に更新されますので、更新後、『 △ 』ボタンをクリックするとその時点で△が入力されているものはシート2のリストへ追加され、『 × 』ボタンをクリックすると×が入力されているものはシート3のリストへ追加されるようにしたいです。 急ぎの仕事なので、困っています。 宜しくお願い致します。

  • エクセルVBAのコードの書き方を教えてください

    エクセルVBAの初心者です。 下記①-⑲のようなコードを書きたいのですが、どなたかお分かりになる方がいましたら、 ご教示いただけますと幸いです。 ① オートフィルターでシート[list]のA列に"●"がある特定の行だけを以下作業の対象にしたい ② ①で特定した行のE列セルの値を、シート[output]のB9セルにコピペする ③ ①で特定した行のF列セルの値を、シート[output]のB12セルにコピペする ④ ①で特定した行のG列セルの値を、シート[output]のB15セルにコピペする ⑤ ①で特定した行のH列セルの値を、シート[output]のB18セルにコピペする ⑥ ①で特定した行のI列セルの値を、シート[output]のB21セルにコピペする ⑦ ①で特定した行のJ列セルの値を、シート[output]のB24セルにコピペする ⑧ ①で特定した行のK列セルの値を、シート[output]のB27セルにコピペする ⑨ ①で特定した行のL列セルの値を、シート[output]のB30セルにコピペする ⑩ ①で特定した行のM列セルの値を、シート[output]のB33セルにコピペする ⑪ ①で特定した行のN列セルの値を、シート[output]のB36セルにコピペする ⑫ ①で特定した行のO列セルの値を、シート[output]のB39セルにコピペする ⑬ ①で特定した行のP列セルの値を、シート[output]のB42セルにコピペする ⑭ ①で特定した行のQ列セルの値を、シート[output]のB45セルにコピペする ⑮ ①で特定した行のR列セルの値を、シート[output]のB48セルにコピペする ⑯ ①で特定した行のS列セルの値を、シート[output]のB51セルにコピペする ⑰ ①で特定した行のT列セルの値を、シート[output]のB54セルにコピペする ⑱ ①で特定した行のU列セルの値を、シート[output]のB57セルにコピペする ⑲ シート[output]のB3:B59をテキストファイルを呼び出してコピペする ※このとき、上記②-⑱で記述したB9からB57のセルには改行が含まれる場合が  あるため、テキストファイルへのペースト時に""が表示されてしまうが、  もし可能であれば、この""が表示されないようにしたい。

  • VBAのコマンドボタンについて

    エクセルVBAのコマンドボタンをシートに配置してあるのですが、セルの操作(他シートからのコピペ)によってそれの大きさが変わらないようにしたいです。 コマンドボタンのオプションで、『セルに合わせて移動やサイズ変更をしない』にチェックをいれてあるのですが、他のシートからコピペした際にコマンドボタンの位置とサイズが変わってしまいます。 コピーする元のシートのセルサイズに引きずられて、大きさが変わってしまいます(値だけコピーにすれば大丈夫)。 元に戻すボタンを押してもコマンドボタンの大きさは元に戻ってくれないので困っています。 シートの保護で行と列の大きさを保つように保護することも試みたのですが、それだとコピペができなくなってしまいました。 コピペした際に コマンドボタンの大きさと位置が変わらなければどんな方法でも大丈夫です。 (1)コマンドボタンの設定のミス?なので設定を変更する (2)常時、「形式を選択して貼り付ける」の際に"値のみ"しか選べないようにする(もしくは単に「貼り付け」した時に値だけ貼り付けるように設定する)、 (3)行と列の高さ・幅の変更を禁止したままコピペ等が出来るようにする ・・・などなど 詳しい方よろしくお願いします。

  • Excel VBA B列を検索して1行下をコピぺ

    はじめまして。 VBAを始めたばかりですが、自分ではどうにもならないので、教えていただければと思い、初めて質問致します。 A1~G1、1行目から1000行目まで各セルに数字がランダムに1つずつ入っているデーターSheet1があり、コマンドボタンを押すことによってMsgBoxに入力した数字をB列を下に検索していき、例えば、数字の8が入力されたら、B1から下にB列に8が出現したらそのセルの1つ下の行(A列~G列まで)をコピーしてSheet2に抽出したいと考えているのですが、なかなか出来ず、困っています。 イメージとして A B C D E F G H I 1 5 14 30 25 30 3 9 2 22 34 6 7 29 49 3 3 1 8 20 4 10 6 45 4 30 15 34 50 2 5 9 5 11 8 45 7 6 20 1 6 40 8 48 25 36 4 10 7 21 22 30 28 6 7 36 8 2 3 50 2 1 43 6 と、データがSheet1に仮にあって、8が入力されたなら4行目の 30 15 34 50 2 5 9 と 6行目 40 8 48 25 36 4 10、7行目 21 22 30 28 6 7 36という様に抽出されてSheet2に 上から順に貼り付けられる様にしたいので、皆様の御知恵をお貸しいただければと 思っております。かなり複雑かとは思いますが、どうか宜しくお願いいたします。 FINDやOFFSET、IF文、ループ等を使ってみましたが私のレベルでは全く話になりませんでした。 まだVBAかけだしなもので、なるべ簡単なくプログラムでお願いいたします。

  • 別シートの行を選択し対象列を転記するマクロ

    シート2のA~F列までデータがあります。 行数は10,000行です。(月ごとに100行くらい追加されます。) A列は項目がNO.で半角数字が連番で入力されてます。 セルA2→1 セルA3→2 セルA4→3 . . . セルA10000→9999 セルA10001→10000 という感じです。 シート1の セルI9に番号を入力すると シート2のその番号の行のB~F列の値を シート1のJ9~N9列に転記したいです。 例えば シート1のセルI9に100と入力したら、 シート2のA列が100と入力されているセルはA101ですから 101行目となります。101行目の各列の値を転記します。 ↓ シート1のセルJ9にシート2のセルB101の値を転記 シート1のセルK9にシート2のセルC101の値を転記 シート1のセルL9にシート2のセルD101の値を転記 シート1のセルM9にシート2のセルE101の値を転記 シート1のセルN9にシート2のセルF101の値を転記 シート1もシート2もセルの書式設定は標準。 B,E,F列は半角英数字の組み合わせで C,D列は半角数字のみです。 たまにF列に空白がある行があります。 B,F列は数字のみの場合もあります。 B,C,D,F列は数字のみの場合 「数値が文字列として入力されています」 となっています。 マクロで行いたいのですが記述そのものを教えてください。

  • Excel 別シートのセル参照

    Excel で、二つのシート間でセル参照したいのですが、シートに書き込んでおくコマンドの書き方を教えてください。 (操作) Sheet2 でA列のどこかのセルをダブルクリックしたとき、B列およびC列の該当行の値を、Sheet1 の二つの固定セルにそれぞれ表示させる。 よろしくお願いします。

  • 別シートにコピペするマクロの作り方?

    シートAのデータをコピーして、 そのデータを別シートに貼り付ける…というマクロを使っています。 貼り付ける先のシートには、どんどんデータがたまっていく倉庫のような役割です。 私がくんだマクロは、次のような手順で処理をします。 1.まず、そのシートのA1を選択し、 2.《CTRL+下》のようなコマンドで、「データが初めて空白になるセル」まで移動します。 3.そして、そこに「はりつけ」。 4.貼りつけが終わったら、もともといたシートに戻ってくる。 ・・・そういうマクロなのですが、あまりに洗練されていないというか、 ボタンをおすたびに、コンピューターの画面が切り替わって、 「ああ。頑張って作業をしてくれているな」 ということが、わかるマクロです。 ・・・ たしか、こうした一連の作業を、もっと高速処理できるマクロの組み方があったように思うのですが、どのようなプログラムをくんだらよいでしょうか?

  • excelでデータを別シートに引っ張ってきたい

    excelで値を検索し、返す時、返す値の横にあるデータを違うシートのセルの下に一緒に引っ張ってきたいときの関数(方法)を教えてください。 素人なので分かりにくいと思いますが、お知恵をお借りしたいと思います。 あるデータのシートの検索値を別シートに持ってきたいのですが、シート1をシート2のようにしたいのです。 /は空白 例)シート1 /A B C D E 1(1) □ ○ ▽ ◎ 2 (2) ▼ ■ ◇ ◎ シート2 / A B C D 1 (1) □ 2 /○ ▽ ◎ 3 (2) ▼ 4 /■ ◇ ◎ 分かりにくいかもしれませんが、 シート1の(1)(A1)を検索すると、シート2(B1)に□(これはVLOOKで引っ張ってこれるのはわかります。) 次にシート1の(C1)○をシート2の(B2)へ持ってきたいのです。シート1(D1)(E1)はシート2の(C2)(D2)へ。 しかもシート1のC列は空白セルもあり、シート1のC列が空白の場合、下にずれることなくシート1の(D1)(E1)はシート2の(C1)(D1)へ。下記<図a>のようになるようにしたいのです。 そして、シート2のA列に検索値として入力する(1)や(2)の値は連番ではなく、(2)の次に(5)に飛んだりします。(2)の行のC列にデータがあっても、(5)のC列にデータはないこともあります。<図b> <図a> /A B C D 1 (1) □ ▽ ◎ 2 (2) ▼ ◇ ◎ <図b> / A B C D 1 (1) □ 2 /○ ▽ ◎ 3 (2) ▼ 4 /■ ◇ ◎ 5 (5) □ ▽ ◎ 6 (7) ▼ ◇ ◎ vlookとかCLUMN関数とか考えてはみたのですが、どうもうまくいきません。 毎回作成するデータなのですが、毎回コピペで作成しています。 とても面倒なので(1)を検索したらデータが一瞬で検索できるようにしたいと試みてはみたものの、私の知識では不可能でした。 関数では無理なのでしょうか。。。 関数はあまり詳しくないので分かりやすい方法があれば、教えていただければ助かります。 関数に詳しい方、よろしくおねがいいいたします。 関数にはこだわっていません。違う方法があればそれも含めておねがいいたします。

  • Excel2007で複雑なセルコピペ。

    sheet8のセル範囲C3からセルI10000までの各セルにA~Jのいずれかがランダムに入ってます。 マクロボタンをおします。 (1)、C12の値をM3にコピペしてC12から5行戻ったC7の値をセルO3にコピペします。 (2)、M3の値とO3の値が同じならM3の背景色を黄色にしたいです。同じでないならそのままです。 マクロボタンを押します。 (3)、1つ下のC13に行き(1)と同じことをするのですが、1つ下のM4にC13の値をコピペしてC13から7行戻ったC6の値をO4にコピペしたいです。 (4)、(2)と同じようになり マクロボタンを押します (5)、1つ下のC14に行き(1)と同じことをするのですが、1つ下のM4にC14の値をコピペしてC14から9行戻ったC5の値をO5にコピペしたいです。 (6)、(2)と同じようになります。 マクロボタンを押します。 End マクロボタンを押す度にC12から1つずつ下に向かい、M3から1つずつ下に向かって値をコピペするのですが、セルOにコピペされるのは1つずつ下に向かうセルCの値から、5行戻り、7行戻り、9行戻りと戻ってはまた5行、7行、9行と戻った値を繰り返しコピペしたいです。 よろしくお願いいたします。

不安な存在と実在の疑念
このQ&Aのポイント
  • 自分が不安で他人の存在を疑ってしまいます。この世界は自分の想像上の存在で他の人は実際に存在しないのではないかと思います。また、自分との偶然の一致や奇妙な現象に疑問を抱きます。
  • 自分の存在と他人の存在に不安を感じています。他の人たちは自分が生み出した存在であり、自分の都合に合わせて動いているような気がします。また、偶然や奇妙な現象が起きることもあり、現実世界の存在に疑問を抱いています。
  • 自分が不安で他人の存在に疑問を抱いています。この世界は自分の想像で作り上げたもので、他の人たちは実際には存在しないのではないかと思ってしまいます。また、自分との偶然の一致や奇妙な現象に不思議な感じを抱いています。
回答を見る