エクセルのマクロを作っています。
しかし、コマンドボタンを作って記述しても、エラー(実行時エラー'1004' copyメソッドが失敗しました)が出ます。マイクロソフトのHPのQ&Aを参照してみましたが、それでもうまく動きません。
その他、コンボボックスなども使ってみたいのですが、どうすればボタンを押せば特定の操作が出来るようになるのでしょうか?
ちなみに、実行させる内容は、セルのコピーと、データの追加にしたがって、新しいデータに対して自動で新しい番号を割り付ける、この程度です。
大変困っています。
どなたか教えてください。
差し支えなければ、列単位、行単位、セル単位のコピーや、自動で番号を割り付ける簡単なマクロの記述を添えていただけますと、ありがたく存じます。
なにとぞよろしくおねがいします。
No.6ベストアンサー
- 回答日時:
#2です。
すでに皆さんが書かれている通りですね。
Private Sub CommandButton2_Click()
Sheets("原因").Select
Columns("D:E").Copy
Sheets("結果").Select
Range("E1").Select
Selection.PasteSpecial Paste:=xlPasteValues
End Sub
とすると、結果シートの D:E列 が E:F列 にコピーされるのが解かります。
VBAヘルプで「シートで ActiveX コントロールを使用する」を引くと「ActiveX コントロールをアクティブにすると、使用できなくなる Visual Basic のメソッドやプロパティがあります。」という一文がありますので、標準モジュールとの違いはそのあたりなのかなと個人的には思っています。
ActiveX コントロール関連でエラーが出る場合は、とりあえず明示的にシートを指定してみるのが良いかと思います。
Sheets("原因").Columns("D:E").Select
ちなみに私も#5さんと同じように書きます。
Private Sub CommandButton2_Click()
Worksheets("原因").Columns("D:E").Copy
Worksheets("結果"). _
Range("E1").PasteSpecial xlPasteValues
Application.CutCopyMode = False
End Sub
xlPasteValues を使っている事から今回のケースには当てはまらないと思いますが、参照計算式が無いならこんな感じでも良いと思います。
Private Sub CommandButton2_Click()
Worksheets("原因").Columns("D:E").Copy _
Destination:=Worksheets("結果").Range("E1")
End Sub
なんどもお世話になります。
ご教示いただいたプログラム、両方とも問題なく作動しました。^^
やはり、プログラムの行数が少ないほど速いような気がします。
単純にコピーして、そのコピーしたものを計算するので、後者のプログラムが適当かもしれません。
しかし、こんなに書き方があるとは。。。
VBAヘルプのくだりですが、個人的にはマイクロソフトに対して、使えなくなるメソッドやプロパティは無くして全部使えるようにしてくれよ、って思ってしまいました。(笑
懇切丁寧なご説明、どうもありがとうございました。
No.7
- 回答日時:
>同じ作業をこなすのに、2つ(それ以上?)の書き方が存在するというのは、全く予想外でした。
そうですね。本当にいろいろな書き方があります。
今回の質問も値のコピーという事だと、
Worksheets("結果").Range("E:F").Value = Worksheets("原因").Columns("D:E").Value
のような書き方もできます。(Copy・Pasteより遅いみたいですけど)
Range("E:F")とColumns("E:F")どちらでも可
セル単位なら
Worksheets("結果").Range("E1").Value = Worksheets("原因").Cells(1,"E").Value
RangeとCellsと書き方があります。
>taisuke555さんのプログラムの方が若干速いようでした。
selectは選択するという1つの命令ですから、
省けばその分速くなると思います。
後、コンボボックスの使い方と
自動で番号を振るマクロ
についての質問もあるみたいですが、
もう少し具体的にあげないと、回答しにくいと思います。
(何をどのタイミングでどこにどうしたいのか等)
何度もありがとうございます。
自動的に番号(新しい)を振るプログラムですが、以下の記述で出来ました。
Private Sub CommandButton1_Click()
Dim qwea As Integer
qwea = Range("B2") + 4
qweb = qwea - 1
Sheets("原因").Range("B4:B10").Copy
’ここから、行と列を入れ替えて、新しいデータ行にコピーする命令です。
Sheets("結果").Cells(qwea, 1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=True
Sheets("結果").Range(Cells(qweb, 6), Cells(qweb, 8)).Copy
’ここから、新しく出来たデータ行に、所定のセル(計算式)をコピーする命令です。
Sheets("結果").Cells(qwea, 6).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
’ここから、新しく出来たデータ行に、最新の番号を割り振る命令です。
Sheets("結果").Cells(qwea, 2).Select
Cells(qwea, 2) = qwea - 3
End Sub
コンボボックスの使い方ですが、具体的には、ある計算をさせるのに、3通りのデータがあり、グラフを表示させるのに、5通りのデータがあるのですが、それらをBOXで選択したい、という希望です。
自分で一度書いてみませんと、質問にならない気がしますので、一回書いてみます。
その節はまたご指導お願いします。
ほんとにどうもありがとうございました。
No.5
- 回答日時:
#4さんと同じ事ですが、
標準モジュールの
Columns("D:E").Select
Range("E1").Select
は、シート名が省略されています。
この場合、省略されているシートはアクティブシートになります。
「結果」のシートに移動した場合、
上記の省略されているシートは「結果」シートになります。
「原因」シートをアクティブにしたのに、
「結果」シートのD:Eセルを選択しようとしているので
エラーになっていると思います。
ActiveSheet.Columns("D:E").Select や
workbooks("原因").Columns("D:E").Select
にしてもいいですけど、私は
Private Sub CommandButton2_Click()
Sheets("原因").Columns("D:E").Copy
Sheets("結果").Range("E1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End Sub
のようにSelectを書かない書き方をします。
目からウロコです。
同じ作業をこなすのに、2つ(それ以上?)の書き方が存在するというのは、全く予想外でした。
もちろん、taisuke555さんのプログラムも問題無く動きました。^^
速さでは、プログラムが短いからなのか?、taisuke555さんのプログラムの方が若干速いようでした。
アクティブシートの扱いですが、標準モジュール式?の文法ではちゃんと動いていた文法なのですが、指定の方法が異なることがわかりました。
ほんとに助かりました。
どうもありがとうございました。
No.4
- 回答日時:
今日は
これは、標準モジュールに書いたマクロと、イベントに書いたマクロで、文法が違うのが原因だと思われます。
例えば、gotetsuさんの書かれた、マクロを標準モジュールに移すと、うまく実行できます。
Sub aaa()
Sheets("原因").Select
Columns("D:E").Select
Selection.Copy
Sheets("結果").Select
Range("E1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End Sub
しかし、イベントに書くと、次のようにしないと、うまく動きませんでした。
Private Sub Worksheet_Change(ByVal Target As Range)
Sheets("原因").Select
Sheets("原因").Columns("D:E").Select
Selection.Copy
Sheets("結果").Select
Sheets("結果").Range("E1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End Sub
どうもありがとうございます。
ki-aaaさんのおっしゃるとおり、私が記したものは、標準マクロで書いたものといいましょうか、自動マクロで書いたものをコピーしたものなんです。
違う文法というか単語を用いる必要がある、という発想が全くなかったので、困っていました。
記述いただいたプログラムで問題なく動きました。^^
大変助かりました。
どうもありがとうございました。
No.3
- 回答日時:
少々修正して下記で動きました。
Private Sub CommandButton1_Click()
Sheets("sheet1").Select
Columns("D:E").Select
Selection.Copy
Sheets("sheet2").Activate
ActiveSheet.Range("E1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End Sub
Pasteが「Activesheet」!に対して行われるってことらしいが、判り難い点です。大村あつしさんの本には解説してあったように記憶します。何度も失敗した経験があります。
Sheet1-->Sheet2のセル間の代入でコピー(メソッド)を避けたこともあります。
http://www.asahi-net.or.jp/~ZN3Y-NGI/YNxv99114.h …
ActiveSheet.Pasteと覚えることです。そしてその直前に
「どのSheetに貼りつけたいのか」、「スタートポイントはどこか」を記述するようにしては。
「スタートポイント(セル・列など)はどこか」を記述する方法も気をつけて。
Sub test02()
Range("D:D,E:E").Copy
Sheets("Sheet2").Activate
Sheets("Sheet2").Columns("B:B").Select
ActiveSheet.Paste
End Sub
早々にご回答ありがとうございます。
同じシート間でコピーするには有効でした。^^
違うシートへコピーするには、
自分なりに工夫してみたのですが出来ませんでした。
ご紹介いただいたアドレスは、今後参考になりそうな内容ですので、読み込んで理解したいと思います。
貴重なアドバイス、どうもありがとうございました。
No.2
- 回答日時:
「マクロでエラーが出ます。
何が悪いのでしょう」で解かる奴はいません。ExcelのバージョンやどこにCommandButtonを置いて、どんな記述か書かないと。
Sub aaa()
Dim r As Range
With ActiveSheet
Set r = .Range("C65536").End(xlUp)
If r.Value = "" Then r.Value = 1
If IsNumeric(r) Then r.Resize(5, 1).DataSeries
End With
End Sub
Sub bbb()
ActiveSheet.Columns("A").Copy
ActiveSheet.Columns("B").PasteSpecial
ActiveSheet.Rows("1:2").Copy
ActiveSheet.Rows("3").PasteSpecial
Application.CutCopyMode = False
End Sub
この回答への補足
言葉足らずですみません。
以下、補足します。
CPU = P4 , 2.6Ghz memory = 512MB
OS = XP pro EXEL = office pro 2003 です。
コマンドボタンは、結果シート上 においています。
記述は以下の通りです。
Private Sub CommandButton2_Click()
Sheets("原因").Select
Columns("D:E").Select
Selection.Copy
Sheets("結果").Select
Range("E1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End Sub
エラーは、
Columns("D:E").Select
の行で、実行時エラー'1004':
range クラスの select メソッドが失敗しました。
と、出ています。
ちなみに、papayuka さん記述のプログラムは、
CommandButton1_ で、問題無く作動しました。
どうか、よろしくおねがいします。
No.1
- 回答日時:
こんにちは。
アドバイス程度に・・・。
私はとりあえず「ツール」→「マクロ」→「新しいマクロの記録」で自動作成させたものを後で修正する、といった方法をよく使います。エクセルのバージョンによって多少コマンドの記述方法が異なる場合があるのですが、この方法を使えば問題ないと思います。まだ試してなかったらぜひお試し下さい。
どうもありがとうございます。
実は私も自動作成したものを修正する方向で、プログラムを書いておりました。^^
しかし、今回のボタン操作は、どうにもうまくできないのです。
いろいろ本で探してみたりしたのですが、解決の糸口が見つからなくて、困っております。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- Excel(エクセル) 【Excel】指定のセル内容を基に別シートのセルを検索して選択する【VBA】 1 2022/06/16 16:16
- Visual Basic(VBA) vbaエクセルマクロについて あるデータを作成し、デスクトップに.xlsx形式で保存するマクロを作成 2 2023/03/02 18:54
- Excel(エクセル) エクセルのマクロについて教えてください。 2 2023/02/26 13:19
- Visual Basic(VBA) 【困っています2】VBA 追加処理の記述を教えてください。 2 2022/08/26 11:42
- Excel(エクセル) エクセルのマクロについて教えてください。 3 2023/02/07 14:47
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Visual Basic(VBA) vbaエクセルマクロについて あるデータを作成し、デスクトップに.xlsx形式で保存するマクロを作成 6 2023/03/03 18:05
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/08/03 12:30
- Visual Basic(VBA) 2つのシートの任意のセルの番号が一致したら、一致した行をコピーする VBA 2 2023/06/19 20:48
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelでシート名と最終更新日を...
-
【マクロ】毎回、ファイル名が...
-
VBAでシートコピー後、シート名...
-
エクセルの複数シートの保護を...
-
Excelで金銭出納帳。繰越残高を...
-
Excel2007で、太字にした行のみ...
-
EXCEL:同じセルへどんどん足し...
-
Excelのシートを、まとめて表示...
-
条件に応じて特定の行を非表示...
-
Accessのスプレッドシートエク...
-
エクセルVBAでパスの¥マークに...
-
excelでシート毎の最終更新日を...
-
Excel、同じフォルダ内のExcel...
-
別シート参照のセルをシート毎...
-
前の(左隣の)シートを連続参...
-
エクセルで毎回1枚目のシートを...
-
「マクロ」の足し算の式を教え...
-
エクセル マクロ実行時エラー’...
-
Excelで同じシートのコピーを一...
-
Excelでセル内の数式は残し値だ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルのマクロで指定条件一...
-
シートをコピーして シートに...
-
【マクロ】顧客番号にて一致さ...
-
Excelでシート名と最終更新日を...
-
エクセルのマクロ設定について...
-
Excel シートを自動作成、セル...
-
新しいマクロの記録でコピーし...
-
【マクロ】毎回、ファイル名が...
-
エクセル マクロ 任意のファ...
-
エクセルVBA 行列を一気に変換...
-
シートをコピー、シート名を変更
-
プロジェクトロックしてあるシ...
-
Excel VBA 検索して該当行を抽出
-
リンクがあるシートBのコピーを...
-
エクセルのbookを開いたときに
-
VBA データ左側から3文字で分類...
-
エクセル マクロの作り方
-
エクセルのマクロ コマンドボ...
-
Excel マクロ 他ブックのシート...
-
Excel で選択しているセルの行...
おすすめ情報