• ベストアンサー

excel vba

(1)下記のマクロに出てくるApplication.CutCopyMode = False というのは何でしょうか。 (2)また自分でマクロ記録してあるシートを、別のシートにコピーしたとき Application.CutCopyMode = False Selection.Copy というのが、付くときとつかないときがあったんですがなぜそのようなことがおきるのか。 (3)またSelection.Copyというのは何ですか。 Sub Macro1() ' ' Macro1 Macro ' マクロ記録日 : 2007/1/11 ユーザー名 : ××××× ' ' Workbooks.Open Filename:="C:\aaa\bbbbb\cccc\aaaa_1.xls" Columns("H:H").Select Application.CutCopyMode = False Selection.Cut Columns("E:E").Select Selection.Insert Shift:=xlToRight Columns("I:I").Select Selection.Cut Columns("G:G").Select Selection.Insert Shift:=xlToRight With Selection.Font .Name = "MS 明朝" .Size = 10 .Strikethrough = False .Superscript = False .Subscript = False .OutlineFont = False .Shadow = False .Underline = xlUnderlineStyleNone .ColorIndex = xlAutomatic End With ActiveSheet.PageSetup.PrintArea = "$A$1:$L$61" ActiveWorkbook.Save End Sub

  • taktta
  • お礼率72% (1031/1430)

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

#1のご回答で出尽くしているが 「マクロの記録」を採ったときのクセみたいなものを勉強してください。マクロの解説書(VBAの入門段階の部)には書いてある。 >Application.CutCopyMode = False Copyモードと通常モードがある。 コピーやカットの操作をするとコピーや切り取りが行われ、貼り付け準備態勢になる。コピー元範囲境界が点滅する状態。 Applicationが付いているのは、エクセルの上のクラスのObjectにCopyのプログラムがあるということ。 ーーー >Application.CutCopyMode = False Selection.Copy 私がA1をコピーし、張り付けず、C3をコピーしたところ、マクロの記録は下記になった Range("A1").Select Selection.Copy Range("C3").Select Application.CutCopyMode = False Selection.Copy これと同じようなことを下のでは。ためらいがあったとか。 ーーー >Selection.Copyというのは何ですか。 これぞ有名な、マクロの記録のクセです。 オブジェクト(セルなど)の選択で Range("C3").Selectをエクセルが作り 行を分けて、次行に Selection.Copy とします。 マクロコード自動創出の安定性のためか。 個人が組む場合はRange("C3").Copyと書くが、自動作成の場合い 冗長になっている。 Selectionとは指定したObject(セル範囲など)を、「それ」と指し示すやり方だと思えばよい。 C3を選択した 「それを」コピーする という風に。 コードが2段(行以上)表現になるので、1行あたりは少し短くなる場合がある。

taktta
質問者

お礼

とてもわかりやすく、かゆいところに手がとどく説明に感激いたします。 ご回答どうもありがとうございました。

その他の回答 (1)

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.1

(1)シート上の適当な範囲を選択してCtrl+Cでコピーすると、その範囲が点滅する点線で囲まれます。この解除を行うのが  Application.CutCopyMode = False です (2)マクロ記録を行うときコピー操作後、ESCキーを押すと上記命令が発生します。 (3)選択範囲をCtrl+Cもしくは「編集」→「コピー」でコピーするのが  Selection.Copy になります。 なお掲載されたコードに  Columns("H:H").Select  Application.CutCopyMode = False  Selection.Cut という箇所がありますが、この位置での  Application.CutCopyMode = False は意味がありません。それは先に述べたようにコピー、カットの範囲を解除するのがこの命令だからです。 それ以前にCutしただけでは行が削除されないのですが、Cutした内容をPasteしていないので、何のためにCutしているのか不明です。 (ClipBoardに貼り付けるのが目的でしょうか?)

taktta
質問者

お礼

説明にてよく意味が理解できました。 とてもうれしいです。 ありがとうございました。

関連するQ&A

  • マクロで切り取りしたものを貼り付ける方法

    エクセルのマクロを利用しております。 自動で作業を覚えるマクロボタンで切り取りし貼り付けたのですが マクロを実行するとデータが元の場所にも残ってしまいました。 結果としてコピーペーストとして出力されました。 私が行いたいことは、切り取りし貼り付けが行いたいのです。 (元の場所にデータは残らない) 以上よろしくお願いします。 以下は私が使用しているマクロになります。 Workbooks("2.xls").Sheets("Sheet1").Select Columns("Q:Y").Select Application.CutCopyMode = False Selection.Copy Columns("N:N").Select Selection.Insert Shift:=xlToRight Sheets("Sheet2").Select Columns("C:D").Select Application.CutCopyMode = False Selection.Copy Columns("N:N").Select Selection.Insert Shift:=xlToRight

  • VBA進捗状況を可視化(数値)で

    お願いします。いま以下の作業をかりに1000回繰り返し、なおかつ その進捗状況を可視化(数値で)する一番簡単な記述は どのように書けばいいのでしょうか。実行の順番も併せて VBA上級者の方、よろしくお願いいたします。 Sub 移動() ' ' 移動 Macro Range("D6:D15").Select Selection.Copy Range("H6").Select ActiveSheet.Paste Columns("G:G").Select Application.CutCopyMode = False Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove Range("C2").Select End Sub

  • VBAマクロエラー【オーバーフローしました。】

    以下のVBAマクロで突然エラーが出るようになってしまいました。 原因がわからず困っています。 どなたかご教授ください。 該当部分 :S = Range("B2").End(xlDown).Row エラーMrg:実行時エラー'6': オーバーフローしました ----------マクロ文---------- Sub 部担コード読み替え() Dim R_Count As Integer Dim P_Sheet As String Dim S As Integer 'データ取込用のファイルを開く Workbooks(D_Book).Activate Sheets("Data1").Select Columns("C:C").Select Selection.Insert Shift:=xlToRight Range("B2").Select S = Range("B2").End(xlDown).Row Range("C2:C" & S).Formula = "=SUBSTITUTE(SUBSTITUTE(RC[-1],""%"",""1""),""*"",""2"")" Range("C1").Value = "部担コード" Cells.Select Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues Columns("B:B").Select Application.CutCopyMode = False Selection.Delete Shift:=xlToLeft Range("A1").Select Sheets("Data2").Select Columns("C:C").Select Selection.Insert Shift:=xlToRight Range("B2").Select S = Range("B2").End(xlDown).Row Range("C2:C" & S).Formula = "=SUBSTITUTE(SUBSTITUTE(RC[-1],""%"",""1""),""*"",""2"")" Range("C1").Value = "部担コード" Columns("G:G").Select Selection.Insert Shift:=xlToRight Range("G2:G" & S).Formula = "=SUBSTITUTE(SUBSTITUTE(RC[-1],""%"",""1""),""*"",""2"")" Range("G1").Value = "キー" Cells.Select Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues Columns("B:B").Select Application.CutCopyMode = False Selection.Delete Shift:=xlToLeft Columns("E:E").Select Application.CutCopyMode = False Selection.Delete Shift:=xlToLeft Range("A1").Select End Sub

  • エクセルVBAでエラーがでます。

    エクセルで以下のようなVBAをつくりましたが Columns("B:C").Select でエラーがでます。 初歩的なことですが教えてください。 Sub Macro3() ' ' Macro3 Macro Worksheets(1).Copy before:=Worksheets(1) Worksheets(1).Activate Columns("B:C").Select Selection.Delete Shift:=xlToLeft Columns("C:L").Select Selection.Delete Shift:=xlToLeft Columns("H:H").Select Columns("L:AA").Select Selection.Delete Shift:=xlToLeft End Sub

  • エクセルVBA

    アクティブ「セル」のある「行」をコピーし、そのアクティブセルの下へ挿入するマクロに、複数「セル」を選択している場合は、複数行を挿入するように追記するには、どうしたらいいでしょうか? Sub Macro1() Rows(1).Copy ActiveCell.EntireRow.Insert Shift:=xlDown Application.CutCopyMode = False ActiveCell.EntireRow.Hidden = False End Sub よろしくお願いします。m(_ _)m

  • VBA エラー表示についての原因がわかりません

    お世話になります。 現在、社内集計作業のため下記のようなマクロを組みました。 条件として保存動作をすると実行…ということで諸々調べた結果、VBE→ThisWorkBookから指定のプロシージャを選んで、その中にコードを記入する、ということが多数でしたので、それに倣いました。 ところが、いざ下記コード内容で実行しようとすると「インデックス範囲が有効ではありません」とストップをかけられる上、最初の新規ワークブック追加~コピペすら正しく行われません。 標準モジュールでは正しく実行してくれるのですが、このようなケースでエラーになる理由がよくわかりません。 つきましては、下記コードがエラーとなる理由、そして可能であればどのように修正をすればよいかお教えください。 ご面倒をおかけしますが、よろしくお願いいたします。 Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) ' Macro2 Macro ' ' Columns("A:A").Select Range("A:FU").Select Selection.Copy Workbooks.Add ActiveSheet.Paste Columns("FU:FU").Select Application.CutCopyMode = False Selection.Copy Columns("FT:FT").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Columns("FT:GF").Select Application.CutCopyMode = False Selection.Delete Shift:=xlToLeft Columns("A:A").Select Range(Selection, Selection.End(xlToRight)).Select Selection.NumberFormatLocal = "G/標準" Sheets("Sheet3").Select Application.DisplayAlerts = False 'メッセージを出さない ActiveWindow.SelectedSheets.Delete Application.DisplayAlerts = False 'メッセージを出さない Sheets("Sheet2").Select ActiveWindow.SelectedSheets.Delete Range("A1").Select Columns("A:A").Select Range(Selection, Selection.End(xlToRight)).Select Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,SkipBlanks _ :=False, Transpose:=False ChDir "\\sv-qlikview.dmsinc.local\Documents\社内実績集計画面\読込用(仮)" Application.DisplayAlerts = False 'メッセージを出さない ActiveWorkbook.SaveAs Filename:= _ "\\sv-qlikview.dmsinc.local\Documents\社内実績集計画面\読込用(仮)\第○営業部.xlsx", _ FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False ActiveWindow.Close End Sub

  • ExcelのVBAです。

    先日お答えいただいたVBAなんですが、 Sub Macro1() Sheets("Sheet1").Select Range("A1").Select Range(Selection, Selection.End(xlDown)).Select Selection.Copy Sheets("Sheet3").Select Range("A1").Select ActiveSheet.Paste Selection.End(xlDown).Select Application.CutCopyMode = False Do Selection.Insert Shift:=xlDown Selection.End(xlUp).Select Loop Until ActiveCell.Address = "$A$1" End Sub というのを使用させて頂いてます。 これを、コピー先のものを上書きせずに、コピーされたものがあれば表示させるといった風に出来ないでしょうか? 例  A    A 1 a 1 2 b → 2あ 3 c 3 右から左に一行間隔で別シートに表示させたいのですが、  A  1 a 2 あ 3 b 4 5 b という結果にしたいのです。 拙い文章で申し訳ないのですが、教えて頂きたいです。

  • 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

  • このコードを実行するとエクセルがフリーズしてしまいます。

    とある為替データファイル(600KB)の編集をマクロで実行したい(何度も新規で編集するため)のですが画面がフリーズしてしまいます。たまに最後まで出来ます。長すぎるのでしょうか。省略できる部分があったら教えて欲しいです。(初心者です) 以下そのまま添付 Sub 画面を固定() Application.ScreenUpdating = False End Sub Sub いち() Call 画面を固定 Cells.Select With Selection.Font .Size = 9 .Strikethrough = False .Superscript = False .Subscript = False .OutlineFont = False .Shadow = False .Underline = xlUnderlineStyleNone .ColorIndex = xlAutomatic End With 'セルの結合を解除・折り返して全体を表示するの解除・文字を左詰で表示 With Selection .WrapText = False .Orientation = 0 .AddIndent = False .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = False .HorizontalAlignment = xlLeft '(文字を左詰で表示) End With '列の幅 Selection.ColumnWidth = 2.38 '行の幅 Selection.RowHeight = 12 '列の幅を自動調整 Cells.Select Cells.EntireColumn.AutoFit 'A列の調整 Columns("A:A").ColumnWidth = 3 '不要行削除 Range("a:a,c:c,e:H,J:R,T:U,X:AA,AC:AO,AQ:Au,Aw:BB,BD:BG,BI:CC").Select Selection.Delete Shift:=xlToLeft '円マークを取る Cells.Replace What:="\", Replacement:="", LookAt:=xlPart, SearchOrder:= _ xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False '円の列の書式 Range("K:K,I:I").Select Selection.NumberFormatLocal = "#,##0_ ;[赤]-#,##0 " ' 列の入れ替え() '(建時) Columns("G:G").Select Selection.Cut Columns("B:B").Select Selection.Insert Shift:=xlToRight '(建値) Columns("G:G").Select Selection.Cut Columns("C:C").Select Selection.Insert Shift:=xlToRight Columns("H:H").Select Selection.Cut Columns("e:e").Select Selection.Insert Shift:=xlToRight 'スクロールで画面左に戻る ActiveWindow.ScrollColumn = 1 '仕切取引まで行削除 On Error GoTo line x = Application.WorksheetFunction.Match("仕切取引", Columns("A:A"), 0) If x = 1 Then Exit Sub Else Rows("1:" & x - 1).Delete End If Exit Sub line: MsgBox "見当たりません", vbCritical, "(>_<) " '一行目(仕訳取引)削除 Rows("1:1").Select Selection.Delete Shift:=xlUp 'オートフィルタ Rows("1:1").Select Selection.AutoFilter '不要列にかかったフィルタを削除 Columns("L:CE").Select Selection.Delete Shift:=xlToLeft End Sub よろしくお願いします。

  • エクセルVBAで空白セルを削除する方法

    みなさん教えてください。 今エクセルVBAで、下記のようにのA列に空白セルがある場合にそのセルを削除し、 空白セルが無い場合何もしないと言うマクロを作っています(下記のように自動記録し ました)。 しかし、作成したマクロは、下記のようにA列に空白セルがない場合はエラーが出てし まいます。 空白セルが無い場合エラーが出ない方法を教えて頂けないでしょうか。 よろしくお願いします。 <マクロ> Sub Macro1() Columns("A:A").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Selection.SpecialCells(xlCellTypeBlanks).Select Application.CutCopyMode = False Selection.Delete Shift:=xlUp End Sub <データ> A --------- 1 2 1 1 1 3 4 ・ ・ ・ (以降約300行続きます)

専門家に質問してみよう