• ベストアンサー

《エクセル2000》VBAの処理が遅いのはなぜ?

ここのサイトの皆さんのご協力により、何とかVBAが完成しました。 一応問題なく動いてはいるのですが、処理速度がどうも遅いように感じられます。 画面の動きを見る限りでは、時間がかかっているのはデータの転記の部分のようです。 VBAの処理の概要は「コピー元ファイルのコピー元シートから、コピー先ファイルのコピー先シートへ、セルの内容を値でコピーする」というものです。 転記箇所はたった8箇所なのに、 1.コピー先ファイルをオープン 2.コピー先シートの一番下の空白行を探す 3.8箇所を次々に転記する …という一連の処理に、20秒近くかかってしまいます。 なぜでしょうか。 転記部分のソースはこのような作りです。 '(1)コピー元ファイルのコピー元シートをアクティブにし、コピー Windows("コピー元.xls").Activate Sheets("コピー元").Activate ActiveSheet.Range("B4").Select Selection.Copy '(2)ペースト(コピー先シート、セルは選択済み…だと思います) & アクティブセル移動 Windows("コピー先.xls").Activate Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=False ActiveCell.Offset(0, 4).Select Application.CutCopyMode = False なお2つのファイルはどちらもサーバ上の、同じフォルダの中にあります。 原因が思い当たる方、どうかよろしくお願いします。

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

  • ベストアンサー
  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.2

※ 高速化の基本 コピー元 A: Windows("コピー元.xls").Activate Sheets("コピー元").Range("B4").Copy B: Windows("コピー元.xls").Sheets("コピー元").Range("B4").Copy コピー先 C: Windows("コピー先.xls").Activate Selection.PasteSpecial Application.CutCopyMode = False D: コピー先を指定した方が可読性が高まる。 「Windows("コピー先.xls").Activate」だけでは、どのシートが開いているかが解らないので、コピーミスを生じる。 Windows("コピー先.xls").Sheets("コピー先").Range("B4").PasteSpecial コピーだけなら、一行で可能。 Windows("コピー元.xls").Sheets("コピー元").Range("B4").Copy Windows("コピー先.xls").Sheets("コピー先").Range("B4") ○ Activate/Select を多用すると速度低下。 ○ ActiveSheet/Selection も前行でシートや範囲が指定されていれば特に必要なし。 ○ サーバー上のファイルになると、転送時間や混雑状況から自分のPC内のファイルよりは時間が掛かるのは仕方ない。 ※コピーの例 'コピー先シートの一番下の空白行を探す Dim Line As Long Line = Windows("コピー先.xls").Sheets("コピー先").Range("A65536").End(xlUp).Row + 1 '次々に転記する With Windows("コピー元.xls").Sheets("コピー元") .Range("B4").Copy _ Windows("コピー先.xls").Sheets("コピー先").Range("A" & Line).Offset(0, 10) .Range("B6").Copy _ Windows("コピー先.xls").Sheets("コピー先").Range("A" & Line).Offset(0, 20) .Range("B8").Copy _ Windows("コピー先.xls").Sheets("コピー先").Range("A" & Line).Offset(0, 30) .Range("B10").Copy _ Windows("コピー先.xls").Sheets("コピー先").Range("A" & Line).Offset(0, 40) End With

bari_saku
質問者

お礼

こんにちは、ご回答ありがとうございます。 >サーバー上のファイルになると、転送時間や混雑状況から自分のPC内のファイルよりは時間が掛かるのは仕方ない。 これは私も考えましたが、いくら何でも20秒は長いですよね? そこですみません、質問です。 文末の「コピー先シートの一番下の空白行を探す」「次々に転記する」部分についてです。 1)参考書を引き引き、コードを読ませて頂きました。 その中で「Range("A" & Line).」の部分がどのような仕組みになっているのかがよくわかりません。 "A"とは列のことで、それとLineに格納してある数字を連結して、セルの場所を表しているのでしょうか? また、この作業ですが、ファイルの仕様上、空白行を探すキーとしているセル(列)は一番左ではありません。 ですがコピーするセルはA列からになっています。 その場合、Lineの取り扱いはこのままのコードで大丈夫でしょうか? 2)コピーは「値」で行いたいのですが、文末のコードの場合、それは反映されるでしょうか?

その他の回答 (5)

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.6

>Range("○")の○部分はどのように記述すればいいのでしょうか。 事前に今回の処理対象となる2つのブックが開かれているのが前提です。 #3 の uozakura203 さんのコードのように変数で保持しておくのがいいと思います。 ここで、変数の型についてですが、何のデータが代入されるか限定できない場合は Variant 型 になります。数値、、などと限定できるなら、それにあった型で宣言します。 また、変数を別々に 8 個宣言しても良いのですが、配列変数を使えば 1 回の宣言で OK ですし、コードがすっきりします。   Dim Buf(7) as Variant '配列変数で要素数は8個(0-7)   'データを配列変数に保持   With Workbooks("コピー元.xls").Sheets("コピー元")     Buf(0) = .Range("A1").Value     Buf(1) = .Range("E1").Value     Buf(2) = .Range("G1").Value     '(略)   End With   'データ転記   With Workbooks("コピー先.xls").Sheets("コピー先")     .Range("A1").Value = Buf(0)     .Range("E1").Value = Buf(1)     .Range("G1").Value = Buf(2)     '(略)   End With 余談ですが、Set ステートメントを使うと次のように書くことができます。ただ、処理スピードは上記に比べ劣るかもしれません。その一方で、コードの可読性は高まります。   Dim SH1 as Worksheet, SH2 as Worksheet   'オブジェクト変数にセット   Set SH1 = Workbooks("コピー元.xls").Sheets("コピー元")   Set SH2 = Workbooks("コピー先.xls").Sheets("コピー先")   '転記   SH1.Range("A1").Value = SH2.Range("A1").Value   SH1.Range("B1").Value = SH2.Range("B1").Value このような書き方でしたら、一々アクティブセルを移動させる必要はありませんよね。不要な Select や Activate などのオブジェクトへのアクセスをできるだけ減らすことで大分高速化できると思います。

bari_saku
質問者

お礼

こんばんは。お礼が遅くなりまして… お陰様で、ずいぶんと高速化することができました。 ファイルのオープンとクローズがあるので、あっという間に終了…とはいきませんが、懸案の部分は別物のように早く動いています。 いつもいつもお世話になっております。ありがとうございました。

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.5

>"A"とは列のことで、それとLineに格納してある数字を連結して、セルの場所を表しているのでしょうか? そうです。 Line=100 なら、Range("A100") と指定したのと同じ意味になります。 >ファイルの仕様上、空白行を探すキーとしているセル(列)は一番左ではありません。 指定するのは、"A65536" でも "Z65536" でも構いませんが、「誤りのない動作」をさせるためには、記入行として確定出来る列(基準)を選択するのが良いでしょう。 >コピーは「値」で行いたいのですが 式も入ってしまうので、シートの切り替えを行うと速度低下の原因になるので、#3さんのアドバイスのように「変数」に格納して仕舞えば良いでしょう。 ' F列基準で最終行取得 Line = Windows("コピー先.xls").Sheets("コピー先").Range("F65536").End(xlUp).Row + 1 ' A列基準でオフセット設定 With Windows("コピー先.xls").Sheets("コピー先").Range("A" & Line) .Offset(0, 0) = a1 .Offset(0, 12) = a2 .Offset(0, 15) = a3 End With

bari_saku
質問者

お礼

お礼が遅くなり、すみません。 あれから少しずつですが、変数もわかるようになってきてはいます。 一番最後の「A列基準でオフセット設定」は面白いですね。こんなシンプルな使い方もできるのですね。 何度も、どうもありがとうございました。

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.4

うーん、、ファイルのオープンに時間がかかっている気がしますが、、 他にも高速化のための方法がありますが、今回該当しそうな部分だけをとりあえず、補足いたします。 >「値でコピーしたい」場合、このソースでよろしいでしょうか? (2)-C をお読み下さい。値の貼り付けなら値を直接セルに書込んだ方が、クリップボードを経由するより高速なのは明らかです。#1 の popesyu さんのコードがこのことについて触れておられます。 (1) 変数の宣言をする   変数の宣言をおこなわずに変数を使うと、全てバリアント型という   一番メモリを消費する型で処理される。処理速度低下につながる。   適切な型で変数の宣言を行う。   Dim strSheetName as String   strSheetName = "Sheet1" (2) 何度もオブジェクトを呼びださない(重要)   オブジェクト(セルやシートなど)へのアクセスは時間がかかる。   A) With ステートメントや Set ステートメントを活用する。   Workbook("Book1.xls").Sheets("Sheet1").Range("A1").Value = 10   Workbook("Book1.xls").Sheets("Sheet1").Range("E1").Value = 50     ↓   With Workbook("Book1.xls").Sheets("Sheet1")     .Range("A1").Value = 10     .Range("E1").Value = 50   End With   または   Dim Sh as Worksheet   Set Sh = Workbook("Book1.xls").Sheets("Sheet1")   With Sh     ~   End With   B)Select や Activate をなるべくしない   Workbook("Book1.xls").Activate   Sheets("Sheet1").Activate   Range("A1").Activate   Selection.Copy     ↓   Workbook("Book1.xls").Sheets("Sheet1").Range("A1").Copy   C)値の貼り付けなら Copy しない   Range("A1").Copy   Range("E1").SpecialPaste Paste:=xlValues     ↓   Range("E1").Value = Range("A1").Value

bari_saku
質問者

お礼

ありがとうございます。 内容もさることながら、こんなに盛りだくさんな文章なのに、とても読みやすいですね。羨ましいです。 >うーん、、ファイルのオープンに時間がかかっている気がしますが、、 おそらくこの部分も関係していると思います。 ただ「ファイルをオープンするだけ」のVBAを作って実行してみたところ、待ち時間は何とか許容範囲内でしたので、今回はこの部分には手をつけないことにしました。 そしてさらにまたまた質問なのですが…すみません。 もしもう無理、ということでしたらどうか仰って下さい。 ■今回、最下段書いていただいた(c)の方法を使いたいと思います。 データの転記はファイルをまたいで行われますので、少なくともファイル名及びシート名から指定する必要があると思いますが、Range("○")の○部分はどのように記述すればいいのでしょうか。 最初は\でつなげればと考えましたが、それはファイル名の指定までなんじゃ、と思いまして… また、参考資料に「Rangeはアクティブファイルのみ有効」と書いてありました。 2つのファイルを同時にアクティブにすることはできるのでしょうか。 独学部分が多々あるため、とんでもなくピントのずれた質問でしたらすみません。 よろしくお願いいたします。

noname#109516
noname#109516
回答No.3

多分画面表示と、コピーに時間がかかっているのではないですか。 私なら3.の処理を次のようにします。 Windows("コピー元.xls").Activate a1=Sheets("コピー元").Cells(4,2).Value a2= a3= a8= と先ずコピーするセルの値を変数a1~a8に取得します。 Cells(y,x)はアドレスをR1C1形式で指定します。(R,C)です。 次に Workbook("コピー先.xls").Sheets("コピー先").Cells(コピー先1).Value=a1 Workbook("コピー先.xls").Sheets("コピー先").Cells(コピー先2).Value=a2 の要領でa8まで繰り返します。 これでそれなりに早くなると思いますが。 画面表示を変えず、セルをSelectせず処理をしています。

bari_saku
質問者

お礼

こんにちは、ご回答ありがとうございます。 R1C1形式、調べました。使ったことはありませんが、便利そうですね。 そしてまたまた質問が… 1)a1~a8は変数、ということでしょうか? もしその場合、最初に宣言が必要かと思われますが、データ型の種類は何が最適でしょうか? 2)他の方とかぶりますが、「値でコピーしたい」場合、このソースでよろしいでしょうか?

  • popesyu
  • ベストアンサー率36% (1782/4883)
回答No.1

そらまぁマクロの記録で作ったものそのままでは速度は期待できません。 例えばそのコードを下記のように修正するとか。 Workbooks("コピー先.xls").Worksheets("Sheet1").Range("a1") = Workbooks("コピー元.xls").Worksheets("Sheet1").Range("a1") A1のものをA1に写すだけの見本なので色々と工夫する必要はあるでしょうが。

bari_saku
質問者

お礼

早速のご回答、ありがとうございます。 >そらまぁマクロの記録で作ったものそのままでは速度は期待できません。 ばれましたか(笑) 初心者なもので、手書きと記録で作った部分が混在しています。 また、マクロの記録で作ったものはいくつかあるのですが、内容は似たようなものなのに、なぜか速度がバラバラで不思議だなと思っていました。 閑話休題、すみませんさらに質問です。 セルの内容は値で貼り付ける必要があるのですが、書いて頂いたコードはその仕様に対応しているでしょうか?

関連するQ&A

  • VBAの貼り付け機能で質問させていただきます。

    VBAの貼り付け機能で質問させていただきます。 あるブックのシート全体の内容をコピーして、 別のブックに貼り付ける処理を作成していますが、 コピー元のシートにある画像だけが貼り付けされずに困っています。 ホームページで探してやってみましたが、どれもうまくいきませんでした。 ご存じの方がいましたら、助言をお願いします。 下の記述で画像以外は貼り付けできています。 Sub 貼り付け() Worksheets("コピー元シート").Select Cells.Select Selection.Copy Workbooks.Open Filename:="C:¥コピー先.xls" Workbooks("コピー先.xls").Activate Worksheets("コピー先シート").Select Cells.Select Selection.PasteSpecial Paste:=xlPasteAll, _ Operation:=xlNone, SkipBlanks:= False, _ Transpose:=False End Sub

  • 【Excel VBA】 多くのファイルからのコピー貼り付け連続処理

    【やりたいこと】 アンケートを取った500個のxlsファイル(ファイル名は"001.xls"~"500.xls"まで、単純に規則的に数字が増えていく)があります。500個のファイルの中身(アンケートのフォーマット)は全て同じで、回答者の「答え」は"アンケート"というシートの"P6:S6"と"A70:AX70"という範囲に数列になって入っています。 この500個のファイルに対して、 (1)シートにはPassword付きの保護がかけてあるので、アンケート回答ファイルを開いたら保護を解除する (2)"アンケート"というシートの、ある範囲(回答部分の"P6:S6"と"A70:AX70")をコピーし、集計用の別ファイルへ貼り付けていく(×500人分) (3)集計用の別ファイルに貼り付けるときは、1人目の"P6:S6"範囲の貼り付け先は"D4"、"A70:AX70"の範囲の貼り付け先は"I4"で、2人目はそれぞれ"D5"と"I5"、3人目は"D6"と"I6"、・・・とずらしていきます。(コピー元のセルは同じで、コピー先のセルがずれていきます) (4)コピー貼り付けが終わったアンケート回答は、上書き保存をせずに終了する(再び保護がかかった状態に戻して終了する) という操作を行うマクロを組みたいのです。 【つまづいている現状・・・】 とりあえず1人目の分だけ記録したマクロは以下の通りです。力技でやろうとすれば、"001.xls"を001~500まで、"D4"と"I4"を4~503まで、ずっと書き変えていけばいいんだと思いますが・・・。500人分を簡単にスッキリとまとめることはできませんでしょうか? 何卒よろしくお願い致します。 -------------------------------------------------------------- Workbooks.Open Filename:="D:\AAA\001.xls" Sheets("アンケート").Select ActiveSheet.Unprotect Password:="1234" Range("P6:S6").Select Selection.Copy Windows("集計用ファイル.xls").Activate Range("D4").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Windows("001.xls").Activate ActiveWindow.SmallScroll Down:=8 Range("A70:AX70").Select Application.CutCopyMode = False Selection.Copy Windows("集計用ファイル.xls").Activate Range("I4").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Windows("001.xls").Activate Application.DisplayAlerts = False ActiveWindow.Close --------------------------------------------------------------

  • Excel VBA(マクロ)処理中の画面に”お待ち下さい”を表示させたい。

     Excel2002で帳票印刷の処理を作成しました。 該当ブック(自身.xls)オープンすると最初にVBAにより帳票レイアウトの初期化を行います。(原紙.xlsをオープンし、自身のシートに貼り付けます。)この初期化の貼り付け処理が"原紙"と"自身"のシートを交互にアクティブにしている為、画面がちらついて、とても見苦しい状態です。 Sub 帳票初期化()  Workbook.Open Filename="F:\原紙.xls"  Sheets("帳票1").Select  Cells.Select  Selection.Copy  Windows("自身.xls").Activate  Sheets("帳票1").Select  Cells.Select  ActiveSheet.Paste  Windows("原紙.xls").Activate  Sheets("帳票2").Select  Cells.Select  Selection.Copy  ・・・・・・・・・(以下同様処理を8帳票程)  Windows("原紙.xls").Activate  ActiveWindow.Close  Windows("自身.xls").Activate End Sub (動作確認済み。手打鍵にて誤コマンドご容赦) この処理を”お待ち下さい”画面等で実行中だけ見えない状態にする、又は画面より見えない形で行うにはどうすれば良いでしょうか。

  • Excel マクロでファイル名を変数に・・・

    初心者です。検索してもわからなかったので質問です。 下記のようなマクロの処理で「AAA」というファイル名のExcelに「2.xls」からデータをコピーし貼り付けています。    ・    ・ Windows("AAA.xls").Activate Rows("4:4").Select Selection.Insert Shift:=xlDown Windows("2.xls").Activate Range("C6").Select Selection.Copy Windows("AAA.xls").Activate Range("A4").Select ActiveSheet.Paste Windows("2.xls").Activate Range("C7").Select Application.CutCopyMode = False Selection.Copy    ・    ・ 今回は「2.xls」ではなく「3.xls」、「4.xls」、・・・といったように違うファイル名で同じ処理を行ないたいので「2」と指定するのではなく「(ファイル名).xls」といった形にしたいのですが、それは可能なのでしょうか。 ご意見宜しくお願いいたします。

  • Excel マクロ : マクロの記録の表記方法の変更

    Excelで質問です。 下記のようなマクロの記録を使用し「顧客一覧」のブックにデータを追加しています。 しかし、処理の中で一項目コピーするごとにファイルを行ったり来たりしているようで処理が遅いようです。何か解決策はあるのでしょうか? ・ ・ ・ Windows("顧客一覧.xls").Activate Rows("4:4").Select Selection.Insert Shift:=xlDown Windows("2.xls").Activate Range("C6").Select Selection.Copy Windows("顧客一覧.xls").Activate Range("A4").Select ActiveSheet.Paste Windows("2.xls").Activate Range("C7").Select Application.CutCopyMode = False Selection.Copy Windows("顧客一覧.xls").Activate Range("B4").Select ActiveSheet.Paste Windows("2.xls").Activate Range("C8").Select Application.CutCopyMode = False Selection.Copy   ・   ・

  • 繰り返しの処理でエラーが出てしまいます。

    以下のマクロを組んでいるのですが、実行するとある部分でエラー表示がされてしまいます 行おうと思っていることは、 (1)修理データブック内のセルをコピーして (2)修理報告書form内のセルにコピーすることを 繰り返そうとしています。 繰り返しをbだけで行うとエラーが表示されないのですがc=0のときは正常に動くのですが、c=1のとき(繰り返したとき)にエラーが表示されてしまいます。どうしたら解決するでしょうか? Private Sub 検索ボタン_Click() Workbooks.Open ("C:\Documents and Settings\デスクトップ\修理データブック.xls") Worksheets("修理データ").Range("A1").Activate Dim 検索セル As Range ''検索セルを探す処理 Set 検索セル = Columns(1).Find(what:=入力テキスト.Value, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlColumns, MatchByte:=False) If Not 検索セル Is Nothing Then 検索セル.Select For a = 1 To 15 ''繰り返し処理1 修理報告書のB4セルからB18セルまでを埋める処理 Selection.Copy Windows("修理報告書form.xls").Activate ''修理報告書formに貼りつけする処理 Worksheets("入力フォーム").Range("B3").Select Selection.Offset(a, 0).Select Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=False Application.CutCopyMode = False Windows("修理データブック.xls").Activate 検索セル.Select Selection.Offset(0, a).Select Next a For b = 15 To 19 Step 2 Range(ActiveCell, ActiveCell.Offset(0, 1)).Select Selection.Copy For c = 17 To 20 Windows("修理報告書form.xls").Activate Worksheets("入力フォーム").Range("B3").Select Selection.Offset(c, 0).Select Selection.PasteSpecial Paste:=xlValues ←この部分でエラーが表示されます Application.CutCopyMode = False Windows("修理データブック.xls").Activate 検索セル.Select Selection.Offset(0, b + 2).Select Next c, b どの様に回避したらよいのかを半日かけて考えたのですがどうにも分かりません。 どなたかご教授いただけますようお願いいたします

  • EXCEL VBA セルからファイル名を読み込む

    EXCEL VBAについての質問です 同じ処理を名前の違う複数のファイルで行いたいと思っています そこで、セルA2へファイル名の『○○.xls』○○部分だけをそれぞれのファイルに書き込んでおき、マクロは共通にしてファイル名をそれぞれのファイルから読み込んで実行したいと思っています。 良い方法を教えてください。 Workbooks("200809.csv").Activate Sheets("200809").Select Range("C3:C33").Copy Windows("○○.xls").Activate'←ここをファイルにあわせて変更できる形にしたい Sheets("報告書").Select Range("G5:G35").Select ActiveSheet.Paste Windows("200809.csv").Activate Range("K3:K33").Copy Windows("○○.xls").Activate’←ここ Sheets("報告書").Select Range("I5:I35").Select ActiveSheet.Paste Workbooks("200809.csv").Close SaveChanges:=False よろしくお願いします。

  • Excel vba selectが効かない

    2と3の2つのエクセルファイルがあります。縦の列を新しいファイルの横の行に コピーしていきたいプログラムです。 2のファイルの1シート目の"C8:C25" 3のファイルの1シート目の"C9:C65" を新しい1のファイルの1シート目の1行目にコピーするプログラムを 作っていますが1シート目はpasteされるのですが 3のファイル2シート目からselectの指定が"C9:C65"ではなく、B9からQ65の指定になってしまい思ったコピーができません(★のところ)、1シート目はうまくいっているのでどうして3のファイルの2シート目のからうまくいかないかわかりません。 5シートまででテストをしているのですが実際は各々255シートありもってくる列も 12列あります。とりあえずCの列だけ5シートで試してみています。 Dim i As Long Dim N As Long i = 1 N = 1 Do While i <= 5 ''C列''' Workbooks(2).Worksheets(i).Activate   '2のファイル Worksheets(i).Range("C8:C25").Select   'もってくるところ Selection.Copy Workbooks(1).Worksheets(1).Activate   '1新しいファイル Range("C" & N).Select   '貼り付けるところ Selection.PasteSpecial Paste:=xlPasteValues, operation:=xlNone, skipblanks:=False, Transpose:=True Workbooks(3).Worksheets(i).Activate   '3のファイル Workbooks(3).Worksheets(i).Range("C9:C65").Select  '★もってくるところ Selection.Copy Workbooks(1).Worksheets(1).Activate   '1新しいファイル Range("U" & N).Select   '貼り付けるところ Selection.PasteSpecial Paste:=xlPasteValues, operation:=xlNone, skipblanks:=False, Transpose:=True i=i+1 N=N+1 LOOP

  • エクセル2007VBAで新規ファイルを作る場合

    現在A社というファイルのsheet1に電気代と名前を付けたデータ、sheet2に ガス代という名前を付けたデータがあり電気代のブックからコピーして新規ファイルに貼り付けをしたいと思い下記のとおりマクロがありますが、新規ブックを開いた時常に1ではなく他に新規ブックを開いていたら2とか3になってしまいます。すると再度新規ブックに戻ってガス代を貼り付ける時2とか3tpか4とかでしたらエラーになってしまいます。 こういう場合どのように書いたら良いのでしょうか? それから最後に新規ファイルで名前を付けて保存のところまでダイアログ出すところまで 教えていただきたいのですが。 マクロ勉強始めたばかりでよろしくお願います。 Sub DGCopy() Cells.Select Selection.Copy Workbooks.Add Cells.Select ActiveSheet.Paste Sheets("Sheet1").Select Sheets("Sheet1").Name = "電気代" Windows("A社.xls").Activate Sheets("電気代").Select Cells.Select Application.CutCopyMode = False Selection.Copy Windows("Book1").Activate Sheets("Sheet2").Select Cells.Select ActiveSheet.Paste Sheets("Sheet2").Select Sheets("Sheet2").Name = "ガス代" Application.CutCopyMode = False End Sub

  • エクセルのマクロで繰り返し処理

    当方マクロ初心者ですが下記のマクロをCheckBox0~CheckBox23についてコピーするセルを変化させながら繰り返し処理を行いたいのですが、簡単なループ処理で行えますか? 教えていただければ幸いです。 If CheckBox0.Value = True Then Worksheets("sheets1").Activate  行 = Worksheets("sheets1").Range("e7")   行 = 行   Worksheets("sheets1").Range("g7:t7").Copy Windows("Books1.xls").Activate Sheets("sheets1").Select Range(Cells(行, 15), Cells(行, 15)).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Application.CutCopyMode = False End If

専門家に質問してみよう