エクセルのマクロについて

このQ&Aのポイント
  • エクセルのマクロについて領域の範囲選択→貼り付けの繰り返し処理をループで考えています。領域の範囲選択し、貼り付け処理をマクロの自動記録で、出してみました。
  • この時に、「Range("E17").Select」の命令は「Cells」関数に置き換えられるのですが、「Range("E6:G12").Select」のように複数のセルの領域選択をする際に、「Cells」関数ではできないのでしょうか。
  • 「Cells」関数を使えば、行列を数値にし、変数を使えば、LoopかFor命令で繰り返し処理ができるのですが、わかる方、解答ください。よろしくお願いします。
回答を見る
  • ベストアンサー

エクセルのマクロについて

エクセルのマクロについて 領域の範囲選択→貼り付けの繰り返し処理をループで考えています。 領域の範囲選択し、貼り付け処理をマクロの自動記録で、出してみました。 Sub Macro1() Range("E6:G12").Select Selection.Copy Range("E17").Select ActiveSheet.Paste Application.CommandBars("Stop Recording").Visible = False End Sub この時に、「Range("E17").Select」の命令は「Cells」関数に置き換えられるのですが、「Range("E6:G12").Select」のように複数のセルの領域選択をする際に、「Cells」関数ではできないのでしょうか。 「Cells」関数を使えば、行列を数値にし、変数を使えば、LoopかFor命令で繰り返し処理ができるのですが、わかる方、解答ください。よろしくお願いします。

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

  • ベストアンサー
回答No.3

マクロの自動記録で記録すると どうしてもそうなるんですが、、 セル範囲の選択以外に不都合なところがあります、  「Select」ですが、自動記録の時、セルをあなたが「Select」したから 仕方ないんですが、、   E6:G12を「選んで(アクティブセルにして)」クリップボードにコピーして、、   E17を「選んで(アクティブセルにして)」クリップボードから貼り付ける、、   という動きになります。   一回の動作ならまだしも、繰り返し実行すると アクティブセルがあっち行ったり、   こっち来たりで、めまぐるしく動き、画面がチラチラしたり、動作が非常に遅くなります。 一般的には 次のように書かれるのが普通です。 書式や数式などすべてをコピ・ぺ するなら・・・    Range(Cells(6, 5), Cells(12, 7)).Copy Destination:=Cells(17, 5)     で済みます。(クリップボードへ一旦コピーしないで直接 貼付ける) セルの値だけ コピ・ぺ するなら・・・    Range(Cells(6, 5), Cells(12, 7)).Copy    Cells(17, 5).PasteSpecial Paste:=xlPasteValues '←値のみ、書式のみ等々    Application.CutCopyMode = False '← コピー範囲の点線の枠を解除する など、が単純でいいんじゃないかと思います。 でも、自動記録でも何ででもいいから自分でやってみて、不都合な動作も実感することは 大切なことです、頑張ってください。

kamejiro
質問者

お礼

ご回答ありがとうございます。 なるほど、こういう方法もあるのですね。完全な理解はしていませんが、参考になりました。 自身はVBAの文法については、ほとんど理解していません。自動記録でできたソースを見て、Range を Cells に変えてみたり、繰り返し処理のために、For~Next か Do~Loop を加える程度です。 あとは、分かる範囲内でやってみます。

その他の回答 (2)

  • FEX2053
  • ベストアンサー率37% (7987/21354)
回答No.2

Resizeを使えば良いんだと思いますけど。例えば Sub test() Cells(1, 1).Resize(1, 5).Copy Cells(2, 1).Select ActiveSheet.Paste End Sub ただ、こういう繰り返し処理の場合「アクティブなセルを動かす」という発想の方が後で楽だと思いますよ。例えば Sub test2() Range("A1").Select Do While IsNumeric(Selection.Value) Selection.Resize(1, 5).Copy Selection.Offset(1, 0).Select ActiveSheet.Paste Selection.Offset(-1, 6).Select Loop End Sub

kamejiro
質問者

お礼

具体例まで挙げていただいて、ありがとうございます。 参考にさせていただきます。

  • okormazd
  • ベストアンサー率50% (1224/2412)
回答No.1

Range("E6:G12").Select ↓ Range(Cells(6, 5), Cells(12, 7)).Select

kamejiro
質問者

お礼

素早い回答ありがとうございます。 できました。

関連するQ&A

  • excelのマクロでrangeの選択がうまくいきません。

    excelのマクロでrangeの選択がうまくいきません。 以下のマクロをsheet2に書きました。testcopyは動きますが、testcopy2は動きません。なぜなのでしょうか。どうすればいいのでしょうか。それ以外のマクロの部分との関係から、cellsを使い、数字を使ってrangeの処理をしたいのです。よろしくお願いします。 Sub testcopy() Worksheets("sheet1").Range("B3:C10").Copy Worksheets("sheet2").Range("e5").Select ActiveSheet.Paste End Sub Sub testcopy2() Worksheets("sheet1").Range(Cells(3, 2), Cells(10, 3)).Copy Worksheets("sheet2").Range("e5").Select ActiveSheet.Paste End Sub

  • エクセル マクロ

    はじめまして。 エクセルでマクロを使って研究を進めているものです。 最近マクロを使い始めたのですが、ワークシート関数のスクリプトについてご質問があります。 具体的な記述を書いたほうが説明しやすいので、下に記述します。 Sub Macro1() Windows("a.xls").Activate ActiveCell.FormulaR1C1 = "=SUM(RC[-8]:RC[-1])"・・・(1) Range("J3").Select End Sub このような命令があるときに、sum関数の中に変数を入れることを考えます。そのときに、R1C1表示では選択したセルを基準にして変数を考えなくてはいけないので考えにくいです。そこで、イメージとしてですがこのような書き方はできないのでしょうか。 (1)の部分 ActiveCell.Formula = "=SUM(Range(Cells(2, 2), Cells(2, 変数)))" つまり、rangeやcellsを使って書きたいということです。 また、実際のエクセルのセルに入力されている関数をそのままコピーして、それに変数を自分で手直しして加えるような方法がありましたら教えてください。 よろしくお願いします。

  • Excelマクロのことで教えて下さい

    初歩的なことですみません。 E列の値をF列に値を入れるために下記のマクロを組みました。 Sub test() Worksheets("Sheet1").Select Dim i As Long For i = 2 To Cells(Rows.Count, 4).End(xlUp).Row Range("F2").Value = "=E2/1024/1024" Cells(i, 6).FillDown Range(Cells(2, 6), Cells(i, 6)).Copy Range("F2").PasteSpecial Paste:=xlValues Next i End Sub ところがF列に「値のみを貼り付け」をした時に、途中から同じ値のみがコピーされてしまい困っています。 (画像参照) うまく貼り付けることができるマクロをお教え下さい。 よろしくお願いいたします。

  • エクセルのマクロ

    Sub test() x = Selection.Row y = Selection.Column z = Selection.Columns.count Range(Cells(x, y), Cells(x, y + z - 2)).Select Selection.ClearContents End Sub 上記マクロは、同一行の連続するセルを二つ以上選択状態にして実行すると、範囲内の最も右にあるセルの値のみが残って他のセルの値は全て消去されます。 上記マクロを、複数のセレクションに対して対応できるようにするには、どうすればいいでしょうか? 例えば、c1~f1、d3~h3、e10~g10を選択して実行すると、f1とh3とg10の値のみ残って他の値は消えるということです。

  • エクセルVBA:マクロの中にマクロ?

    度々よろしくお願いします。ボタンが複数あって、それぞれに記録されたマクロの一部分が共通している場合の処理について教えてください。 例えば、前回の質問でご回答いただいたモノを流用し、別の処理と複合させたマクロがあります。 この変数ixがボタン(それぞれのマクロ)ごとに異なる場合、Do While以下を別のマクロとして記録し、それぞれのマクロの中で Application.Run "TEST.xls!Macro1"などのようにできるのでしょうか?変数の扱いをどうして良いのかわかりません。 Sub test() ~別の処理 ix = 8 Do While Cells(ix, "D") <> ""   Select Case Trim(Cells(ix, "D"))   Case "背筋"     Range("AZ8").Copy Destination:=Range(Cells(ix, "I"), Cells(ix, "AW"))   Case "アーム"     Range("BA8").Copy Destination:=Range(Cells(ix, "I"), Cells(ix, "AW"))   Case "レッグ"     Range("BB8").Copy Destination:=Range(Cells(ix, "I"), Cells(ix, "AW"))   End Select   Range(Cells(ix, "I"), Cells(ix, "AW")).Copy   Cells(ix, "I").PasteSpecial Paste:=xlPasteValues   ix = ix + 1 Loop Range("I8").Select End Sub

  • カット&ペーストのマクロ(エクセル)

    Sub test()  R = Selection.Row  C = Selection.Column   Range(Cells(R , C), Cells(R + 100, C)).Select   Selection.Cut   Cells(R + 1, C).Select   ActiveSheet.Paste End Sub 上記マクロは、アクティブセルから100行下までの範囲で"切り取り"を実行し、一行下のセルに"貼付け"を行います。 上記の処理を、複数のセルが選択されている時は、複数回カット&ペーストが行われるように変更したいのですが。 (選択されるセルは必ず同一列内の連番になります) (選択内で一番上のセルとその上のセルは連続したままになり、選択内で一番下のセルとその下のセルも同様になります) A1 a A2 b A3 c A4 d A5 e A6 f A7 g A8 h A9 i 上記でA3:A6を選択して実行すると、以下の結果になります。 A1 a A2 b A3 c A4 A5 d A6 A7 e A8  A9 f A10 g A11 h A12 i 最初のマクロをどのように変えればいいでしょうか?

  • EXCELマクロについて

    条件 シート名提供データE列の3行目からデータが入っています。    ブランク以外のデータをコピーしてシート名WorkのC列の2行目から貼り付けたいので下記のマクロを書いていますがおかしい所 はないのでしょうか。教えてください。 いまいちCellsの使い方がわかりません。 出来たら下記の意味を教えてください。 brank = Worksheets("提供データ").Cells(gyo, 5).Text Range(Cells(3, 5), Cells(gyo, 5)).Select Sub 貼付() Dim gyo, brank Sheets("提供データ").Select Range("e3").Select gyo = 2 Do gyo = gyo + 1 brank = Worksheets("提供データ").Cells(gyo, 5).Text Loop While brank <> "" Range(Cells(3, 5), Cells(gyo, 5)).Select Selection.Copy Sheets("work").Select Range("c2").Select Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=False End Sub

  • 既存のエクセルマクロに命令文を追加

    既存のマクロに別の命令文を追加する場合について質問です。 選択した範囲のオブジェクトを削除するマクロがあります。 下の命令文に 「シート2でも同じことをする(ただし選択範囲はC30からG33)」 を追加する場合には、どのように書けばいいのでしょうか? Sheets("シート1").Select Range("A65:E365").Select Dim shp As Shape Dim rng_shp As Range 'セルが選択されていないときは終了 If TypeName(Selection) <> "Range" Then Exit Sub 'アクティブシートのすべての図形にループ処理 For Each shp In ActiveSheet.Shapes '図形の配置されているセル範囲をオブジェクト変数にセット Set rng_shp = Range(shp.TopLeftCell, shp.BottomRightCell) '図形の配置されているセル範囲と '選択されているセル範囲が重なっていれば図形を削除 If Not Intersect(rng_shp, Selection) Is Nothing Then shp.Delete End If Next Sheets("シート0").Select Range("A1").Select 同じものを上記命令文の下にコピーして選択シートと範囲を直すだけだと、 Dim shp As ShapeとDim rng_shp As Rangeがエラーになります。 どなたかご教示お願いします。

  • 選択範囲の空白セルに0を入れるマクロ

    Private Sub CommandButton1_Click() If Cells("選択範囲").SpecialCells(xlcellTypeblank).Select Then Range("選択範囲").Value = 0 End If End Sub このマクロを作成したのですが、動きません。 どこが、おかしいのでしょうか?

  • マクロでのセルの選択範囲について

    マクロのセル範囲の指定でうまくできなくて困っています。 マクロでB3:B5を選択するように、コードを次のように Range(Cells(3.2), Cells(5, 2)).Select 書くと、B1:C5を選択します。 試しに、 Cells(3, 2).Select と書くと、B3を選択します。 次に、マクロを Cells(5, 2).Select と書くと、B5を選択します。 どうしてでしょうか。 宜しくお願い致します。

専門家に質問してみよう