• 締切済み

EXCEL VBA

まことに幼稚な質問で申し訳ないが、バックに合って困っています。 どなたか教えていただけませんか?PCの先生はソフトのバグ!ではないかと云っています。 QT Sub データを作業場に1A() Sheets("データ").Select Range("A1:AB2000").Select  Selection.Copy  Sheets("作業場").Select  Range("A1").Select  ActiveSheet.Paste End Sub UQT Selection.Copyのところで”アプリケーション、オブジェクト等の定義エラーとでます。目を皿のようにしても虫はいないと思いますが? SELECTION.CUTの場合は問題ないのですが! 以上よろしくお願いします。  

みんなの回答

  • hotosys
  • ベストアンサー率67% (97/143)
回答No.3

No.1です。 基本的にモジュールはどこに書いてもいいのですが、例えば電話番号を考えてみてください。 東京都にいる場合は、03-1234-5678と1234-5678は同じですが、大阪からの場合は03-1234-5678と1234-5678は別の番号になります。 シートのモジュールも同じで、同じシートだけで処理する場合はシートの指定は不要です。 Sheet1でシートの指定の無いRangeやCellはSheets("Sheet1").Range()やSheets("Sheet1").Cells()と指定したものとみなされます。 標準モジュール部の場合は今アクティブなシートのrangeやcellsを指定したとみなされ、ActiveSheet.Range()やActiveSheet.Cells()と指定したものとみなされます。 なので、 Sub データを作業場に1A() Sheets("データ").Select Range("A1:AB2000").Select  Selection.Copy  Sheets("作業場").Select  Range("A1").Select  ActiveSheet.Paste End Sub が標準モジュール部にある場合は、 Sub データを作業場に1A() Sheets("データ").Select Sheets("データ").Range("A1:AB2000").Select  Selection.Copy  Sheets("作業場").Select  Sheets("作業場").Range("A1").Select  ActiveSheet.Paste End Sub と言う意味になりますが、"データ"シートにあった場合は Sub データを作業場に1A() Sheets("データ").Select Sheets("データ").Range("A1:AB2000").Select  Selection.Copy  Sheets("作業場").Select  Sheets("データ").Range("A1").Select'<==ここでエラーになる。  ActiveSheet.Paste End Sub とエラーになります。 RangeやCellsの.selectはアクティブなシートに対してのみ有効だからです。 シートのモジュール部にあった場合は Sub データを作業場に1A() Sheets("データ").Select Sheets("データ").Range("A1:AB2000").Select Selection.Copy Sheets("作業場").Select Sheets("作業場").Range("A1").Select ActiveSheet.Paste End Sub としなければなりません。 たとえれば、携帯電話のように必ず市外局番から指定すれば間違いないと思います。 なので質問のプログラムは場所によってエラーになると思うのです。 逆にSelectしなければエラーにならないので、 Sub データを作業場に1A() Sheets("データ").Range("A1:AB2000").Copy Sheets("作業場").Range("A1") End Sub で済みます。 Rangeだけの場合は標準シートではActive(Selectした)シートで、シートのモジュールではそのシートに対してという意味になります。 例えば、標準モジュールにある Sub sample() Sheets("Sheet1").Select Columns("A:A").Select Selection.Sort Key1:=Range("A1") End Sub をSheet2で行う場合は Sub sample() Sheets("Sheet1").Select Sheets("Sheet1").Columns("A:A").Select Selection.Sort Key1:=Sheets("Sheet1").Range("A1") End Sub または Sub sample() Sheets("Sheet1").Columns("A:A").Sort Key1:=Sheets("Sheet1").Range("A1") End Sub にしないとエラーになると思います。 特にKey1もSheets("Sheet1").Range("A1")と指定しないとエラーになるのに注意が必要です。 また、標準モジュールでもシートモジュールでも Range(Cells(??),Cells(??)) などでシート指定する場合は Sheets("Sheet名").Range(Sheets("Sheet名").Cells(??),Sheets("Sheet名").Cells(??)) にしないとエラーになる場合があると思います。 結局、標準モジュールでもシートのモジュールでも今アクティブなシートと、どのシートに対する命令かを明確にすれば問題ないと思います。 ただし、1シートしか使わないのにシート指定するのは間違いではないと思いますが、汎用性が無くなったり、分かりにくくなったりすると思います。

msdankan
質問者

お礼

hotsysさん ありがとうございます。 本屋でこの説明が出ている参考書をみつけたらこの項目で 購買価値あり、他はどうでもう良い気分です。 ほんとに助かりました。 こんごともよろしくお願いします。

全文を見る
すると、全ての回答が全文表示されます。
  • end-u
  • ベストアンサー率79% (496/625)
回答No.2

同じ動作をSelectせずに実行するコードです。 Sub test()   Sheets("データ").Range("A1:AB2000").Copy Sheets("作業場").Range("A1") End Sub こちらもエラーが出ますか? その場合、(念の為)VBE(VisualBasicEditor)のメニュー[ツール]-[参照設定]で 参照不可: となっているライブラリはありませんか? また、新規Bookに"データ"と"作業場"のシート、そのコードだけ作成して実行してみてください。 エラーなく実行できたとして、 新規Bookにデータやコードをコピーして新たに作り直す事が可能なら、作成し直したほうが近道かも。

msdankan
質問者

お礼

ありがとうございます。 testでそのままうまく行きました。これでかなりの処理がスムーズにいくのではないかと思われます。 それにしても色々な書き方があるものですね。 今後ともよろしくお願いします。

msdankan
質問者

補足

今見ていましたが、参照可能なライブラリファイル5点にチェックが入っていますが、他に参照不能?は見あたりません(具体的にどのように表記されているのか分かりませんが)。 小生の行っている処理に問題があるのでしょうか? ロータスの場合は比較的に簡単なせいか一度問題なければそのまま永遠にOKとなるのですが、今まで問題なく出来ていたソートマクロも定義云々でエラーとなりました。だんだん時間もなくなり困惑しています。 初歩的な質問で申し訳ないが、なにせ七十のなんとかでエクセルは今回初めてで走りながら処理が出来れば良いとの感覚で本を読みながら良いとこ取りで手探りで行っています。 なにか根本的な理解不足があるのでしょうか? 出来うればご教授お願いします。 以上よろしくお願いします。

全文を見る
すると、全ての回答が全文表示されます。
  • hotosys
  • ベストアンサー率67% (97/143)
回答No.1

Selection.Copyの場所でエラーが起こるという事ですが、ここで起こるはずはないので違うかもしれませんが、このプログラムは標準モジュール部に無いとエラーが起こると思いますが、"データ"または"作業場"またはその他のシートのモジュール部にあったりしませんか?

msdankan
質問者

お礼

ありがとうございます。 小生にはそこまで理解できません。次回PC教室で聞いてみたいと思います。 こんごともよろしくお願いします。

msdankan
質問者

補足

初歩的な質問で申し訳ないが、現在行っている事務処理のマクロは必要に応じて新しいBOOKにデータを写し込みそのままマクロを書き入れて行っています。もしくは既存のブックを変名して進化させています。従ってデータのシートのモジュール部(?)で作成していると思うのですが、標準モジュール部は解説書では散見するのですが、実際にその使い方の理由が分からずにいるのが実状です。ロータスは経験あるのですが、なにせ七十のなんとかでエクセルは今回初めてで走りながら処理が出来れば良いとの感覚で本を読みながら良いとこ取りで手探りで行っています。 なにか根本的な理解不足があるのでしょうか? 出来うればご教授お願いします。 先ほども今まで問題なく出来ていたソートマクロも定義云々でエラーとなりました。だんだん時間もなくなり困惑しています。 長々と書きましたが以上よろしくお願いします。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • エクセル VBA 繰り返し コピー貼り付け

    以下を繰り返し作業をOffsetを使用して行いたいのですがどうすればいいでしょうか? Sheets("Sheet1").Select Range("A1:C1").Select のA1:C1以下へA1000:C1000ぐらいあります。 Sheets("Sheet2").Select Range("G1").Select は貼り付けたセル3つの数字の組み合わせで公式に使う計算期間がまちまちですので公式を張り付けたり出来ません。 D1の解を heets("Sheet1").Select Range("D1").Select に貼り付けてA1:C1以下1000までの結果を評価出来るようにしたいのですが! ' Macro1 Macro Sheets("Sheet1").Select Range("A1:C1").Select Selection.Copy Sheets("Sheet2").Select Range("D1").Select ActiveSheet.Paste Range("G1").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet1").Select Range("D1").Select ActiveSheet.Paste Range("A2:C2").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet2").Select Range("D1").Select ActiveSheet.Paste Range("G1").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet1").Select Range("D2").Select ActiveSheet.Paste Range("A3:C3").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet2").Select Range("D1").Select ActiveSheet.Paste Range("G1").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet1").Select Range("D3").Select ActiveSheet.Paste End Sub よろしくおねがいします。

  • EXCELのVBAについて

    マクロのボタンで内容を削除する様に設定した所、 Dim re As Integer Sheets("投入シート").Select re = MsgBox("入力データをクリアします。" & vbCrLf & vbCrLf & "よろしいですか?", vbOKCancel, "クリア確認") If re <> vbCancel Then Sheets("投入シート").Select ActiveSheet.Unprotect Range("a1:c30").Select Selection.Copy Application.CutCopyMode = False Selection.Copy Sheets("work").Select Range("A1").Select ActiveSheet.Paste Sheets("投入シート").Select ActiveSheet.Unprotect Range("c4:c30").Select Selection.ClearContents Range("f31").Select Selection.Copy Range("c9").Select ActiveSheet.Paste Range("f33").Select Selection.Copy Range("c11").Select ActiveSheet.Paste Range("f32").Select Application.CutCopyMode = False Selection.Copy Range("c14").Select ActiveSheet.Paste Range("c4").Select Application.CutCopyMode = False 'ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True End If Sheets("投入シート").Select Range("c4").Select End Sub この様に入力したのですがセルのC11の計算式だけセル番号が消えてしまいます。 どうしてでしょうか?ご指導をお願いします。

  • エクセル2007マクロ シート間のセルコピー

    [Sheet1]にあるデータを[Sheet2]にコピーするマクロボタンを[Sheet2]に作りたいのですが、マクロがよく分からないので、「マクロの記録」で作成してみました。 Sub siken() ' ' siken Macro ' ' Sheets("Sheet1").Select Range("A1").Select Selection.Copy Sheets("Sheet2").Select Range("A1").Select ActiveSheet.Paste Sheets("Sheet1").Select Range("B3").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet2").Select Range("B3").Select ActiveSheet.Paste Sheets("Sheet1").Select Range("B6:D6").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet2").Select Range("B6").Select ActiveSheet.Paste End Sub (実際はもっと多くのセルをコピーします) マクロを実行すると、ちゃんとコピーできるのですが、セルをコピーする都度[Sheet1]と[Sheet2]が交互に表示されます。 コピー元の[Sheet1]を表示させずにマクロを実行させるにはどのようにしたらよいのでしょうか? よろしくお願いします。

  • EXCELのVBAを実行したら止まってしまいます。。。

    お世話になります。 下記のマクロを作ってみたのですが、シート「読込」にコピーされたところまで確認できるのですが、その後マウスが砂時計になって、動かなくなってしまいます。オートフィルタを解除する部分を削って実行してみましたが、同じところで止まりますので、貼付のところに問題があるようなのですが、何がいけないのでしょうか? また、なんかもっとスマートなプログラムになりませんでしょうか? 宜しくお願いします。 Sub test() Sheets("Normal").Select Range("A2").Select Selection.AutoFilter Field:=1, Criteria1:=Sheets("読込").Range("B2"), _ Operator:=xlAnd, Criteria2:=Sheets("読込").Range("C2") Selection.SpecialCells(xlVisible).Copy Sheets("読込").Select Range("C3").Select ActiveSheet.Paste Sheets("Normal").Select Application.CutCopyMode = False ActiveSheet.ShowAllData Selection.AutoFilter End Sub

  • エクセルマクロVBAについて

    エクセルマクロVBAについて、こんなこと出来ますか? ■A列からAS列の1行目にヘッダー情報をもつデータベース ■A列に担当者名 ■A列にオートフィルタをかけて各担当ごとにデータを抽出したものを別シートに貼り付けて自動印刷したい ■担当者は都度変わるので、Criteria1:="xxx"というようには直接書けない(担当名を自動で抽出したい) ■担当者の数も都度変わる ■補足 一行のデータを特定の雛形に転記する必要があるので別シートに出したいです ちなみに、アナログで記録したコードは以下です。 Sub test1() Sheets("データ抽出シート").Select ActiveSheet.Range("$A$1:$AS$300").AutoFilter Field:=1, Criteria1:="山田" Range("$A$1:$AS$300").Select Selection.Copy Sheets("抽出データ貼付シート").Select Range("A1").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False ActiveWindow.SelectedSheets.PrintOut Copies:=1 Sheets("データ抽出シート").Select ActiveSheet.Range("$A$1:$AS$300").AutoFilter Field:=1, Criteria1:="斉藤" Range("$A$1:$AS$300").Select Selection.Copy Sheets("抽出データ貼付シート").Select Range("A1").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False ActiveWindow.SelectedSheets.PrintOut Copies:=1 Sheets("データ抽出シート").Select ActiveSheet.Range("$A$1:$AS$300").AutoFilter Field:=1, Criteria1:="田中" Range("$A$1:$AS$300").Select Selection.Copy Sheets("抽出データ貼付シート").Select Range("A1").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False ActiveWindow.SelectedSheets.PrintOut Copies:=1 End Sub これ、担当者の抽出を自動でなんとかなりませんか?

  • ExcelのVBAでできますか?

    こんにちは。 項目1 項目2 あ a1 あ a2 あ a3 あ a4 い b1 い b2 い b3 い b4 い b5 い b6 い b7 というデータがあり、これを別シートに 項目1 項目2 項目3 項目4 項目5 項目6 項目7 項目8 あ a1 a2 a3 a4 い b1 b2 b3 b4 b5 b6 b7 と表示させたいです。 が、VB初心者なので「あ」のところまでしかできませんでした。 実際のデータは「い」から下もずーっとあるので変数などを使わなくてはいけないのでしょうが、よくわかりません。 どうしたらうまくいくでしょうか? ここまで自分でやってみました。 Range("A2").Select Selection.AutoFilter Selection.AutoFilter Field:=1, Criteria1:="あ" Range("A2").Select Selection.Copy Sheets.Add ActiveSheet.Paste Sheets("Sheet1").Select Range("B2:B15").Select Application.CutCopyMode = False Selection.Copy Sheets(1).Select Range("B1").Select Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=True

  • vba 順次記録 

    下記のマクロはツール、マクロ、新しいマクロの記録で作成しました。 順序はa1に ”=RSS|'3315.T'!現在値” 最初から入力しておきます。 1回目a1に楽天のマーケットスピード  (MS) より数字が入力されます a1に入力したすうじをa5とa6にコピーします。 2回目 MS より次の入力が入ります。 a1に入力したすうじをa5にコピーします。 a5,a6 を a6,a7 にコピーします。 3回目 MS より次の入力が入ります。 a1に入力したすうじをa5にコピーします。 a5,a6,a7 を a6,a7,a8 にコピーします。 4回目 MS より次の入力が入ります。 a1に入力したすうじをa5にコピーします。 a5,a6,a7,a8 を a6,a7,a8,a9 にコピーします。 n回目 MS より次の入力が入ります。 a1に入力したすうじをa5にコピーします。 a5,a6,a7,a8,-----a? を a6,a7,a8,a9,-----a? にコピーします。 以後入力有り次第 繰り返し続けて記録したいのです。 下記のマクロはa列に記録ですがb、c、d、と4箇所形式は同じですがデータの違いのが有るのですが a,b,c,d,列入力順序がばらばらなのです a列のみでもお願いします。 Sub M3() Range("A1").Select Selection.Copy Range("A5").Select ActiveSheet.Paste Application.CutCopyMode = False Selection.Copy Range("A5:A6").Select ActiveSheet.Paste Application.CutCopyMode = False Range("A5").Select Range("A1").Select Selection.Copy Range("A5").Select ActiveSheet.Paste Application.CutCopyMode = False Range("A5:A6").Select Selection.Copy Range("A6").Select ActiveSheet.Paste Range("A1").Select Selection.Copy Range("A5").Select ActiveSheet.Paste Application.CutCopyMode = False Range("A5:A7").Select Selection.Copy Range("A6").Select ActiveSheet.Paste Range("A5").Select Range("A1").Select Selection.Copy Range("A5").Select ActiveSheet.Paste Application.CutCopyMode = False Range("A5:A8").Select Selection.Copy Range("A6").Select ActiveSheet.Paste Range("A5").Select Range("A1").Select Selection.Copy Range("A5").Select ActiveSheet.Paste Application.CutCopyMode = False Range("A5:A9").Select Selection.Copy Range("A6").Select ActiveSheet.Paste Range("A5").Select Range("A1").Select Selection.Copy Range("A5").Select ActiveSheet.Paste Application.CutCopyMode = False Range("A5:A10").Select Selection.Copy Range("A6").Select ActiveSheet.Paste Range("A5").Select End Sub

  • マクロでシート2~6のデータをシート1に転記したい

    マクロでシート2~6のデータをシート1に転記したいです。 シート2~6のデータを シート1に順番に転記したくてマクロの記録を利用して作成しました。 シート2~6は列は同じですが行数は異なります。 また行数は作業の都度異なります。 同じ記述が繰り返されているので もう少し記述が短くできるのではと思うのですが どうすればいいでしょうか? Sub データ更新() 'シート1の前回データをクリア Sheets("シート1").Select Range("A2:Q2").Select Range(Selection, Selection.End(xlDown)).Select Range(Selection, Selection.End(xlDown)).Select Selection.ClearContents Range("A2").Select Sheets("シート1").Select Range("A1").Select Sheets("シート2").Select Range("A1").Select 'ヘッダーも合わせて取得 Range(Selection, Selection.End(xlToRight)).Select Range(Selection, Selection.End(xlDown)).Select Selection.Copy Sheets("シート1").Select ActiveSheet.Paste Application.CutCopyMode = False Selection.End(xlDown).Select Selection.Offset(1, 0).Select Sheets("シート3").Select Range("A2").Select 'データのみ取得 Range(Selection, Selection.End(xlToRight)).Select Range(Selection, Selection.End(xlDown)).Select Selection.Copy Sheets("シート1").Select ActiveSheet.Paste Application.CutCopyMode = False Selection.End(xlDown).Select Selection.Offset(1, 0).Select Sheets("シート4").Select Range("A2").Select Range(Selection, Selection.End(xlToRight)).Select Range(Selection, Selection.End(xlDown)).Select Selection.Copy Sheets("シート1").Select ActiveSheet.Paste Application.CutCopyMode = False Selection.End(xlDown).Select Selection.Offset(1, 0).Select Sheets("シート5").Select Range("A2").Select Range(Selection, Selection.End(xlToRight)).Select Range(Selection, Selection.End(xlDown)).Select Selection.Copy Sheets("シート1").Select ActiveSheet.Paste Application.CutCopyMode = False Selection.End(xlDown).Select Selection.Offset(1, 0).Select Sheets("シート6").Select Range("A2").Select Range(Selection, Selection.End(xlToRight)).Select Range(Selection, Selection.End(xlDown)).Select Selection.Copy Sheets("シート1").Select ActiveSheet.Paste Application.CutCopyMode = False Selection.End(xlDown).Select Selection.Offset(1, 0).Select End Sub

  • エクセルのマクロで各Sheetのデータを複数コピー&ペーストしたいです

    エクセルのマクロで各Sheetのデータを複数コピー&ペーストしたいです 1つのエクセルファイルの中に複数のSheetがあります。 各Sheetの4行目以降(5行目から)にデータのあるA列~O列をコピーしていって、 挿入-ワークシート(Sheet1という名前で構わない)に全てを順番にコピーしていきたいです。 ”新しいマクロの記録”で下記のように作成したのですが、  ・5行目からデータのあるA列~O列をコピーしていく   ・存在する全てのSheetから上記の作業をする というマクロの書き方が分かりません。 恐れ入りますがお時間ある方で上記の内容をご理解頂ける方がいましたらアドバイス頂ければ非常に助かります。 Sub Macro1() Sheets.Add Sheets("ER10(zy)").Select Rows("5:8").Select Selection.Copy Sheets("Sheet1").Select ActiveSheet.Paste Sheets("ER10(cx)").Select Rows("5:9").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet1").Select Range("A5").Select ActiveSheet.Paste Sheets("ER10(zht)").Select Rows("5:13").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet1").Select Range("A10").Select ActiveSheet.Paste End Sub

  • エクセルのマクロで各Sheetのデータを複数コピー&ペーストしたいです

    エクセルのマクロで各Sheetのデータを複数コピー&ペーストしたいです 1つのエクセルファイルの中に複数のSheetがあります。 各Sheetの4行目以降(5行目から)にデータのあるA列~O列をコピーしていって、 挿入-ワークシート(Sheet1という名前で構わない)に全てを順番にコピーしていきたいです。 ”新しいマクロの記録”で下記のように作成したのですが、  ・5行目からデータのあるA列~O列をコピーしていく   ・存在する全てのSheetから上記の作業をする というマクロの書き方が分かりません。 恐れ入りますがお時間ある方で上記の内容をご理解頂ける方がいましたらアドバイス頂ければ非常に助かります。 Sub Macro1() Sheets.Add Sheets("ER10(zy)").Select Rows("5:8").Select Selection.Copy Sheets("Sheet1").Select ActiveSheet.Paste Sheets("ER10(cx)").Select Rows("5:9").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet1").Select Range("A5").Select ActiveSheet.Paste Sheets("ER10(zht)").Select Rows("5:13").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet1").Select Range("A10").Select ActiveSheet.Paste End Sub