- ベストアンサー
VBA cut&pasteが出来ない
セルのカット&ペーストをしようとしてますが、エラーになります。 activecell.offset(1,5).range("A1:H1").cut destination:=activecell.offset(4,2).range("A1") うろ覚えですが「○○定義エラー」。デバックモードでカーソルを当てて見ると、後半のoffsetの部分でエラーになってるようです。なぜでしょう?末尾のrange(A1)は自動マクロで作成し加工して作った際の残りです。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (3)
- WindFaller
- ベストアンサー率57% (465/803)
- WindFaller
- ベストアンサー率57% (465/803)
- tom04
- ベストアンサー率49% (2537/5117)
関連するQ&A
- VBA セル内改行+他セルの文字をカット&ペースト
A1セル内文字の最後部分にカーソルを持っていって、Alt+Enterを押してA1セルを2行に改行する、 B1にある値をカットして、A1の改行した部分に貼り付け というマクロを作るべく、「マクロの記録」をしてみたところ、A1のテキストがそのままマクロに書き込まれてしまって応用ができないです。 改行部分に貼り付けするにはB1セルの値はコピーではなくカットが必要だと思いますが、これも「マクロの記録」だと動作ではなくテキストそのものが書き込まれてしまい、応用が効きません。 Sub A1改行カットペースト() ' ' A1改行カットペースト Macro ' ' ActiveCell.FormulaR1C1 = "RO20-001" & Chr(10) & "" Range("B1").Select ActiveCell.FormulaR1C1 = "" Range("A1").Select ActiveCell.FormulaR1C1 = "RO20-001" & Chr(10) & "8/7到着" Range("F4").Select End Sub "RO20-001"と"8/7到着"はA1とB1の値であって、この記述ではこのマクロをループさせた時、他の全部のセルに"RO20-001"と"8/7到着"が貼りついてしまいます。 改行やテキストのカット&ペーストの「動作」はどのように記述すれば良いのでしょうか? どなたかご存じの方がいらっしゃいましたら、教えて下さい。 よろしくお願いします。
- ベストアンサー
- Visual Basic
- ExcelのVBAのAutoFillの使い方について
Excel97のマクロでAutoFillを使おうとしているのですが、エラーが出て実行できません。 何も表示されていないシートでコマンドボタンを押すと、AutoFillを使ってA1セル~E1セルとA2セル~E2セルに数字の1~5が表示されるようにしたいと考えています。 下記のようにマクロを書いたところ、A1~E5はうまくできたのですが、 「Selection.AutoFill Destination:=ActiveCell.Range("A2:E2"), Type:=xlFillSeries」 の行でエラーが発生します。 「実行時エラー:1004 RangeクラスのAutoFillメソッドが失敗しました。」と表示されます。 Private Sub CommandButton1_Click() ActiveSheet.Range("A1").Select ActiveCell.FormulaR1C1 = "1" Selection.AutoFill Destination:=ActiveCell.Range("A1:E1"), Type:=xlFillSeries ActiveSheet.Range("A2").Select ActiveCell.FormulaR1C1 = "1" Selection.AutoFill Destination:=ActiveCell.Range("A2:E2"), Type:=xlFillSeries 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 VBAで表組みしたらデバック発生
Excel VBAの初心者です。Windows Vistaで Excel2007を使っています。 表をマクロの実行で作成したいと思っています。 何もないエクセルブックより 「開発」→「マクロの記録」→「相対参照」 →「表の作成」→「記録終了」→「相対参照で記録の解除」 →「エクセルマクロ有効ブックで保存」 ところがこのマクロ記録が入ったブックを再度立ち上げ、 表をオールクリアにし、マクロボタンより表作成を実行 させようとすると、次のエラーメッセージがでました。 『実行時エラー'9' インデックスが有効範囲にありません。』 デバックからModule1をみると以下の記述となっていました。 Sub 表組み() ' ' 表組み Macro ' ' ActiveCell.Range("A1:E5").Select Selection.Copy Windows("Book1").Activate ActiveSheet.Paste ActiveCell.Columns("A:A").EntireColumn.Select ActiveCell.Rows("1:1").EntireRow.RowHeight = 11.25 ActiveCell.Rows("1:5").EntireRow.Select Selection.RowHeight = 21.75 ActiveCell.Columns("A:A").EntireColumn.ColumnWidth = 14.88 ActiveCell.Offset(0, 4).Range("A1").Select Application.CutCopyMode = False With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter .WrapText = False .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = False End With ActiveCell.Offset(1, -3).Range("A1:D4").Select Selection.NumberFormatLocal = "#,##0_ " ActiveCell.Select ActiveCell.FormulaR1C1 = "78000" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "102000" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "9800" ActiveCell.Offset(-2, 1).Range("A1").Select ActiveCell.FormulaR1C1 = "65000" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "204000" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "500" ActiveCell.Offset(-2, 1).Range("A1").Select ActiveCell.FormulaR1C1 = "86000" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "151000" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "10200" ActiveCell.Offset(-2, 1).Range("A1").Select ActiveCell.FormulaR1C1 = "=SUM(RC[-3]:RC[-1])" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "=SUM(RC[-3]:RC[-1])" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "=SUM(R[-2]C:R[-1]C)" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "=SUM(R[-3]C:R[-1]C)" ActiveCell.Offset(0, -3).Range("A1").Select ActiveCell.FormulaR1C1 = "=SUM(R[-3]C:R[-1]C)" ActiveCell.Offset(0, 1).Range("A1").Select ActiveCell.FormulaR1C1 = "=SUM(R[-3]C:R[-1]C)" ActiveCell.Offset(0, 1).Range("A1").Select ActiveCell.FormulaR1C1 = "=SUM(R[-3]C:R[-1]C)" ActiveCell.Offset(-4, -2).Range("A1:D1").Select Selection.AutoFilter End Sub 上から9行目(?)のWindows("Book1").Activateに 黄色い矢印が示され、また行全体が黄色く四角に 覆われていました。 おそらくこの記述に問題があると思いますが、 どんな記述に変えたらいいのか分かりません。 Excel VBAにお詳しい方ご教示願います。 なお、マクロで作成したい図を添付いたします。 参考にしていただければ幸いです。
- ベストアンサー
- Windows Vista
- マクロで、カット→”値”だけをペーストで、
セル: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
- 【エクセル】 VBAでエラーが出てわかりません。。
やりたいことは、関数をマクロでセルに記入してオートフィルで指定した行数まで伸ばしたいのです。 (すでに関数で作成したファイルがあるのですが、行数が多いため、とても重い。。^^;) まずマクロの記録で次のマクロを取得しました。 Sub Macro4() Range("C4").Select ActiveCell.Formula = "=SUM(A2:A10)" Range("C4").Select Selection.AutoFill Destination:=Range("C4:C12"), Type:=xlFillDefault Range("C4:C12").Select Range("D11").Select End Sub そして、 Sheet2に貼り付けて > ActiveCell.Formula = "=SUM(A2:A10)" の"=SUM(A2:A10)"部分をちょっと長い関数ですが、 "=IF(ISERROR(INDEX(Sheet1!$I$1:Sheet1!$I$400,SMALL($A$2:$A$400,ROW(A1)),1)),"",INDEX(Sheet1!$I$1:Sheet1!$I$400,SMALL($A$2:$A$400,ROW(A1)),1))" と書き換えてマクロを実行すると「アプリケーション定義またはオブジェクト定義エラーです。」 というエラーが出てしまうんですが、どこを直せばわからないです。。 おかしいところを教えてください、よろしくお願いします。 わかり図らい説明かと思いますが。。この件(1行目の文)について似たようなことを解説して いるサイトがありましたら、教えて欲しいです。
- ベストアンサー
- 筆まめ・はがき作成
- VBA Pasteで教えて下さい!
Book1で指定したセル範囲(C2:C41)を Book2のSheet1の(AB4:AB43)とSheet2の(AU10:AU49)にペーストを行うに あたり、ボタン押下にて実行する下記コードをBook1に作成しましたが、 2番目のPasteで実行時エラー1004「アプリケーション定義または オブジェクト定義のエラーです」と出ます。 複数Sheetの別々のセルにペーストする方法を 教えていただけないでしょうか? Book1とBook2は共に開いた状態です。 Book2のシートは、それぞれVBAで保護をかけていますが、 .protect UserInterfaceOnly:=Trueで変更可能な状態に しています。 Private Sub copy_Click() Range("C2:C41").Copy Windows("Book2").Activate Sheets("Sheet1").Range("AB4:AB43").PasteSpecial Paste:=xlPasteValues Sheets("Sheet2").Range("AU10:AU49").PasteSpecial Paste:=xlPasteValues (↑ここでエラーが出ます) End sub
- ベストアンサー
- Visual Basic
- excel vbaでの質問になります
このようなマクロを作成したのですが、セルに数式が入れてあると、どうしてもその下の空白の行に値を入力されてしまいます。 数式が入っているセルにもそのままセルに値を入れたいのですが・・ 宜しくお願いします。 Dim wb1 As Worksheet, r1 As Range Dim N As Integer, i As Integer Dim mycount As Long Set wb1 = ThisWorkbook.Worksheets("請求書") mycount = Range("B111").CurrentRegion.Rows.Count Cells(111 + mycount, 2).Select ActiveCell.Offset(0, 0).Value = wb1.Range("C60").Value ActiveCell.Offset(0, 1).Value = wb1.Range("C61").Value ActiveCell.Offset(0, 12).Value = wb1.Range("C66").Value ActiveCell.Offset(0, 13).Value = wb1.Range("C74").Value ActiveCell.Offset(0, 14).Value = wb1.Range("C75").Value ActiveCell.Offset(0, 15).Value = wb1.Range("C84").Value ActiveCell.Offset(0, 16).Value = wb1.Range("C85").Value ActiveCell.Offset(0, 20).Value = wb1.Range("C69").Value ActiveCell.Offset(0, 22).Value = wb1.Range("C68").Value ActiveCell.Offset(0, 23).Value = wb1.Range("C76").Value ActiveCell.Offset(0, 24).Value = wb1.Range("C77").Value Exit Sub
- 締切済み
- Visual Basic
- エクセル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
- ベストアンサー
- オフィス系ソフト
- VBAについて
いつもお世話になっています マクロ・VBA超初心者です。 質問させてください。 現在シート1の完売のセルの欄に○が入っていれば日付をみてシート2の同じ日付の隣のセルに○を入力しようと思っているのですが、シート2の日付を検索はしているんですが入力がいきません Sheet1 ↓セルA1 ↓セルB1 5月26日 26 B1のセルはDAY(A1)にて出してます 完売 A氏 ○ Sheet2 ↓A列 ↓B列 5月 1日 ・ ・ ・ 26日 ○ ←シート1の所に○が付いているとシート1セルB1と同じ 27日 日付の隣のセルに○を入力 28日 VBA Sub test() Sheets("Sheet2").Select Range("A1").Select Do Until ActiveCell = "" ActiveCell.Offset(1, 0).Activate If ActiveCell.Value = Worksheets("Sheet1").Range("B2") Then ActiveCell.Offset(0, 1).Activate If ActiveCell.Value <> "○" Then ActiveCell.Valu = "○" ActiveCell.Offset(0, -1).Activate Else ActiveCell.Offset(0, -1).Activate End If Else End If Loop Sheets("Sheet2").Select Range("A1").Select End Sub どこが間違っているかわからない状態です。 分かりにくい説明ではあるんですが教えてください お願いします。
- 締切済み
- オフィス系ソフト
お礼
ありがとうございます。 ・Resizeの使用 ・destinationは不要 ということですね。次回これで試してみます。 質問の後で、結局とった対策は、 activecell.offset(1,5).range("A1:F1").select selection.cut destination:=activecell.offset(省略) 一旦セレクトしておいて、次にカット&ペーストするとなぜか動きました。