- ベストアンサー
カット&ペーストのマクロ(エクセル)
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 これを、コピーではなくカット&ペーストに変更するにはどうすればいいでしょうか?
- kayonon
- お礼率100% (22/22)
- オフィス系ソフト
- 回答数3
- ありがとう数3
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
next の前に If i <> 0 Then ActiveCell.Offset(0, i).ClearContents を 入れるとか
その他の回答 (2)
- taocat
- ベストアンサー率61% (191/310)
こんばんは。 >これを、コピーではなくカット&ペーストに変更するにはどうすればいいでしょうか? 提示のコードは一般的に言うコピーではなく、値の代入ですね。 ですから、カット&ペーストも一般的なそれではなく、ただ代入元を消すということですよね。 No.1さんの回答と99%同じですが、質問のコードをちょと変えています ------------------------------------------ Sub Test() Dim i As Integer On Error GoTo Er: With ActiveCell For i = 1 To .End(xlToRight).Column - .Column .Offset(-i, 0).Value = .Offset(0, i).Value .Offset(0, i).ClearContents Next i End With Er: End Sub -------------------------------------------- 以上です。
お礼
有難うございました。
- imogasi
- ベストアンサー率27% (4737/17068)
A1:F1に a b c d e f Sub test() Dim r1 As Range Set r1 = ActiveCell On Error GoTo er: r = ActiveCell.Row C = r1.End(xlToRight).Column - r1.Column + 1 For i = C To 1 Step -1 Cells(r, i).Cut Cells(r + 1 + (C + 1) - i, 1).Select ActiveSheet.Paste Next i er: End Sub 結果A3:A8 f e d c b a スタートをA2にすることも Cells(r + 1 + C - i, 1).Select にすればよい。
お礼
有難うございました。
関連するQ&A
- エクセル マクロ コピーペースト
超初心者です。よろしくお願いします。 Sub prcCopyPaste() 'セル(セルA1)をコピーします Range("A1").Copy 'コピーしたセルをセルA2へ貼り付けます ActiveCell.Offset(, 1).PasteSpecial End Sub さきほどA2へ貼り付ける方法を教えていただいたのですが、A2に値だけを張り付けるためにはどのように書いたらよいですか?
- ベストアンサー
- その他MS Office製品
- セルを選択するマクロ(エクセル)
Sub test() x = ActiveCell.Row y = ActiveCell.End(xlToLeft).Column z = ActiveCell.End(xlToRight).Column Range(Cells(x, y), Cells(x, z)).Select End Sub アクティブセルが含まれている行のみで、データが入力されている連続したセルを選択状態にするマクロとして、上記を考えました。 上記を違った形でもっと簡潔に表すことは可能でしょうか?
- ベストアンサー
- オフィス系ソフト
- EXCELでENTERキーでセルの移動マクロ
こんにちは。 EXCELでENTERキーでセルの移動マクロを使いたいのですが、下記のマクロで改良を教えてもらいたいと思います。 まず、最初は必ず、セルB5にフォーカスしたいということ。そうして、できればOFFSETを使わないで、rangeかcellを使いたいのですが、お願いします。 Sub セル移動() Range("B5").Select Select Case ActiveCell.Column Case 1 ActiveCell.Offset(1, 1).Activate Case 2 ActiveCell.Offset(2, 2).Activate Case 3 ActiveCell.Offset(1, 1).Activate Case 4 ActiveCell.Offset(1, 1).Activate End Select End Sub
- ベストアンサー
- オフィス系ソフト
- 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
- ベストアンサー
- Excel(エクセル)
- excel マクロ
Sub Macro1() ' ' Macro1 Macro ' ' ActiveCell.Offset(-1, 0).Range("A1:G1").Select Selection.Copy End Sub マクロの記録だけでこのコードを作ることは可能でしょうか?
- ベストアンサー
- その他(業務ソフトウェア)
- マクロで、カット→”値”だけをペーストで、
セル: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 にすると、動きません。 どこがミスしているかを教えていただきたくお願いします。 マクロ初心者です。
- ベストアンサー
- Windows XP
- エクセルxpのVBA
VBA初心者です。下記を実行すると、「elseに対応するifがありません」と出ます。なぜかわからず困っています。 For hiniti = DateSerial(Range("A3"), Range("A4"), 21) To DateAdd("m", 1, DateSerial(Range("A3"), Range("a4"), 20)) ActiveCell.Value = hiniti ActiveCell.Offset(0, 1).Select If ActiveCell.Column = 7 Then ActiveCell.Offset(1, -7).Select Else: ActiveCell.Offset(0, 1).Select End If next end sub
- ベストアンサー
- オフィス系ソフト
- エクセルのマクロについて質問です。
下の表を展開したいです。 A B C D E F G 1 C102,C103,C104 aaa bbb ccc ddd~ 2 R102,R103,R105 YYY RRR EEE GGG~ 3 R106,R107,R108 空白(上と同じ) 4 空白 5 L102,L103,L105 QQQ MMM NNN BBB~ という表を、 1 C102 aaa bbb ccc ddd 2 C103 aaa bbb ccc ddd 3 C104 aaa bbb ccc ddd 4 R102 YYY RRR EEE GGG というように最後まで展開していきたいです。 下のマクロだとB列以降が全て一番上と同じ文字列がコピーされてしまいます。 よろしくお願いします。 Sub test2() Dim ax As String 'A列のセルに入っているテキストを代入するための変数 Dim ax2 As String 'axを統合したテキストを代入するための変数 Dim num As Integer, i As Integer '回数を代入するための変数 Dim arr As Variant '配列を格納 Dim tex As String 'B列以降の文字列を代入するための変数 'A列にいくつデータが入っているかを確かめ、その数をnumに代入 Range("A1").Select Selection.CurrentRegion.Select num = Selection.Rows.Count Range("A1").Select 'A1のテキストの最後にカンマが入っているかを判定。なければカンマをつける。 'A列のデータが入っている最後のセルまで上記の処理を行う。 '各テキストは変数axに代入、ax2で統合する For i = 1 To num ax = ActiveCell.Text If Right(ax, 1) = "," Then ax = ax Else ax = ax & "," End If If i = 1 Then ax2 = ax Else ax2 = ax2 & ax End If ActiveCell.Offset(1).Select Next i ax2 = Left(ax2, Len(ax2) - 1) arr = Split(ax2, ",") Range("A1").Select For i = 0 To UBound(arr) num = i + 1 Cells(num, 1).Value = arr(i) Next i Range("A1").Select Selection.CurrentRegion.Select num = Selection.Rows.Count 'B~D列を展開 For i = 1 To 3 ActiveCell.Offset(, 1).Select tex = ActiveCell.Formula Selection.Resize(num, 1).Select Selection.Formula = tex Selection.Resize(1, 1).Select Next i End Sub
- ベストアンサー
- オフィス系ソフト
- エクセルマクロが重い
こんにちは。 ご教授くださいませ。 すでに先方が作っているエクセルのシートがありまして、 そのシートの表組み規則にのっとって入力するユーザーフォーム を私のほうで作ったのですが、重いです。 selectの多用はだめ!というところまでは調べたのですが じゃあどうしたらいいかわかりません。 ■ '--------------------8時から If OptionButton1.Value = True Then ActiveCell.Offset(3, -1).Range("A1").Select ActiveCell = UserForm3.TextBox1.Value ActiveCell.Offset(0, 1).Range("A1").Select ActiveCell = UserForm3.TextBox2.Value ActiveCell.Offset(0, 1).Range("A1").Select ActiveCell = UserForm3.TextBox3.Value ActiveCell.Offset(0, 1).Range("A1").Select ActiveCell = UserForm3.TextBox4.Value ActiveCell.Offset(0, 1).Range("A1").Select ActiveCell = UserForm3.TextBox5.Value ActiveCell.Offset(0, 1).Range("A1").Select ActiveCell = UserForm3.TextBox6.Value ActiveCell.Offset(3, 0).Range("A1").Select ActiveCell = UserForm3.TextBox12.Value ActiveCell.Offset(0, -1).Range("A1").Select ActiveCell = UserForm3.TextBox11.Value ActiveCell.Offset(0, -1).Range("A1").Select ActiveCell = UserForm3.TextBox10.Value ActiveCell.Offset(0, -1).Range("A1").Select ActiveCell = UserForm3.TextBox9.Value ActiveCell.Offset(0, -1).Range("A1").Select ActiveCell = UserForm3.TextBox8.Value ActiveCell.Offset(0, -1).Range("A1").Select ActiveCell = UserForm3.TextBox7.Value ActiveCell.Offset(3, 0).Range("A1").Select ActiveCell = UserForm3.TextBox13.Value ActiveCell.Offset(0, 1).Range("A1").Select ActiveCell = UserForm3.TextBox14.Value ActiveCell.Offset(0, 1).Range("A1").Select ActiveCell = UserForm3.TextBox15.Value ActiveCell.Offset(0, 1).Range("A1").Select ActiveCell = UserForm3.TextBox16.Value ActiveCell.Offset(0, 1).Range("A1").Select ActiveCell = UserForm3.TextBox17.Value ActiveCell.Offset(0, 1).Range("A1").Select ActiveCell = UserForm3.TextBox18.Value ActiveCell.Offset(3, 0).Range("A1").Select ActiveCell = UserForm3.TextBox24.Value ActiveCell.Offset(0, -1).Range("A1").Select ActiveCell = UserForm3.TextBox23.Value ActiveCell.Offset(0, -1).Range("A1").Select ActiveCell = UserForm3.TextBox22.Value ActiveCell.Offset(0, -1).Range("A1").Select ActiveCell = UserForm3.TextBox21.Value ActiveCell.Offset(0, -1).Range("A1").Select ActiveCell = UserForm3.TextBox20.Value ActiveCell.Offset(0, -1).Range("A1").Select ActiveCell = UserForm3.TextBox19.Value ActiveCell.Offset(3, 0).Range("A1").Select ActiveCell = UserForm3.TextBox25.Value ActiveCell.Offset(0, 1).Range("A1").Select ActiveCell = UserForm3.TextBox26.Value ActiveCell.Offset(0, 1).Range("A1").Select ActiveCell = UserForm3.TextBox27.Value ActiveCell.Offset(0, 1).Range("A1").Select ActiveCell = UserForm3.TextBox28.Value ActiveCell.Offset(0, 1).Range("A1").Select ActiveCell = UserForm3.TextBox29.Value ActiveCell.Offset(0, 1).Range("A1").Select ActiveCell = UserForm3.TextBox30.Value 'ActiveWorkbook.Save MsgBox "入力しました。", vbInformation, "確認" End If '--------------------8時から(END ■ 基本の流れは... 最初にオプションボタン3つのどれか1個の 選択を求め、その条件に応じて 始基点となるセルが変わります。 で、あとは与えられた表組みを縦や横に 移動しながら、対応するテキストボックスの 値を入れる、という 我ながら頭の悪い方法で^^; .selectではない、スマートな方法があればと思います。 ぜひお知恵を!
- ベストアンサー
- オフィス系ソフト
- 行方向の同じ値のセルを結合するマクロ
ネットで色々調べながら、A列方向の同じ値のセルを結合させるマクロ を作ってみたのですが、もっと簡単にできるようでしたら教えていただきたいです。 どうぞよろしくお願いいたします。 Sub セル結合() Dim r As Integer '行数 Dim i As Integer 'カウンタ r = Sheets(1).Range("a1").CurrentRegion.Rows.Count - 1 Application.DisplayAlerts = False For i = 1 To r Cells(i, 1).Activate '項目の一つ下のセルをアクティブに If ActiveCell.Value = ActiveCell.Offset(1).Value Then Range(ActiveCell, ActiveCell.Offset(1)).Merge End If Next Application.DisplayAlerts = True End Sub
- ベストアンサー
- その他MS Office製品
お礼
うまくいきました。 有難うございました。