• ベストアンサー

ずばりこのステートメントを教えてください

Sheet2から右へ最終のシートまでのB5:K15の範囲を、Sheet1のA1から順に隙間無く下へ貼り付けていきたいのですが、そのステートメントをSubからEnd Subまで、教えてください。 他の質問など似たような感じのモノはありますが、応用が利かないもので・・・。 よろしくお願いします。

  • kukur
  • お礼率74% (38/51)

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

  • ベストアンサー
  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.1

マクロは便利ですので応用出来るように勉強された方が良いと思いますよ。 下記は左から2番めのシート~最終シートのB5:K15を一番左のシートに転記します。 Sub Test() Dim cnt As Integer, r As Range  Set r = Worksheets(1).Range("A1")  For i = 2 To Worksheets.Count    Worksheets(i).Range("B5:K15").Copy r    Set r = r.Offset(11, 0)  Next i End Sub

kukur
質問者

補足

早速の回答ありがとうございました。 できました!! ただ、データとデータの間に1行が入っているのですが、これを省くようにすると、どのようなステートメントになりますか? よろしくお願いします。

その他の回答 (1)

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.2

指定通りならあいだは開かないと思いますが、、、 B5:K15 が違っているのではないですか?→ B5:K14 r は貼り付ける先頭セルを表します。 Set r = Worksheets(1).Range("A1") で r に A1 を代入しています。 これで最初の r が A1 となります。 Set r = r.Offset(11, 0) で r から 11行下を r にセットしなおします。 これにより r は A12 になります。 このループで繰り返す事で r は A1 → A12 → A23 → A34 ・・・ と変化していきます。 何処を直せば良いかこれで解りますか?

kukur
質問者

お礼

まさに2行目でおっしゃった通り、範囲を勘違いしていました。 どうもすみません・・・。 これで、ひたすらコピー・ペーストの繰り返しをせずにスピードアップできました。 一念発起してマクロを勉強しようと、書籍を購入しましたが、本の手順に沿ってしか出来ず、まだまだです。 これからがんばらねば。 どうもありがとうございました。

関連するQ&A

  • Do~Loopステートメント

    Do~Loopステートメントで使わな方が良いステートメントとは? Do~Loopステートメントで「古いから使わない方がよい」、と言われたことがあるのですが どれの事だか忘れてしまいました。 Sub test() セルのA1~A10に1~10を入力する i = 1 Do While i < 11 Worksheets("Sheet1").Cells(i, 1).Value = i i = i + 1 Loop End Sub これは一般的だから使ってもよいと思います。 Sub test() セルのA1~A10に1~10を入力する i = 1 Do Until i = 11 Worksheets("Sheet1").Cells(i, 1).Value = i i = i + 1 Loop End Sub これもよく見かけます。 Do While,Do Until以外にもloopステートメントってありますか? あと使わない方が良いステートメント、私の勘違いでなければ教えてください。

  • Subステートメント と Subプロシージャ の違いは?

    Subステートメント と Subプロシージャ は何が違うのですか? 例えば Sub test() MsgBox "a" End Sub これは、 Subステートメントですか? Subプロシージャですか?

  • Setステートメントをまとめて記述する方法 (エクセル2000VBA)

    お世話になります。 Setステートメントで以下のように書いて、シート名を省略して使っています。  Set a = ThisWorkbook.Worksheets("い")  Set b = ThisWorkbook.Worksheets("ろ")  Set c = ThisWorkbook.Worksheets("は") これをプロシージャ毎に書くとコードが長くなるので、先頭かどこかに1回書くだけで、全てのプロシージャで使えるようにしたいのですがどうしたら良いでしょうか? このようなプロシージャを実行したいのですが、 Private Sub CommandButton1_Click()  a.Range("A2").Value = "データ1"  b.Range("B4").Value = "データ2"  c.Range("C9").Value = "データ3" End Sub (他にもコマンドボタンやチェックボックス用のプロシージャがあります) Setステートメントだけを先頭に書くと、 「プロシージャの外では無効です」というエラーが出ましたので、 Public Sub hensuu()  Set a = ThisWorkbook.Worksheets("い")  Set b = ThisWorkbook.Worksheets("ろ")  Set c = ThisWorkbook.Worksheets("は") End Sub のようにしたら、「実行時エラー"424":オブジェクトが必要です」というエラーが出てしまいました。 どのようにしたらエラーが出ず正しく動くようになりますでしょうか?よろしくお願いします。

  • excelのifステートメントのテストで…

    御観覧ありがとうございます。 スパテクという本を買って、excelを勉強しようと、 サンプルを打ち込んでいて、何度かエラーになったりしましたが、 調べることや、入力ミスの確認で回避出来ていたのですが、 本通りに打っているのに、 「エラー438、オブジェクトは、このプロパティまたはメソッドをサポートしてません。」 と出ます。 エクセル2007です。入力したプロシージャは、 Option Explicit Dim nSample1_12 As Integer Sub Sample1_12() nSample1_12 = nSample1_12 + 1 ThisWorkbook.Worksheets("sheet1").Range("A1") = nSample1_12 End Sub Sub Sample1_13() Dim sA2 As String sA2 = ThisWorkbook.Worksheets("sheet1").Range("A2") If sA2 = "" Then ThisWorkbook.Worksheets("sheet1").Renge("A2") = "Sample1_13" ElseIf sA2 = "Sample1_13" Then ThisWorkbook.Worksheets("sheet1").Range("A2") = "基本の文法 ifステートメント" Else ThisWorkbook.Worksheets("sheet1").Range("A2") = "" End If End Sub このサンプル13を実行すると、A2にsample1_13と出るはずなそうなんですが…エラーになります。

  • VBAのCallステートメントについて

    ExcelのSheet1にCommandButton1(表示)があります。 -------------------------------------------------- Private Sub 表示_Click() (DBより表示処理) End Sub -------------------------------------------------- UserForm1にCommandButton1(登録)があります。 -------------------------------------------------- Private Sub 登録_Click() (DBへの登録処理) UserForm1.Hide Call WorkSheets("Sheet1").表示_Click() ・・・☆ Exit Sub End Sub -------------------------------------------------- 表記のようなプログラムにしたところ、☆印のところで、 下記エラーが表示されてしまいます。 【エラー】--------------------------------------------------- 実行時エラー'91': オブジェクト変数またはWithブロック変数が設定されていません。 ------------------------------------------------------------- どのようにしたらCallステートメントで表示_Clickを呼び出すことが できるのでしょうか。

  • ifステートメント 大文字も小文字も区別なく

    Sub test() Dim moji As String moji = "a" If moji = "A" Then MsgBox "Aかaです" End If End Sub これだと、変数が小文字のaだからmsgboxが表示されません。 小文字も大文字も区別なく認識させるにはどうすればいいでしょうか? バイナリモードになってるようです。 Replace関数の場合は、vbTextCompareを付ければ Sub Sample() Dim moji As String moji = "a" Debug.Print Replace(moji, "A", "b", , , vbTextCompare) End Sub このように大文字小文字区別なく置換できますが このような事をifステートメントでやる方法を教えてください。

  • ifステートメントで、[が含まれるかどうかを調べた

    ifステートメントで、[が含まれるかどうかを調べたいのですが ****************************** Sub test1() Dim myStr As String myStr = "[aaa]" If myStr Like "*[*" Then MsgBox "[を含んでいます。" End If End Sub ****************************** をやろうとすると 「実行時エラー93 パターン文字列が不正です」 となってしまいます。 ヘルプを見ると ************************************************************ 検索の Like 演算子で指定されているパターン文字列が無効です。 エラーの原因と対処方法を次に示します。 たとえば、文字リスト式 [a-b は、右かっこ (]) がないため、無効です。 リスト式の文字を確認します。 詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。 ************************************************************ との事なので、 If myStr Like "*[*]" Then としたら、問題なくできましたが、 [だけが含まれているかどうかを調べることは不可能なのでしょうか?

  • For Each ~ Nextステートメント

    今、1つのブックに200前後のワークシートがあるとします。 For Each ~ Nextステートメントを使って以下のようなプログラムを全てのワークシートに適用したいと考えています。 Sub test() Dim mySht As Worksheet For Each mySht In Worksheets If Range("A2").Value <> "1990/01/31" Then Rows("2:2").Select Selection.Insert Shift:=xlDown Range("A2").Select ActiveCell.FormulaR1C1 = "1990/01/31" End If If Range("A3").Value <> "1990/02/28" Then Rows("3:3").Select Selection.Insert Shift:=xlDown Range("A3").Select ActiveCell.FormulaR1C1 = "1990/02/28" End If ・・・(中略)・・・ Next End Sub しかし、これを実行しても、うまくいきません。 全てのワークシートについて、必ずしもA2のセルが 1990/01/31であるとは限らないことが原因かとは思うんですが、自身ではどうしてもうまくプログラムを書くことが できません。良いお知恵を拝借できればと思います。

  • IFステートの中にWithステートメントの始まり

    IFステートの中にWithステートメントの始まりだけ入れることってできないのですか? Sub j() Dim a As String a = "aaa" If a = "aaa" Then With Sheets("作業用1") Else With Sheets("作業用2") End If End With End Sub このような事をやろうとすると、Elseの部分でコンパイルエラーになります。 別の方法として、シートオブジェクトの中に入れちゃえば入れちゃえば With の分岐をしなくていいことは分かったのですが、 このような使い方をしたいことが多々あるのですが、 VBAの文法的には、IFの中にWithの始まり(先頭)だけを入れることは不可能なのでしょうか?

  • IFステートメントで半角でも全角でもtrueとさせ

    IFステートメントで半角でも全角でもtrueとさせるには? Sub test1() Dim str As String str = "ABC"’←全角のA If str Like "*A*" Then ’←半角のA MsgBox "Aがあります" End If End Sub これで、半角Aもメッセージを表示させたいのですが、 マッチバイトみたいなのってありますか?

専門家に質問してみよう