エクセルで写真をサムネール表示する方法とエラーの原因

このQ&Aのポイント
  • エクセルで写真をサムネール表示する方法として、マクロを組むことができます。しかし、コマンドボタンなどのボタンが配置されているSheetでは写真のコピーができないエラーが発生します。
  • 具体的なマクロサンプルとして、test()マクロを挙げています。このマクロは、写真を選択して表示し、コピーして貼り付ける処理を行います。しかし、コマンドボタンが配置されているSheetでは、Selection.Copyで『PictureクラスのCopyメソッドが失敗しました』というエラーが発生します。
  • このエラーの原因は、コマンドボタンが配置されたSheetではコピー操作ができないためです。エクセルのバージョンやOSの種類によるものではなく、コマンドボタンが配置されたSheetでの制約です。試しにコマンドボタンが配置されていないSheetで実行すると、エラーは発生せずに正常に動作します。
回答を見る
  • ベストアンサー

 エクセルで写真をサムネール表示するマクロを組んでいます。

 エクセルで写真をサムネール表示するマクロを組んでいます。 ところが、Sheetに挿入した写真をコピーするところで エラーが出ます。 いろいろ試行錯誤を繰り返したところ コマンドボタンなどのボタン類を張り付けてあるSheetでは、 コピーできないことが分かりました。  具体的なマクロサンプルを挙げておきますので、 同じようなことが起こるか試してもらえませんでしょうか。 またその原因も教えていただければ幸いです。 Sub test() Dim x As Variant x = Application.GetOpenFilename("jpgFiles,*.jpg") If VarType(x) = vbBoolean Then Exit Sub ActiveSheet.Pictures.Insert(CStr(x)).Select Selection.Width = 162 Selection.Height = 100 Selection.Copy ActiveSheet.Paste End Sub  上のtest()マクロをコマンドボタンの有るSheetと無いSheetで 実行すると、 ◎コマンドボタンの有るSheet ⇒ Selection.Copyで     『PictureクラスのCopyメソッドが失敗しました』というエラーが出る。 ◎コマンドボタンの無いSheet ⇒ エラーが出ずコード通り実行される  因みに、 エクセル2007は、(12.0.6425.1000)SP2 MSO(12.0.6529.5000) OSは、XP HomeEdition Version 2002 Service Pack 3 です。

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

  • ベストアンサー
  • end-u
  • ベストアンサー率79% (496/625)
回答No.7

とりあえずPictures.Copyの問題はUpdateで解決の方向のようで 良かったですね。 先にも書きましたがPicturesオブジェクトについては 便利なのですが、隠しオブジェクトという事もあり、 Pictures.InsertもMicrosoft非推奨のようです。 http://moug.net/faq/viewtopic.php?t=51292 今後はShapes.AddPictureに切り替えていく事なども検討の必要が 出てくるのかもしれませんね。 >P.S の現象については結構ありがちです。 マクロ記録のままのコードを実行してもエラーが出るケース。 Selectionが絡んでたりする事が多いでしょうし。 そんな事もあるんだ、 くらいであまり気にされないほうが良いかと。 現状のトラブルについては、 念の為2007のセキュリティレベルを確認してみる事と、 『コントロールは作成されていないため、デザインモードを終了できません』 これをキーワードにgoogle検索して、 いろんな情報を探ってみたほうが良いかもしれません。 BookあるいはSheetの破損の可能性..という情報もありますが、 確認してみたほうが良いと思えるのが http://naganonopapa.blog102.fc2.com/blog-date-20100610.html この情報。KB978262に原因があるのでは、という事です。 もちろん環境によって全く関係ないかもしれませんので参考まで。 ではでは。 :)

sintaro-hosome
質問者

お礼

 end-uさん、最後まで手間のかかる質問者に 丁寧にお答えいただき、本当にありがとうございました。  結局、今回のマクロ不具合はバージョンの違いが原因 だったようですね。私の知識不足と勘違いなどのため すんなりUpdateしていればもっと早く原因が分かって いたはずで、反省しております。  まだ、 『コントロールは作成されていないため、デザインモードを 終了できません』 という不具合については解決できていませんが、 紹介していただいたURLなどを参考に、これから解決 していきたいと思います。  また、何かありましたらよろしくお願いいたします。

その他の回答 (6)

  • end-u
  • ベストアンサー率79% (496/625)
回答No.6

気を悪くというよりも、脱力系?な疲れです。失礼しました。 まず、 Sub test1()   Dim x As Variant   x = Application.GetOpenFilename("jpgFiles,*.jpg")   If VarType(x) = vbBoolean Then Exit Sub   With ActiveSheet.Pictures.Insert(CStr(x))     .Width = 100     .Copy     ActiveSheet.Pictures.Paste     .Delete   End With End Sub ●Q1)これではエラーが出るんですね? その環境で Sub test2()   Dim x As Variant   Dim sp As Shape      x = Application.GetOpenFilename("jpgFiles,*.jpg")   If VarType(x) = vbBoolean Then Exit Sub   Set sp = ActiveSheet.Pictures.Insert(CStr(x)).ShapeRange.Item(1)   With sp     .Width = 100     .Copy     ActiveSheet.Pictures.Paste     .Delete   End With   Set sp = Nothing End Sub ●Q2)これではどうですか? その後 >取り敢えずExcelを終了して >Windowsスタートメニュー[ファイル名を指定して実行]から >%temp% >と入力して、開いたフォルダ内のファイルを >全て削除して実行してみたらどうなりますか? tempフォルダは作業用フォルダです。 そのフォルダ内のファイルは不要なので削除して構いません。 拡張子tmpのファイルがいくつか削除できない事があるかもしれませんが、 それ以外のファイルは削除してください。 ●Q3)この作業後のSub test1、Sub test2の結果を教えてください。 MicrosoftUpdateを実行してください。 最新の状態では Excel2007 (12.0.6535.5002)SP2 になると思うんですが なりませんか。Updateを何回かやってみてください。 ●Q4)更新できたら、Sub test1、Sub test2の結果を教えてください。 >Copyと[ActiveXコントロール]に >何か関係があるのでは、と自分的には強く感じています。 cj_moverさんも書かれてますが、 >シート上にコントロールを貼る人なら、 >Tempフォルダの掃除は人一倍心がけておいた方がよいです。 シート上に[ActiveXコントロール]を配置して使った場合、 Tempフォルダ内に拡張子tmp、emf などのゴミファイルが残り易い... というのは以前からある現象で、これらのファイルがExcelの起動速度や Shape関係の挙動などに影響を与えるという事例があるようです。 これは実際にTempフォルダ内の不要ファイルを削除する事で簡単に検証できます。 > それで教えていただいたtry()マクロを試してみました。 >結果、上手く行きました。Copyがどうしても旨くいかない場合は >これで行かせてもらいたいと思います。 前レスSub try も Copyメソッドを使ったものでしたが。 (Q2)の段階でエラーが出ないなら、 PicturesオブジェクトのCopyメソッドの問題かと推測されます。 それと[ActiveXコントロール]が影響してるのか、 それに加えTempフォルダの不要ファイルが影響してるのか、わかりません。 2007ではShape関係の仕様も大きく変わったようですし、 PicturesオブジェクトはExcel97の頃より隠しオブジェクトになっています。 Pictures.CopyとShapes.Copyで挙動に違いが出ているのかもしれません。 実際にDuplicateメソッドで違いが出てたりもします。 ただ、複数の回答側で現象が確認できない事、 > 結果、エクセル2007で初めてエラーなく(サクサクと)表示していました。 >WINDOWS7 HomePremium >Excel2007 (12.0.6535.5002)SP2 MSO(12.0.6535.5002) >でした。 との記述から、既に更新プログラムが提供されている可能性が高いのでは ないかと思っています。 (Q3)Sub test1がエラー、(Q4)Sub test1で解消、ならそういう事になります。

sintaro-hosome
質問者

お礼

 end-uさん、昨日はどうもありがとうございました。  補足で結果報告をさせてもらいましたが、お礼を兼ねて 補足の補足をさせて頂きます。  昨日、補足で書きましたように変な現象が出てきて 混乱状態になってしまい、とりあえず復元ポイントに戻しました。  その後、改めて再度Updateを実行しました。 全てのUpdate終了後、再び補足と同じ現象が出てきましたので 今回はエクセル2007の 『MS Office 診断プログラムの実行』を行いました。  結果はやはり、 『'CommandButton1’コントロールは作成されていないため、 デザインモードを終了できません』 と同じ警告が出ます。  エクセル2003では、今までどおり正常に動作していますので また、Copyも機能するようになったようですので 復元ポイントには戻らず、しばらく様子を見ることにしたいと思います。  ここをごらん頂いている方々にはお騒がせして 申し訳なく思っています。(汗、汗) P.S  Updateする前のエクセル2007で、いろいろ試した中で 次のような現象もありました。 1)新規Bookを開き マクロの記録をとりながら 写真(予め小さくしてある)を挿入し、コピー貼り付けをしました。 このとき、マクロの記録も正常にできたのですが、 改めて、記録されたマクロから実行させると Copyのところでエラーが出るという珍現象がありました。 2)test()等をいろいろ修正していると、 ActiveSheet.Pictures.Insert(CStr(x)) の所でもエラーが出ることもありました。

sintaro-hosome
質問者

補足

 end-uさん、とても丁寧なご教示ありがとうございます。  早速、試してみました。  新しいBookを新規から作り、test1()、test2()を標準モジュールにコピーし アクティプXコントロールのコマンドボタンを一つ貼り付け (コマンドボタンにはコードは何も書いていません) 一旦、2003のxls形式で保存し再度そのファイルを開いてから検証しました。  結果は、 ●Q1)やはり、Copyところで、これまでと同じエラーが出ます。 ●Q2)エラーは出ず、コード通り動きました。(正常) >その後 >取り敢えずExcelを終了して >Windowsスタートメニュー[ファイル名を指定して実行]から >%temp% >と入力して、開いたフォルダ内のファイルを >全て削除して実行してみたらどうなりますか?  %temp%の意味が分かっていなくて前回はファイルが 表示された時点で???でそこから進めなかったのですが、 今回は意味ややり方教えていただき、ファイルを全て削除して から試してみました。  その結果は、 ●Q3)上と同じで test1()ではエラーが出て、test2()ではエラーが出ませんでした。 >MicrosoftUpdateを実行してください。 >最新の状態では Excel2007 (12.0.6535.5002)SP2 になると思うんですが >なりませんか。Updateを何回かやってみてください。 >●Q4)更新できたら、Sub test1、Sub test2の結果を教えてください。  前回までは、セキュリティー関係のUpdateは飛ばしていたのですが、 今回は全てのUpdate(OSも含め)をしたところ、 Excel2007 (12.0.6535.5002)SP2 になっていました。  これで上手くいくだろうと ●Q4)test1、test2を試したところ、 今度は両方ともコード通り正常に動作しました。  これでOKと思って、元々の2003で正常に動作している サムネール(マクロ入り)ファイルを開いて、マクロを試そうとしたところ、 『'CommandButton1’コントロールは作成されていないため、 デザインモードを終了できません』 というメッセージが出て、それを閉じると勝手に デザインモードになってしまい、マクロがききません。  その後、ボタンを使っていないマクロを試そうとしても またその警告が出てしまい、結局このファイルではマクロが 全く機能しませんでした。    えーーーっなんでぇーーーーっと 頭が混乱してしまいました。  その後、このファイルを一旦保存して閉じようとすると 『初期化されていないActiveXコントロールを選択した 形式(xlsのこと)に保存することは出来ません。 続行するとこのようなコントロールは失われます。』 との警告が出たため、名前を変えてxls形式で 保存し、再び開いてみると ボタン類は表示だけされていますが、全然機能しません。  次にまた元の最初のファイルを開いて、今度は2007形式で 保存し、再び開いてみると今度は 全てのボタン類が消えて失くなっていました。 (因みにCopyの所ではエラーは出なかったです)  結局、理解不能で気色悪くなって来て、復元ポイントを使い 元に戻しました。 (end-uさんではないですが、私も脱力状態になりました。)  ということで、しばらく頭を冷やすことにしたいと思います。  最後にend-uさんには、何回も付き合っていただき 本当に感謝しております。どうもありがとうございました。

  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.5

お邪魔します ひとつの可能性として、ですが、、、 とりあえず (シートモジュール) CommandButton のイベントプロシージャーの先頭(若しくは問題の記述の直前) に1行  ActiveCell.Activate を追加した場合はどうでしょう。 それでダメならイベントプロシージャー側のサブルーチンの呼び出しを工夫して2行  ActiveCell.Activate  Application.OnTime Now(), "Test"  (Sheet1(←オブジェクト名)モジュールにあるプロシージャなら  Application.OnTime Now(), "Sheet1.Test") として、イベントプロシージャーをとりあえず抜けるようにしてみるとか。 場合によっては(ひょっとして) ActiveCell.Activate に代えて  AppActivate Application.Caption だとどうなるか、とか。 ActiveX コントロールの CommandButton なら、プロパティー設定で .TakeFocusOnClick プロパティーをFalseにして試してみるとか。 何れの方法も最善策とはいえないけど、検査薬にはなるかと。 結果が出れば識者からより良い薬が貰えると思います。 どの場合でも Selection を使わないで書く方がベターです。 シート上にコントロールを貼る人なら、 Tempフォルダの掃除は人一倍心がけておいた方がよいです。 見当外れでしたらすみません。 #微妙に被りましたが、せっかく書いたので、、、

sintaro-hosome
質問者

補足

 cj_moverさん、ご回答ありがとうございます。 >ActiveCell.Activate >を追加した場合はどうでしょう。  を(若しくは問題の記述の直前)で試してみましたが、 上手く行きませんでした。 >CommandButton のイベントプロシージャーの先頭・・・  についても上手く行きません。 そもそもCommandButtonには何のコードも書いていません。 エラー確認のためにCommandButtonを貼り付けているだけです。 (言葉足らずで申し訳ありませんです)  上の方の補足にも書かせていただきましたが 当方では、エラーの原因はコードの書き方ではなく ActiveX コントロールとCopyとの関係があると思っています。 このあたりのことで何か推察できることはありませんでしょうか?

  • end-u
  • ベストアンサー率79% (496/625)
回答No.4

元々画像リサイズの為のCopyであればその辺りも考慮したほうが良いかもしれませんね。 Sub try()  Dim x As Variant  Dim s As Shape  x = Application.GetOpenFilename("jpgFiles,*.jpg")  If VarType(x) = vbBoolean Then Exit Sub  Set s = ActiveSheet.Shapes.AddPicture(Filename:=CStr(x), _                     LinkToFile:=msoFalse, _                     SaveWithDocument:=msoTrue, _                     Left:=0, _                     Top:=0, _                     Width:=162, _                     Height:=100)  s.Copy  ActiveSheet.Pictures.Paste  s.Delete  Set s = Nothing End Sub もしCommandButtonが[ActiveXコントロール]のCommandButtonだったら その[プロパティ]でTakeFocusOnClickプロパティを False にしておいたり、 [ActiveXコントロール]じゃなくて[フォームコントロール]のボタンに 変更したりしてみるのもありかもしれません。 『?』つきで質問しても応答ないのでこの辺で失礼しますが、 回答側に貴方のファイルがあるわけでもなく、同一の環境でもなく、 ましてやエラーが再現しないので、推測でアドバイスするしかありません。 その過程で、 可能性は薄いかもしれませんが実際にそちらの環境でやってもらう事で 1つずつ潰して絞り込んでいくような手法を取らざるを得ません。 中にはダメ元的なものもあります。 それを実際に試されないのならアドバイスしがいがないですよね。 「コマンドボタンなどのボタン類」という情報って どの種類のボタンが何個あるか、 『類』とは、他の種類のコントロールがあるのか とかまた推測するしかないですが、 提示された情報を元にこちらで新規Bookで試しても再現しません。 新規Bookにボタンを追加して、そのコードでどの端末でも どの画像でもエラーが発生するのでしょうか。 いずれにしても、 実際に使えないファイルだったら何とかしないといけないでしょう。 ボタンが原因だとある程度わかってるなら それを使用しなくてもよい仕様に変更するとか。 ワークシート上に置くんじゃなくてUserFormを使ったりとか。 または1からファイルを作り直すようにして、 2003から作成するパターンと 2007から互換ファイルで作成するパターンと2通り試し、 バックアップを取りながら少しずつ機能を増やしていってはどうですか。

sintaro-hosome
質問者

補足

 end-uさん、ご回答ありがとうございます。 >それを実際に試されないのならアドバイスしがいがないですよね。  恐れ入ります。全くその通りでお気を悪くされたようで 本当に申し訳なく思っております。  当方の知識や、PCの設定(特に職場のPC)で実際に試せないこともありまして、 試すことができるものだけ補足させてもらっている次第です。 (職場で使うことになりますので) >元々画像リサイズの為のCopyであればその・・・  おっしゃる通りです。(メモリー節約のためこれを使うということは この教えてgooで教えてもらいました。)  それで教えていただいたtry()マクロを試してみました。 結果、上手く行きました。Copyがどうしても旨くいかない場合は これで行かせてもらいたいと思います。 >もしCommandButtonが[ActiveXコントロール]のCommandButtonだったら ・・・ >「コマンドボタンなどのボタン類」という情報って >『類』とは、他の種類のコントロールがあるのか・・・  コマンドボタンやその他の[ActiveXコントロール]すべて に共通して1個でも張り付けるとCopyの所で同じエラーが出ます。 (言葉足らずで申し訳ありません) >その[プロパティ]でTakeFocusOnClickプロパティを False にしておいたり、  これは試してみましたが、上手く行きませんでした。 >[ActiveXコントロール]じゃなくて[フォームコントロール]のボタンに >変更したりしてみるのもありかもしれません。  これについては、エラーは出ませんでした。 (これもまた、不思議です) ただフォームコントロールは今まで全く使ったことがありません ので勉強する必要があります。  ただこれを使うとなるとかなり大幅な変更も伴いますので 気分的には少し気が重いです。  今日、たまたま職場で最近の新しいノートパソコンを使っている同僚が いましたので試させてもらいました。  結果、エクセル2007で初めてエラーなく(サクサクと)表示していました。 WINDOWS7 HomePremium Excel2007 (12.0.6535.5002)SP2 MSO(12.0.6535.5002) でした。  やっぱり、2007でも上手く行くPCがあるということを実感しました。  そういうこともあり、またここまでやってきた以上、 なんとかCopyのままで行けないか、もう少し拘ってみようと思っています。  またまたしつこいようですが、Copyと[ActiveXコントロール]に 何か関係があるのでは、と自分的には強く感じています。

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.3

>◎コマンドボタンの有るSheet ⇒ Selection.Copyで 挿入した写真をSelectしないで処理すれば如何かな Sub test2()   Dim x As Variant   x = Application.GetOpenFilename("jpgFiles,*.jpg")   If VarType(x) = vbBoolean Then Exit Sub   With ActiveSheet.Pictures.Insert(CStr(x))     .Width = 162     .Height = 100     .Copy     With ActiveSheet.Pictures.Paste       .Top = Range("B5").Top       .Left = Range("B5").Left     End With     .Delete   End With End Sub

sintaro-hosome
質問者

補足

 watabe007さん、ご回答ありがとうございます。  watabe007さんのPCでは、私と同じエラーは出なかったようですね。 それで、記していただいたtest2()マクロを試してみました。  結果はやはり、コマンドボタンのあるSheetでは、 Copyのところで同じエラーが出ます。  質問マクロtest()は、家のパソコンと職場のパソコン合わせて3台で 試していますが、すべて同じエラーが出ます。 ◎職場のパソコン⇒Vistaでエクセル2007 ◎家のパソコン⇒XPでエクセル2007        (家のパソコンにはエクセル2003も入っています)  因みに、エクセル2003では、上のようなエラーは出ません。

  • end-u
  • ベストアンサー率79% (496/625)
回答No.2

まだ解決してなかったんですね。 http://okwave.jp/qa/q6064055.html?order=asc この前から、どうにも再現しません。 いくつか提案してますが、実行するには難しい環境なんでしょうか。 >・端末に別ユーザーでログイン。(もしくは新規ユーザー) 取り敢えずExcelを終了して Windowsスタートメニュー[ファイル名を指定して実行]から %temp% と入力して、開いたフォルダ内のファイルを 全て削除して実行してみたらどうなりますか?

sintaro-hosome
質問者

補足

 end-uさん、今回もお付き合いいただきありがとうございます。 また、よろしくお願いします。  前回教えていただいた Selection.CopyPicture では、写真の表示が凄く遅いのと、 画面をスクロールさせたりするとまた表示し直すようで 実用には少し難があるという感じでした。  それで、何が原因かあれこれ試すうちに コマンドボタン類があるとCopyの所で必ずエラーが出る というのが分かった次第です。 (同じSheetでコマンドボタンを付けたり外したりしても その度に、Copyの所でエラーが出たり出なかったりします)  ここで回答していただいている方には 私のようなエラーが出ないようですので 私にはその方が不思議なくらいです。  因みに、上記のコマンドボタン有る無しで出るエラーは 職場の2台のVistaパソコンで試しても同じ症状のエラー がやはり出ます。(3台のパソコンで試しています)  職場の他の人にも(違うIDで)やってもらいましたが同じでした。 ですので、 >・端末に別ユーザーでログイン。(もしくは新規ユーザー) でも同じだと思います。  しつこいようですがエクセル2007では、コマンドボタンと Copyとの相性?(何か関連がある)のようなことで何か推察できることは 無いでしょうか?

回答No.1

私の環境で試した限りでは問題なく動作しましたが、本来、Copy や Paste の 動作は独立した動作として実行すべきかと思います。 CPU の性能等によって画像が表示しきらない状態でCopy が実行されたり、クリップボードに 転送されない内にPaste が実行されたりします。 従って、本来なら取得された画像が表示され、さらにその画像が選択されたかどうかを確認 してから、Copy を実行するようにしないとエラーとなる場合があります。 と言っても実際にそのようなプログラムを組むのは面倒だし複雑になるので、簡略的に待ち時間を 適当に作って動作を継続するのが一般的ですが、最近は、DoEvents や Sleep 関数を使う事の 弊害が色々言われているようなので、動作確認を十分に行って多用しないようにして下さい。 取り敢えず、テストコードとして下記を試してどうなるか確認して見て下さい。 Sub test()  Dim x As Variant  x = Application.GetOpenFilename("jpgFiles,*.jpg")  If VarType(x) = vbBoolean Then Exit Sub  ActiveSheet.Pictures.Insert(CStr(x)).Select  Selection.Width = 162  Selection.Height = 100  WaitTime (1)  Selection.Copy  WaitTime (1)  ActiveSheet.Paste End Sub Public Sub WaitTime(st As Single)  Dim sngSt As Single  sngSt = Timer  Do While Timer - sngSt < st   DoEvents  Loop End Sub

sintaro-hosome
質問者

補足

 vbhanatyanさん、ご回答ありがとうございます。  早速家のパソコンで試してみましたが、 やはりコマンドボタンのあるSheetでは Selection.Copy のところでエラーが出ます。  質問に記したtest()マクロを 今日職場のVistaパソコンでも試しましたが やはりCopyのところでエラーが出ます。  この質問マクロは、元々エクセル2003で正常に 動作していたものが、2007になってエラーが出て来たことに よるものです。ですので、 >CPU の性能等によって画像が表示しきらない状態でCopy が実行されたり、クリップボードに >転送されない内にPaste が実行されたりします。 が原因とは思えないのですが・・・。

関連するQ&A

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

    エクセル97でマクロを組んで下記作業を行いたいと考えていますが(実際にやりたい事から抜粋した内容です)、不具合が起こっています。 ~やりたい事~ コマンドボタンを押すとあるシートのセルをコピーして、違うシートに貼り付ける。 ~不具合内容~ (1)普通にマクロを実行すると問題ないが、(2)コマンドボタンを使用するとエラーが起こる。 エラー内容は、 「実行時エラー'1004' RangeクラスのSelectメソッドが失敗しました。」 と言う内容です。 ~(1)のVB表記~ Sub Macro1() Sheets("sheet1").Select Range("A1").Select Selection.Copy Sheets("sheet2").Select Range("A1").Select ActiveSheet.Paste End Sub ~(2)のVB表記~ Private Sub CommandButton1_Click() Sheets("sheet1").Select Range("A1").Select (←ここでエラーが発生します) Selection.Copy  Sheets("sheet2").Select Range("A1").Select ActiveSheet.Paste End Sub ~質問事項~ 1)(2)の表記の何が原因でエラーが起こっているのでしょうか? 2)エラーが起きない為にはどのようにしたら良いでしょうか?

  • エクセル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]を表示させずにマクロを実行させるにはどのようにしたらよいのでしょうか? よろしくお願いします。

  • エクセルのマクロを使って・・・

    見積書を作成するマクロを作っているのですが、シートの追加がうまくいかず困っています。 見積書を作る際に、明細を入力する行が足らない時に、あらかじめ、作ってある『明細マスター』と言う名前のシートから、明細書をコピーして新しいシートを挿入して、そこに貼り付けると言う作業を、最大で“明細書(1)~(5)”5枚のシートを追加できる…と言う、マクロを作りたいのですが… 追加する枚数はその都度、違うそうなので、1回実行すると、『明細書(1)』が追加され、2回目の実行で『明細書(2)』が追加・・・・・ と言うようなマクロを作りたいのですが・・・ Sub 明細書() Worksheets.Add After:=ActiveSheet ActiveSheet.Name = "明細書(1)" Sheets("明細マスター").Select Cells.Select Selection.Copy Application.CutCopyMode = False Selection.Copy Sheets("明細書(1)").Select Cells.Select ActiveSheet.Paste Range("B2").Select End Sub 上記のマクロで、一枚だけの追加だと明細書が追加されるんですが、それを最大5枚まで追加すると言うマクロが分かりません。 質問が、分かりにくかったら申し訳ありませんが、よろしくお願いいたします。

  • エクセル「マクロの記録」を少し直したい

    マクロの記録で作った下記を Sub Macro1() Sheets("Sheet1").Select Rows("6:6").Select Selection.Copy Sheets("Sheet2").Select Rows("2:2").Select ActiveSheet.Paste End Sub 以下のように書き換えたら、2行目(Paste)がエラーになりました。 Sub ts1() Sheets("Sheet1").Rows("6:6").Copy Sheets("Sheet2").Rows("2:2").Paste End Sub セレクトしないで行ないたいのです。 どう直せばいいでしょうか?

  • エクセル マクロ

    エクセル2000を使っています。 「申請書」、「標準事務用品」の2種のシートがあって、「申請書」のシートは定型の入力フォーム、「標準事務用品」は入力フォームに反映させたいデータの一覧表になっています。データの項目は左から、1.申請2.品物3.商品名4.品番5.メーカー名となっており、データは全部で74行あります。1.申請項目の列には各行1個づつコマンドボタンを設けました。コマンドボタンがクリックされたときに、該当行のセルの内容を入力フォームにコピーする処理が実行されるようにしたいです。 マクロの記録で記述されたコードをコマンドボタンのコードにコピーしてみましたが、エラーになってしまい修正の仕方がわかりません。 Private Sub CommandButton1_Click() Range("K30").Select Selection.Copy Sheets("申請書").Select ActiveSheet.Paste Sheets("標準事務用品").Select Range("L30").Select Application.CutCopyMode = False Selection.Copy Sheets("申請書").Select  (↓ここでエラーになってしまします。) Range("B13:G13").Select ActiveSheet.Paste Sheets("標準事務用品").Select Range("M30").Select Application.CutCopyMode = False Selection.Copy Sheets("申請書").Select Range("B15:C15").Select ActiveSheet.Paste Sheets("標準事務用品").Select Range("N30").Select Application.CutCopyMode = False Selection.Copy Sheets("申請書").Select Range("B14:G14").Select ActiveSheet.Paste Application.CutCopyMode = False End Sub また、全部で74行あるので、全てに操作を記述するのは非効率的だろうと思います。何か良い方法はありますでしょうか。 ご助言お待ちしております。

  • 【Excel】 マクロをチェックして頂けないでしょうか。

    こんにちは 毎月更新するシートを追加する コマンドボタンを設置したいと思います。 シートをコピーし、名前を付けた範囲「翌月繰越」を F6にコピペ。 名前を付けた範囲「クリア範囲」をクリアし、カーソルをG6に置く という、マクロを記録しました。 コマンドボタンをクリックすると、記録したマクロを 実行するようにしましたが、 Range("F6").Select の、ところで止まってしまいます。 どのように修正したら良いでしょうか。 Private Sub CommandButton2_Click() ActiveSheet.Copy Before:=ActiveSheet Application.Goto Reference:="翌月繰越" Selection.Copy Range("F6").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Application.Goto Reference:="クリア範囲" ActiveWindow.SmallScroll Down:=-48 Application.CutCopyMode = False Selection.ClearContents Range("G6").Select End Sub また、これを実行するとコピー元シートの左側にシートが追加されますが、 コピー元シートの右側に追加するにはどうしたら良いでしょうか。 Excelは2003です。 よろしくお願いいたします。

  • エクセル・マクロ シートの非表示でマクロのエラー

    エクセル勉強中です。 マクロの記憶でSheet2の元データの図と記入できるセルをSheet1の有効セルにコピペするマクロを作りました。 複数の方が使う予定なので元データのSheet2を非表示にしたところマクロがエラーになりました。 どうしたらよいでしょうか? また貼り付けをする時、微妙に元データのシートがちらちらと移ります。 こちらも合わせてご指導いただけましたら助かります。   よろしお願いします。 Sub b1ab1() ' ' b1ab1 Macro ' ' Sheets("Sheet2").Select Range("AK48:AP56").Select Selection.Copy Sheets("ダクト制作単品図").Select ActiveSheet.Paste End Sub

  • エクセル2007でマクロを使った写真挿入がうまくいきません。

    エクセル2007でマクロを使った写真挿入がうまくいきません。 エクセル2003で使っていたひな形をもらったのですが2007では結合したセルから ずれてしまいます。 どうすれば位置の修正をできますか? また、結合した大きなセルの中にフォームボタンを付けいるのですが 2003では写真が挿入されるとボタンは隠れてしまっていたのですが、 2007では挿入した写真に重ねって写真が見ずらいです。 隠すことはできるのでしょうか? なにぶん初心者なのでお願いします。 Sub Pic_in() ' マクロ記録日 : 2003/7/1 kome fname = Application.GetOpenFilename ActiveSheet.Pictures.Insert(fname).Select Selection.ShapeRange.LockAspectRatio = msoFalse Selection.ShapeRange.Height = 247.5 Selection.ShapeRange.Width = 350 End Sub

  • マクロでソルバーを使えますか?

    VBAは未経験です。エクセルでソルバーをマクロで記録し、実行しようとしたらエラーメッセージが出てしまいました(コンパイルエラーsubまたは functionが定義されていません)。 マクロにソルバーを組み込むこと自体ができないのでしょうか? 宜しくお願いします。 Range("E4:M4").Select Selection.Copy Range("E11").Select ActiveSheet.Paste Range("E4:M4").Select Selection.Copy Range("E12").Select ActiveSheet.Paste SolverOk SetCell:="$E$7", MaxMinVal:=3, ValueOf:="20", ByChange:="$D$5:$K$5" SolverSolve Range("E4").Select End Sub

  • エクセル/マクロ エラー処理がうまくいきません

    エクセルマクロの質問です。エクセルのヴァージョンは2000です。 シートをコピーして新シートに任意の名前を付けるマクロを作っています。 ユーザーフォームの中に一つのテキストボックス(新シートの名前入力用)と 二つのコマンドボタンを設置し一つは実行ボタン、もう一つはキャンセルボタンとしました。 テキストボックスに不正な名前(空白、記号、すでに存在するシート名)が入力された状態で 実行ボタンを押すと新シートは作成されず、メッセージボックスで実行できない旨が表示され、 入力フォームに戻るという感じにしようと思っています。 エラー処理には下記の通りOn Errorステートメントを試してみました。が、どうもうまくいきません。 エラーが出ても新しいシートが作成されてしまい、その後にメッセージボックスが出てしまいます。 正しいエラー処理の仕方をご教示頂けると幸いです。どうぞよろしくお願いします。 Private Sub CommandButton1_Click() Dim NewSheetName As String NewSheetName = TextBox1.Value On Error GoTo Err1 Sheets("Summary").Select Sheets("Summary").Copy After:=Sheets("Summary") ActiveSheet.Name = NewSheetName Exit Sub Err1: MsgBox "Invalid name"    Exit Sub End Sub