• ベストアンサー

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

Sub test1() Selection.Cut Destination:=Selection.Offset(0, -1) Selection.CurrentRegion.Select End Sub Sub test2() Selection.Cut Destination:=Selection.Offset(0, 1) Selection.CurrentRegion.Select End Sub K1:N1が選択状態になっている時にtest1を実行すると、4つのセルが一セル分だけ左に移動します。 test1を連続してもう一回実行すると二セル分だけ左に移動します。連続して3回だと三セル分です。 が、test2だと、test1と同様に実行回数分だけ全体を右に移動させることができません。どうしてでしょうか? 実行回数分だけ全体を右に移動させるには、どういった記述が必要でしょうか?

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

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

TEST2で右に行くと、Activeセルが取り残されてしまうのでCurrentRegionが働かなくなるからです。(左ならActiveセルにかぶるから問題なし) TEST2ではActiveセルもいっしょに移動させてやればOKです。 Sub test2() Selection.Cut Destination:=Selection.Offset(0, 1) ActiveCell.Offset(0, 1).Activate ActiveCell.CurrentRegion.Select End Sub

kayonon
質問者

お礼

有難うございました。

その他の回答 (2)

  • bonaron
  • ベストアンサー率64% (482/745)
回答No.3

Sub test2() Selection.Cut Destination:=Selection.Offset(0, 1) Selection.Offset(0, 1).CurrentRegion.Select End Sub ではいかが?

kayonon
質問者

お礼

有難うございました。

  • 11369
  • ベストアンサー率29% (20/67)
回答No.2

選択領域が右方向なので右方向の移動だと領域が拡張してしまうんですね。 次のように配列で定義すればいけるようです。 Sub Test Dim A As Range Set A = Selection Selection.Cut Destination:=Selection.Offset(0, 1) A.Select End Sub

kayonon
質問者

お礼

有難うございました。

関連するQ&A

  • エクセルのマクロ

    Sub test() Set x = Application.InputBox(Prompt:="", Type:=8) Selection.Cut Destination:=x 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 最初のマクロをどのように変えればいいでしょうか?

  • マクロで、カット→”値”だけをペーストで、

    セル:B2 は、1(数字) C2は、2(数字) D2は、(式)=B2+C2 が入っています。すなわち、3 です。 B2から下にある数行をカットして”値”だけ別表の下に貼り付けようとしますが、 ( Copy → ペーストなら下記のマクロで出来ますが ) Sub aaa() With ActiveSheet .Range("B2", .Range("D65536").End(xlUp)).Copy _ Destination:=Worksheets("Sheet2").Range("F65536").End(xlUp).Offset(1, 0) End With End Sub Copy を Cut にすると、動きません。 どこがミスしているかを教えていただきたくお願いします。 マクロ初心者です。

  • 移動のマクロ(エクセル)

    Selection.Cut Destination:=Selection.Offset(0, 1) 上記マクロで、選択領域にあるセルのデータを右に一セル分移動できますが、データだけでなく選択領域自体も同位置に移動させるには、どのような記述が必要になるでしょうか?

  • エクセルマクロで行を変えて千回カット&ぺースト

    下記のコードでB,C,D・・・と行を1,000回変えて同じ作業をしたいのですが、どのようにしたらよいか分かりません。 どなたかお詳しい方アドバイスをお願いします。 Range("A18:A32").Select Selection.Cut Destination:=Range("B3:B17") ←B,C,D・・と変えてカットしたい。 Rows("18:32").Select Selection.Delete Shift:=xlUp Range("A18:A32").Select Selection.Cut Destination:=Range("C3:C17") Rows("18:32").Select Selection.Delete Shift:=xlUp Range("A18:A32").Select Selection.Cut Destination:=Range("D3:D17") Range("D3:D17").Select End Sub

  • エクセルのマクロ

    縦方向に連続したセルを選択状態にした時に、選択セルを基点として右横方向に連続してデータが入力されているセルを罫線で囲う、という処理をマクロで実行したいのですが。 例えば、以下の図で黒丸がデータ入力セルであるとすると、C1~C4を選択状態にして実行すると、C1~D1とC2~F2とC4が罫線で囲われます。  AB CD EFG 1○●●●○○○ 2●●●●●●○ 3○○○○○○○ 4●●●○○○○ 以下のマクロを実行すると、上図の3行目と4行目のところがかなり余計に罫線が引かれてしまいます。どう修正すればいいでしょうか? Sub test1()  yc = Selection.Rows.count  aa = ActiveCell.Address  For y = 0 To yc - 1  ActiveCell.Offset(y, 0).Select  Range(ActiveCell, ActiveCell.End _       (xlToRight)).Select        With Selection.Borders(xlEdgeLeft)       .LineStyle = xlContinuous       .Weight = xlThin       .ColorIndex = xlAutomatic    End With    With Selection.Borders(xlEdgeTop)       .LineStyle = xlContinuous       .Weight = xlThin       .ColorIndex = xlAutomatic    End With    With Selection.Borders(xlEdgeBottom)       .LineStyle = xlContinuous       .Weight = xlThin       .ColorIndex = xlAutomatic    End With    With Selection.Borders(xlEdgeRight)       .LineStyle = xlContinuous       .Weight = xlThin       .ColorIndex = xlAutomatic    End With    Range(aa).Select   Next y End Sub

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

    Sub test()  Dim r1 As Range  Set r1 = Range(ActiveCell.Address)   On Error GoTo er:    For i = 0 To r1.End(xlToRight).Column - r1.Column    ActiveCell.Offset(-i, 0) = ActiveCell.Offset(0, i).Value    Next i   er: End Sub 上記のマクロを実行すると、以下のように横に入力されているものが縦にコピーされます。 A SS DDD FF GGG   ↓ ↓ ↓ ↓ GGG FF DDD SS A SS DDD FF GGG これを、コピーではなくカット&ペーストに変更するにはどうすればいいでしょうか?

  • EXCELのマクロについて

    お世話になっております。 以下のマクロを1万行分繰り返したいのですが、回数を1万回と指定する構文を 教えてください。よろしくお願いします。 Sub Macro16() ' ' Macro16 Macro ' ' Keyboard Shortcut: Ctrl+Shift+Z ' ActiveCell.Offset(1, 0).Rows("1:1").EntireRow.Select Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove ActiveCell.Offset(-1, 0).Range("A1:M1").Select Selection.Copy ActiveCell.Offset(1, 0).Range("A1").Select ActiveSheet.Paste ActiveCell.Offset(-1, 2).Range("A1").Select Application.CutCopyMode = False ActiveCell.FormulaR1C1 = "7/5/1905" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "7/6/1905" ActiveCell.Offset(1, -2).Range("A1").Select End Sub

  • エクセルのマクロ

    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の値のみ残って他の値は消えるということです。

  • (マクロ)カット&ペーストを列毎に繰り返したい

    下のように、A列から50列目までデータが入力されています。 各列、データは上から順に詰まっている状態です。 C列のように1つもデータが入力されていない列もあります。 ------------------------------------------ A列 B列 C列 D列 ・・・ Z001 Z003 Z004 Z002 Z005 ------------------------------------------ これを、「B列から順にデータをカットして、A列最終行の下にペーストする」という作業を、各列毎に50列目まで繰り返したいと思っています。 完成イメージは下記のようになります。 ------------------------------------------ A列 B列 C列 D列 ・・・ Z001 Z002 Z003 Z004 Z005 ------------------------------------------ 下記のようにマクロを組みましたが、無限ループになっているのか、強制終了となってしまいます。 どういうふうにマクロを組めばいいのでしょうか? 宜しくご教授お願いいたします。 Sub ADD() Dim i, j As Long For j = 2 To 50 '列番号指定 'B列1行目から順にセルが空白でなければカットする。 i = 1 Do While Cells(i, j).Value <> Empty Cells(i, j).Select Selection.Cut 'A列の最終行の1つ下の行に貼り付ける。。 Range("A1").Select Range(Selection, Selection.End(xlDown).Offset(1, 0)).Select ActiveSheet.Paste i = i + 1 Loop Next End Sub

専門家に質問してみよう