• ベストアンサー

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

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答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
質問者

お礼

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