

Sub ***出力(file, num)
Workbooks.Open (file)
Cells.Clear
Windows("xxx.xls").Activate
Sheets("***").Select
Range(num & "2:" & num & "2000").Select
Selection.Copy
Windows(file).Activate
Range("A1").PasteSpecial Paste:=xlPasteValues
End Sub
2行目から2000行目の中には計算値が入っています(結構ながい)。
その値を"file"に値のみペーストします。
しかし、処理が遅いので早くしたいです。
単純化できないでしょうか?
No.4ベストアンサー
- 回答日時:
こんばんは。
Wendy02です。>私の書いたものと全部違うのはなぜですか?
私の書いたものは、そのベースになっているものは、一つの決まったパターンがあるのですが、実は、私も、以前、同じように思いました。それも、実際にVBEでやっても、さっぱりわかりませんでした。それで、大村あつしさんの『Excel VBA』の本などでも調べました。他人の書いたものを自分で応用して使ってみてて、初めて分かるようになりました。
ただし、私の書いたものは、余計な部分がありますから、それは差し引いたほうが分かりやすいです。
>どこかおかしかったですか?
悪くはないですよ、絶対に! だって、マクロでちゃんと仕事が出来ているのですから!!
質問のコードでも、十分だと思います。私は、いつもは、同じような質問のコードがちゃんと出来ている人には、それ以上、望まなくてもよいからって、ふだんは、レスをつけないのです。
しかし、こういうときに、時々、ヘンな原則論を述べる人がいます。その一つに「Select」を使うなっていうのです。言っている人いないのであえて書きますが、なぜ、使わないほうがよいか説明しない限りは、単なる意味のない原則なんだと思います。
オブジェクトは「コンテナ」で扱う、という基本原則があるのですね。(それらを含めて、VBAの最適化、または「実行速度の最適化」と呼んでいます。)こういうのは、いろいろ試して、マクロが通るかどうか、それをちょっと試してみればよいのです。本当に、Select してアクティベート(Activate)するべきかは、最初の頃は、やってみなければ分からないことが多いものです。
例えば、以下でいうなら、繋げてみて、
Set rng = Workbooks("xxx.xls").Worksheets("***").Range(num & "2:" & num & "2000")
で、他のブックからでもマクロが通れば、使えるって分かります。
'私のマクロの場合は、開いていない場合は、開くようにさせています。
Workbooks.Open (file)
Cells.Clear
Windows("xxx.xls").Activate '←Activate の必要がない
Sheets("***").Select '←Select の必要がない
Range(num & "2:" & num & "2000").Select '←Select の必要がない
'Selection = Workbooks("xxx.xls").Worksheets("***").Range(num & "2:" & num & "2000")
'とまとめられるということです。
Selection.Copy
'当然、こちらも、Activesheet.Range("A1") ということになります。
Windows(file).Activate
Range("A1").PasteSpecial Paste:=xlPasteValues
でも、あれこれ試してみるのが面倒だなって思ったら、パターンをいくつか拾って、それで以って考えてみるのも一つの方法です。後は、ご自身で考えてみてください。ネットでは、人のコードの中心になる部分だけにポイントを置いて、知らなければメモっておけばよいと思います。そういうメモがやがて、数百、数千にもなれば、かなりなものになっているかと思います。千を越えるには、数年は掛かります。
諦めなければ、きっと上達します。
ありがとうございます。地道に努力あるのみですね。
でも、自分の場合は仕事で使うものではないので、
あとから見てわかる程度のコードにしておいた方が無難かなという感じはします。。。
まぁ、でもベタベタなコードは避けたいところですが。(わがままですいません。。。)
今回は詳しく(考え方なども含めて)教えていただいてありがとうございました。
No.3
- 回答日時:
#2の修正
Dim Moto As Worksheet 元のシート(開いたアクティブシート)
Dim Saki As Workbook 転送先のブック名
ここには、コメントアウトが抜けています。ヒラウチしたので、抜けてしまいました。すみません。
Dim Moto As Worksheet '元のシート(開いたアクティブシート)
Dim Saki As Workbook '転送先のブック名
No.2
- 回答日時:
こんばんは。
遅い速いは別として、私なりの書き方で書いてみました。
これが遅いかは、こちらでは分かりませんので、調べてみてください。
Sub OutPutCells(FileName As String, strCol As String)
Dim Moto As Worksheet 元のシート(開いたアクティブシート)
Dim Saki As Workbook 転送先のブック名
Set Moto = ActiveSheet
On Error GoTo ErrHandler
If Dir(FileName) = "" Then MsgBox "ファイルが存在していません。", 16: End
'ファイルが開いていれば、そのまま、そうでなければ、ファイルをオープン
Set Saki = Workbooks(FileName)
With Saki
With .Worksheets("Sheet1") '転送先のシート名
.Cells.Clear
.Range("A1").Resize(2000).Value = Moto.Range(strCol &"2").Resize(2000).Value
End With
End With
Set Moto = Nothing
Set Saki = Nothing
Exit Sub
ErrHandler:
'ブックオープン
Set Saki = Workbooks.Open(FileName)
Resume
End Sub
#1の回答の補足
>ファイルにつき「いち、に、さん」と数える感じですかね。
それは、人の感覚の問題なので、それは一種のパラドックスだと思います。じっと、シートを見つめている分には、0.5秒を越えると、遅いように感じますが、ほとんど自動化して手を掛けなければ、仮に、10分でも遅くは感じません。
ありがとうございます。参考にさせていただきます。
しかし、私の書いたものと全部違うのはなぜですか?
お察しのとおり、素人なものでマクロ自動記録をちょっといじった程度ですが、どこかおかしかったですか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) vbaのエラー対応(実行時エラー7:メモリが不足しています) 4 2023/04/24 00:20
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- Visual Basic(VBA) セルS2に入力した「月」と一致したB列の右隣へセルS110の値を転記する下記マクロを実行するとエラー 2 2022/12/06 17:32
- Visual Basic(VBA) vbaの構文の修正相談(xmlファイルを順に開いてコピペ作業) 1 2023/04/22 01:18
- Visual Basic(VBA) Excelのマクロについて教えてください。 1 2023/03/12 12:16
- Excel(エクセル) エクセルの自動更新のタイミングについて 1 2022/07/20 16:12
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/01/26 12:00
- Excel(エクセル) エクセルのマクロについて教えてください。 3 2023/02/07 14:47
- Visual Basic(VBA) エクセルVBA(実行時エラー438)の対処法を教えてもらえないでしょうか 3 2023/04/22 13:43
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/01/27 13:15
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルの関数 ENTERを押...
-
エクセルを共有するとPCによっ...
-
VBAでブックを非表示で開いて処...
-
同じフォルダへのハイパーリン...
-
別ブックから入力規則でリスト...
-
WorkBooksをオープンさせずにシ...
-
Excelファイルをダブルクリック...
-
エクセルファイルを開かずにpdf...
-
Excelで指定範囲のデータ...
-
Excelでブックの共有を掛けると...
-
エクセルで参照しているデータ...
-
エクセルでウィンドウの枠固定...
-
VBA バックグラウンドで別ブッ...
-
Excelで複数ブックの同一セルに...
-
「ブックの共有」を有効にして...
-
フォルダ内の複数ファイルから...
-
Excel(2010)のフィルターが保...
-
エクセルで別ブックをバックグ...
-
Excel VBA セルと同じ名前のブ...
-
Excelで拡張子の後に数字が……何...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【マクロ】アクティブセルの時...
-
Excelの新しい空白のブックを開...
-
VBAでブックを非表示で開いて処...
-
エクセルの関数 ENTERを押...
-
エクセルを共有するとPCによっ...
-
Excelファイルをダブルクリック...
-
WorkBooksをオープンさせずにシ...
-
Excelでブックの共有を掛けると...
-
エクセルで参照しているデータ...
-
Excel(2010)のフィルターが保...
-
Excelの警告について
-
Excelで複数ブックの同一セルに...
-
フォルダ内の複数ファイルから...
-
同じフォルダへのハイパーリン...
-
エクセルにおける,「ブック」...
-
別ブックから入力規則でリスト...
-
エクセルで別ブックをバックグ...
-
エクセルでウィンドウの枠固定...
-
エクセルファイルを開かずにpdf...
-
「ブックの共有」を有効にして...
おすすめ情報