ネットが遅くてイライラしてない!?

あるエクセルマクロが、特定のPCでのみエラーになります。
ソースを見ると以下の処理で引っかかっているようです。
「Debug.Print Err.Description」

正常動作してくれないのは「SurfacePro Corei7モデル、エクセル2016」です。
動作しないエクセルファイルをUSBメモリでフォルダまるごとコピーし、
別PCにコピーして実行すると動作しました。マクロは問題ないようです。

正常動作すると指定のフォルダにエクセル形式のデータを書き出す仕様になっています。
User名が日本語なのがいけないのかと思い、ユーザ名「test」で試しましたが駄目でした。
エクセルの2010で作成したマクロだから、2016でエラーが出るのかと思いましたが、
他のPCではエクセル2016で動作しているとの事(未確認)
エラーと言ってもVBA内の処理にてエラーメッセージが表示されているので開発者の想定しているエラーです。

情報不足で申し訳ありませんが、何か手がかりを頂けると助かります。

質問者からの補足コメント

  • へこむわー

    本来であれば、ソース自体を提示するのがズバリ正確な質問となるのですが、
    細かい説明は割愛しますが、そのままソースを公開するにはリスクがあるため、
    情報不足前提ですが、
    聞かないよりは聞いた方が、何か手がかりがつかめたらと思って質問させていただいています。

    開発者から配布された、スキルの低いユーザから相談を受けた身ですので、
    私自身も解析する程のスキルがあるわけでもなく、私と開発者の接点はありません。
    最終的には、「開発者に問い合わせるしかない」と突き返すことになりますが、
    その前に何かできうることを探っている状態です。
    ご理解いただければ幸いです。

      補足日時:2018/05/21 11:42

A 回答 (12件中1~10件)

#10の回答者です。



「大袈裟な話ではないです^^;」
ちょっとザックバランに書かせていただきます。

私は、収入をOffice VBA開発では得てないので、アマには違いないけれども、ある程度の心得は存じているつもりです。

1)「マクロを実行した際の書き出し先は相対パス指定で、マクロの置いてあるフォルダ内にあるExcelフォルダに書き出す」
2)「もとのフォルダまるごと、別のPCのローカルディスクのどこにコピーして実行しても、
そのフォルダ内のExcelフォルダに書き出す」

どんなコードか分かりませんが、
「フォルダ内のExcelフォルダに書き出す」というのは、それが成立するのは、そのフォルダーの下位フォルダぐらいですが、時々、勘違いされる方がいるように思うのです。デフォルト・ファイルパス(default File path) は、ユーザーの任意のフォルダには優先しません。ここは大事です。よく間違える方がいます。では、なぜ下位フォルダは問題が少ないかというと、コードとして書かざるを得ないからです。

だから、お話のようには、今は、出口についてそう安易には決められないないのです。しかし、みなさん、デフォルトのままに入れるようにしているはずです。私は、あえてそれを嫌っています。タブレットもどきでは、なかなかそういうわけにもいきませんが。

最近になって、やっと、VBAのEnviron 関数の他に、Path の環境定数について学び始めました。VBAでは、あまり使えないことも多いのですが、それを無視もできなくなっています。

話を最初から戻します。

ご自身のコードではないということを前提ですが、
開発者の都合というものもあるけれども、常識の範囲で、「Debug.Print Err.Description」こんなことは書きません。
If Err<>0 Then
 MsgBox "Error " & Err.Number &": " & Err.Description
(システムの場合は、そこにプロシージャ名などを後に入れます)
End If
です。

そもそも、他人に手渡すコードに、Debug.Print がなぜあるのか、ということですね。

早い話、ユーザーに下駄を預けたコードは、秘匿性なんて守る必要なんてないと言いたくなるのですが。開発者どうしで、チェックしてもらうためには付けても、正真正銘のユーザーさんには出しません。

ユーザーさんに渡すコードの場合、特にシステムでは、エラー出力の仕方というのは、ちょっと工夫を凝らす必要があります(企業秘密というか、公開ははばかりますが。)
ユーザーさんにはVBAのモジュールを触らせないということも、「同一性(私が作ったものという意味)」が保たれないからです。「同一性」のないものは、責任の取りようがないのです。

もしかしたら、マクロの問題ではなく、機種固有の問題があるかもしれません。こうなるとバンザイになってしまいます。せめてエラーコードがあると話が早いのですが……。

・参照設定の基本事項
ところで、これは、ご存知ですか?初級や中級に入ったばかりの人は、まったく認識なかったりします。

●ツールのオプションの全般(開発者向け)
・エラートラップは、エラー処理対象外のエラーで中断 (クラスモジュールで中断:可)
・開発するので、私は以下を入れていますが、
  製品的には、「順次コンパイルを[OFF]」
  しかし、これは、前回で述べたように、私は、コードチェックのために、Compile をかけてる習慣があるから、[ON]にしているわけです。ただし、出来上がった段階では、ユーザーには関係がありません。
●オプション-保存
・規定のファイルの場所:(ここが、デフォルトファイルパス)
●セキュリティセンター・ファイル-オプション内(マクロ・ユーザー[開発者とは違います])
・信頼できる場所
 ここの処理をどうするか、インストラクターで安易に設定を勧める人がいますが、私は、公にはノーコメント。デフォルトならデフォルトのままとも言いたいのですが、最近は、UserのOneDrive になっています。プライベートでは、SSD ドライブ辺りがふさわしいかと思います。
・マクロの設定
 警告を表示してすべてのマクロを無効にする
 VBAプロジェクト オブジェクト モデルへのアクセスを信頼する(通常は[OFF])
・プライバシーオプション
 Office のインターネット接続を許可する [ON]

と、大雑把なところは、このようにすればいよかと思いますが、設定は意図的に変えても、Windows側のセキュリティ設定に優先されるので、大きな違いはありません。
こんなところかな。
    • good
    • 1
この回答へのお礼

ありがとうございます。
真剣に考えていただき感謝いたします。

まだ端末に触れる機会がないため進展はありません。
アドバイスいただいた内容を活用させていただきます。

お礼日時:2018/05/23 10:25

No.9です。



No.10さんの意見に同意したい部分はあります。
ブックの書き出しが出来ないと言う点で仮に『FileSystemObject』を使用していて且つ参照設定を使用している【Microsoft Scripting Runtime】が、
何かの拍子に外れているとも思えます。

ただこのまま質疑を繰り返して憶測で悩むよりかは、開発者に聞いてみた方が早く済んでしまうのではないかと思えてしまいますし、
担当者含め複数人で理由と対処法をキチンと聞く事は大切かなと。
    • good
    • 1
この回答へのお礼

ありがとうございます。
(話が逸れるので割愛しますが)開発者に聞く方が大変なので情報収集しています。

こちらは「質疑応答を繰り返して悩んでいる」という認識ではありません。
次回、直接端末に触れられるのがいつになるか分からないので、
その機会を無駄にしないよう、試せる確認事項を可能な限り集めている状態です。

今のところ集まった情報は下記の通りで、
・イミディエイトウィンドウの確認
・VBEの参照設定で「参照不可」になっているものがないか
・参照設定の基本事項
・『FileSystemObject』を使用していて且つ参照設定を使用している【Microsoft Scripting Runtime】が、何かの拍子に外れているかどうか

これらを試して何も見出せなかったら、「残念だけど開発者に聞くしかないわ、ごめんね」と突き放す事になります。
できるだけ解決してあげたいので情報収集している状態です。

お礼日時:2018/05/22 15:56

こんにちは。



もう、Weekday に入りましたので、少し口を挟ませていただきます。
ちょっと驚いているのは、「開発者に問い合わせるしかない」ということは、ご自身の開発したものではないというのですか?

すでに、重複する部分がありましたら、ご容赦ください。

厳しい事を言うようですが、ひと目みて、ある程度の経験があれば、自分と開発者の力量の差というものは分かります。その上で、即刻、判断すべきというか、力量の上の人のものには手を付けないという、自分自身のルールも必要かもしれません。

私の場合は、別なトラブルがありますが、基本的には他人のコードは、公になっているもの以外は、手をつけることはありません。

「SurfacePro Corei7モデル、エクセル2016」
私が同じ立場だったら、まず、直感的に、SurfacePro で、Office VBAマクロを動かすことに躊躇を感じてしまいます。Ms 商品のオレサマ度は、数ある製品の中でも、最高かもしれません。

まして、新品だという話では、なおさらで、何の調整もされていないのではないでしょうか。Excelで、VBAマクロでも、アドインでも、それを使うためには、ある程度のお膳立てが必要なのです。

まず、コードはオープンになっているわけですね。
ふつう、マクロがダメだという時に、参照設定の基本事項が×になっていることがあります。
・Visual Basic For Applications
・Microsoft Excel xx.0 Object Library (xx は数字)
・OLE Automation
・Microsoft Office xx.0 Object Library (xxは数字)

>データ書き出しまで完了できないため困っています。
もし、これだけの問題なら、書き出して良い場所かどうか、論理的仮想空間か、実体のあるHDDとかSSDとか、たぶん、デフォルト状態のままでは難しいということだけになります。

ふつう、私は、2種類のデバッグ方法を取ります。
まず、コードのどこで、どのような種類のエラーを吐き出しているか、チェック型のマクロに編集します。これは、私は、MZ-Toolsを利用しています。もちろん、On Error トラップを外して、Compile するのもよいのですが、Run Time エラーで、マイナス値のものはお手上げに近いです。

もうひとつは、スモールコードのシュミレーションです。その悪い部分の周辺を取り出して、それを単独のブックで独自に実行します。

こんなところでしょうか。
    • good
    • 0
この回答へのお礼

すみません、そういう大袈裟な話ではないです^^;

「開発者に聞くしかないです。」そう言って何もせずに突き放すのは可哀想なので
出来れば解決を、無理なら切り分けをしてあげたいと思ってます。

あと、PC毎に設定をしなければいけないような面倒な設計にはなってないそうです。
(つまりPCにエクセルをインストールさえすれば動くはず。)
それが特定のマシンにだけ動作しないので困っているわけで、どこを見てどう判断すれば良いか相談している次第です。

書き出し先については、No.9の回答の方で説明します。

ありがとうございました。

お礼日時:2018/05/22 14:30

No.8です。



>本来は指定フォルダに計算結果のエクセルファイルを書き出す仕様になっているようですが、
>「失敗しました。」というメッセージで出ました。

計算結果の基データがマクロを実行したファイルにあるとすれば、失敗は指定フォルダへのアクセス権が使用しているアカウントにない可能性も考えられます。
ネットワーク上への保存なら尚更アクセス権があやしそう。新品購入した後にそのPCからのアクセス許可設定を怠ったというミスは、こちらでは以前ありましたよ。

>私のPCのデスクトップにコピーして、同じ操作をしてみたところ、「成功しました。」で、エクセルファイルが生成されていました。

これは質問に書かれている『フォルダごと』のコピー(複数のBook或いはその他のファイルを含んでいる)なのか『マクロを実行したBookのみ』なのかでも
違ってくるでしょうね。

>私のPCは私自身、DBに接続するような設定は行っておらず、基本的に素の状態なのに正常動作しました。

DBへの接続についてはたまに私は回答してますが、参照設定を行なわずにマクロで呼び出す方法もあります。
重要なのはマクロ実行Bookが他のBookやファイル・DBシステムにつながってデータを受け取り新規Bookを作成するようになっているのか、
或いはマクロ実行Book単体での稼働なのかの切り分けでしょうかね。
    • good
    • 0
この回答へのお礼

相手との時間が調整つかず、とりあえずフォルダ関係の確認だけできました。

「エクセル作成マクロ」というフォルダの中に
・「Excel」というフォルダ
・「マクロ.xlsm」というファイル
だけ入っています。
マクロを実行した際の書き出し先は相対パス指定で、マクロの置いてあるフォルダ内にあるExcelフォルダに書き出す仕様になっています。
なので、もとのフォルダまるごと、別のPCのローカルディスクのどこにコピーして実行しても、
そのフォルダ内のExcelフォルダに書き出すようになっています。
取り急ぎご報告まで。

ありがとうございました。

お礼日時:2018/05/22 14:40

No.3のお礼に対して



>>例えば何かをインストしているのが条件とか?

>新品のSurfaceProを使用しての事なので、あまり考えにくいと思っています。
>もちろんプリインストールされりるソフトの可能性もありますが、低いと思っています。

う~ん?
『そのマクロを実行するに当たって○○がインストールされている事』を条件と回答してます。
なので新品であるからこそインストールされてない
(Windowsのアップデートを止めているとか、OSが新しく次のバージョンが入っているのでOS的には不要と思われているような物とか)

>他のPCではエクセル2016で動作しているとの事(未確認)

この確認において問題ないのなら『プログラムの追加と削除』を動くPCと双方表示させてみて見比べる・・・・

例えばデータベースに接続するような物なら接続の仕方によっては接続用ドライバ類は必要かもでしょうし。

>最終的には、「開発者に問い合わせるしかない」と突き返すことになります

『自分には手に負えない』と戻す必要もある・・・と言うより開発者との接点を持つ物がスキル不足では、仮に委託であれば下手すると相手の良いように
されちゃうんじゃない?
その者の上司はどのような感じなのでしょうか?と考えてしまいます。

あとは該当PCのアカウントに管理者権限が必要とか、

>エクセルファイルをUSBメモリでフォルダまるごとコピーし

ExcelBookではなくフォルダ丸ごとって『.dll などExcelBookファイル以外に何かある』ならそれを動かすソフトがかけてるのかも。
    • good
    • 0
この回答へのお礼

ご親切に返答いただきありがとうございます。

本日、相談者がSurfaceProを私の元に持参してきてくれました。
その方は初心者だし、新品だけあって、何も端末をいじってないようです。
SurfaceProでマクロを実行したところ、本来は指定フォルダに計算結果のエクセルファイルを書き出す仕様になっているようですが、
「失敗しました。」というメッセージで出ました。

私のPCのデスクトップにコピーして、同じ操作をしてみたところ、「成功しました。」で、エクセルファイルが生成されていました。
私のPCは私自身、DBに接続するような設定は行っておらず、基本的に素の状態なのに正常動作しました。

また明日以降、SurfaceProに触らせてもらえる時間が持てますが、
本日は時間が無く、状態の確認のみで、あらためて情報不足ですみません。

お礼日時:2018/05/21 19:05

>エラーと言ってもVBA内の処理にてエラーメッセージが表示されているので開発者の想定しているエラーです。


それでもエラーでしょ?Debug.Print Err.Descriptionは「エラー内容を表示せよ」なので、それがないと何だか分かりません。

いつも思うのですが、原因が分からない質問者が勝手に原因を決めつけることが多いです。
    • good
    • 0

>エラーメッセージが表示されているので


それを見せずに何を期待して質問してるのですか?
    • good
    • 0
この回答へのお礼

「情報不足で申し訳ありません」と最初から断っていますよね。
その中で、アドバイスしようがないのは仕方がありませんが、突っかかってこないでくださいね。

お礼日時:2018/05/21 11:23

No.2です。


>以下の処理で引っかかっているようです。
引っかかっているの意味が分からん。
    • good
    • 0

>Debug.Print Err.Description



で、その結果、何と書かれてるの??
ソースコード見ている画面から、表示 -- イミディエイトウィンドウ で、出るはず
    • good
    • 0

>開発者の想定しているエラーです



質問者さんの作った物ではないのですか?
もしそうなら例えば何かをインストしているのが条件とか?
と言うよりかは開発者に確認した方がって開発した人が悩んでいる?
    • good
    • 0
この回答へのお礼

>例えば何かをインストしているのが条件とか?

新品のSurfaceProを使用しての事なので、あまり考えにくいと思っています。
もちろんプリインストールされりるソフトの可能性もありますが、低いと思っています。

>開発者の想定しているエラーです
うまく表現できておらずすみません。
自分でVBAで開発途中に期待通りに動作せずVBAが出すエラーではなくて、
プログラム内で想定外の状況に応じてユーザに知らせるエラーメッセージです。
つまり、例えば
MsgBox "それはダメよ~ん!"
の様な止まり方をし、正常処理完了に行きつかないだけなのでこのメッセージをここに記載したところで、
全く意味がないからです。
エラーといってもプログラム的には正常処理を完了していますが、
使っている人からすると、データ書き出しまで完了できないため困っています。

本来であれば、ソース自体を提示するのがズバリ正確な質問となるのですが、
細かい説明は割愛しますが、そのままソースを公開するにはリスクがあるため、
情報不足前提ですが、
聞かないよりは聞いた方が、何か手がかりがつかめたらと思って質問させていただいています。

開発者から配布された、スキルの低いユーザから相談を受けた身ですので、
私自身が解析する事も出来ず、私と開発者の接点はありません。
最終的には、「開発者に問い合わせるしかない」と突き返すことになりますが、
その前に何かできうることを探っている状態です。
ご理解いただければ幸いです。

お礼日時:2018/05/21 11:40

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aと関連する良く見られている質問

QEXCELのマクロが他のパソコンで動かない

マクロ初心者なのですが、どなたか教えてください。

自作のツールバーのボタンを押したら
そのボタンに対応するCSV形式のファイルから
データをひっぱってきて、自動でグラフ化するという
マクロを作りました。

私のパソコンでは正常に動くのですが
他の人のパソコンでそのファイルを開くと、
「このブックにあるVBAプロジェクト、
 ActiveXコントロール、およびその他のプログラミン
 グ関連の機能は失われています」
というメッセージボックスが出てきて
マクロが使えないんです。

私には全く理由が分からないので、どんな手がかりでも
いいので教えて下さい(;_;)よろしくお願いします。

Aベストアンサー

こちらのケースが該当するのではないでしょうか。

VBA が有効でないときに使用できない Excel の機能
http://support.microsoft.com/default.aspx?scid=kb;ja;282847

原因としては
1)Excel 2002 をインストールするときに、VBA のインストール設定を [インストールしない] にしている
2)システム ポリシー [Disable VBA for Office Applications] を使用している
などが考えられるようです。

1)についてはこちら。
Office アプリケーションのマクロウイルス対策(「VBA をインストールしない」の項)
http://www.microsoft.com/japan/office/previous/xp/techinfo/macrovirus/against.asp
Visual Basic for Applications をインストールする手順
http://support.microsoft.com/default.aspx?scid=kb;ja;281952


2)についてはこちらが参考になるかもしれません。
Microsoft Office XP のセキュリティ設定(「Disable VBA for Office applications」の項)
http://www.microsoft.com/japan/technet/security/guidance/secmod56.mspx

参考URL:http://support.microsoft.com/default.aspx?scid=kb;ja;282847

こちらのケースが該当するのではないでしょうか。

VBA が有効でないときに使用できない Excel の機能
http://support.microsoft.com/default.aspx?scid=kb;ja;282847

原因としては
1)Excel 2002 をインストールするときに、VBA のインストール設定を [インストールしない] にしている
2)システム ポリシー [Disable VBA for Office Applications] を使用している
などが考えられるようです。

1)についてはこちら。
Office アプリケーションのマクロウイルス対策(「VBA をインストールしない」...続きを読む

QEXCEL/VBAで、自分のPCだけエラーが出ます

下記は、wordの「@一覧表」文字の部分をExcelで作成した表(B3:E9)に置き換えるマクロですが、自分のPCだけ「Executeメソッドは失敗しました:Findオブジェクト」のエラーが出ます。
何が原因なのでしょうか、対処方法を教えて下さい。
ちなみに自分のPCは、EXCEL2003です。他のPCのEXCEL2003や自宅のEXCEL2007ではエラーは出ません。

Dim wordApp As Word.Application
Dim wordDoc As Word.Document
Dim wordRange As Word.Range

Set wordApp = New Word.Application
Set wordDoc = wordApp.Documents.Open(ThisWorkbook.Path & "\ひな型用ドキュメント.doc")
(途中略)
Set wordRange = wordDoc.Content
wordRange.Find.Execute "@一覧表", Forward:=True ←エラー
Range("B3:E9").Copy
wordRange.Paste

下記は、wordの「@一覧表」文字の部分をExcelで作成した表(B3:E9)に置き換えるマクロですが、自分のPCだけ「Executeメソッドは失敗しました:Findオブジェクト」のエラーが出ます。
何が原因なのでしょうか、対処方法を教えて下さい。
ちなみに自分のPCは、EXCEL2003です。他のPCのEXCEL2003や自宅のEXCEL2007ではエラーは出ません。

Dim wordApp As Word.Application
Dim wordDoc As Word.Document
Dim wordRange As Word.Range

Set wordApp = New Word.Application
Set wordDoc = wordApp.Documents....続きを読む

Aベストアンサー

補足です。
#4のimogasiさんの分で起きたエラーですが、マクロの問題ではないようです。私は、下位バージョンに対する、参照ライブラリのエラーだと思いましたが、どうやら違っていました。一度、Office のメインテしたほうがよいのかもしれません。

http://support.microsoft.com/kb/292744/ja
[BUG] Word のオートメーション クライアントで Find オブジェクトを呼び出す際にエラーが表示されるかクラッシュする

# 非管理下のシステムでこのエラーの発生を防ぐには遅延バインディングが唯一の方法です。

と書かれています。これを読んで、遅延バインディングにしたわけではありませんが、結果的には良かったようです。

QVBA 実行時エラー1004 rangeメソッドは失敗しました。globalオブジェクトのエラー

始めまして、VBA初心者のものです。
ただいまエクセルでグラフを作成しています。作業自体は単純作業の繰り返しなのでVBAを用いてやりたいのですが、マクロを実行したときに実行時エラー’1004’rangeメソッドは失敗しました。’_global’オブジェクトとメッセージが出て、実行できません。 デバックをすると以下の5行目で黄色のバーが出ていました。自分なりに原因を考えたのですがrangeの関係するところに、Range("A8:A1587,e8:e1587")というような変数を用いないやり方でやると上手くいくので、変数に関する定義がまずいと思うのですが、それ以上の事は分かりません。どなたか、分かる方がおりましたら、よろしくお願いします。また、プログラムは以下のようになります。

Sub 繰り返し()
'繰り返し
Dim s As Integer
For s = 0 To 17
Range("cells(8,1):cells(1580,1),cells(8,s+2):cells(1580,s+2)").Select
Range("cells(8,s+2)").Activate
Charts.Add
ActiveChart.ChartType = xlXYScatter
ActiveChart.SetSourceData Source:=Sheets("20081216_210647").Range( _
"cells(8,1):cells(1580,1),cells(8,s+2):cells(1580,s+2)"), PlotBy:=xlColumns
ActiveChart.SeriesCollection(1).Name = "=""0810p2x"""
ActiveChart.Location Where:=xlLocationAsNewSheet, Name:="0810p2x"
With ActiveChart
.HasTitle = True
.ChartTitle.Characters.Text = "0810p2x"
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "t"
.Axes(xlValue, xlPrimary).HasTitle = False
End With
Next
End Sub

始めまして、VBA初心者のものです。
ただいまエクセルでグラフを作成しています。作業自体は単純作業の繰り返しなのでVBAを用いてやりたいのですが、マクロを実行したときに実行時エラー’1004’rangeメソッドは失敗しました。’_global’オブジェクトとメッセージが出て、実行できません。 デバックをすると以下の5行目で黄色のバーが出ていました。自分なりに原因を考えたのですがrangeの関係するところに、Range("A8:A1587,e8:e1587")というような変数を用いないやり方でやると上手くいくので、変数に関する定義...続きを読む

Aベストアンサー

>ご指摘を受けたところを書き換えて回してみた結果、書き換えた箇所
>でエラーがでます。(実行時エラー’1004’’cells’メソッドは失敗
>しました。’global’オブジェクト)
>しかし、何が原因でエラーになるか自分では分かりません。

≪例1≫
Range(Cells(8, 1), Cells(1587, 2)).Select
上記の例では、RangeとかCellsの上位オブジェクトであるシート名が省略されています。
ActiveSheet.Range(ActiveSheet.Cells(8, 1), ActiveSheet.Cells(1587, 2)).Select
というわけです。
マクロ実行時に、Activeな(Excelで表示されている)シートが上位オブジェクトとして、自動的に認識されます。

≪例2≫
Sheets("Sheet2").Range(Cells(8, 1), Cells(1587, 2)).Select
上記の例では、Rangeのみシート名が記述されています。
Sheets("Sheet2").Range(ActiveSheet.Cells(8, 1), ActiveSheet.Cells(1587, 2)).Select
というわけです。
Activeなシートが、Sheet2の場合はエラーになりません。
しかし、ActiveなシートがSheet2以外の場合、エラーが発生します。
直前に、
Sheets("Sheet1").Select
などとしていれば、ActiveシートがSheet1になっていますから、エラーになります。

Sheets("Sheet2").Range(Sheets("Sheet2").Cells(8, 1), Sheets("Sheet2").Cells(1587, 2)).Select
と書いておけば安心です。
Withステートメントを使えばスッキリ纏めることができます。
With Sheets("Sheet2")
  .Range(.Cells(8, 1), .Cells(1587, 2)).Select
End With

# Sheets("Sheet2")の上位オブジェクトが省略されていることにも気がついてください。

>そこで自分で基礎を勉強したいのですが推薦できる参考書などがござ
>いましたら、教えていただけませんか?
私自身は、入門書程度の雑誌を1冊買っただけです。どれが良いとかはよく分かりません。
「マクロの記録」を活用して、参考コードを取得し、汎用性のあるコードに編集しています。
新しい単語があれば、文字カーソルを単語の上に置き、F1キーを押してVBAのヘルプを必ず見るようにしています。
躓いた時は、Web検索して欲しい情報を得たり、あるいは、こうした掲示板で先輩方のお力をお借りしています。

Excel(エクセル)VBA入門:目次
http://oshiete1.goo.ne.jp/kotaeru_reply.php3?q=4651404
エクセル入門・初級編
http://www.kenzo30.com/excel_kiso.htm

>ご指摘を受けたところを書き換えて回してみた結果、書き換えた箇所
>でエラーがでます。(実行時エラー’1004’’cells’メソッドは失敗
>しました。’global’オブジェクト)
>しかし、何が原因でエラーになるか自分では分かりません。

≪例1≫
Range(Cells(8, 1), Cells(1587, 2)).Select
上記の例では、RangeとかCellsの上位オブジェクトであるシート名が省略されています。
ActiveSheet.Range(ActiveSheet.Cells(8, 1), ActiveSheet.Cells(1587, 2)).Select
というわけです。
マクロ実行時に、Activeな...続きを読む

Q別のパソコンでエクセルのマクロを使いたい

マクロの自動記録で保存したエクセルファイルを別のパソコンで使用したいのですが方法が分かりません。
この質問サイトにも同様のものがありましたが、よく解りませんでした。

以下、質問サイトを抜粋しました。
---------------------------------------------------------------------------
エクセルマクロファイルをメモリ等に保存し、エクセルを開いてマクロを有効にしてください。
 ツール→マクロでマクロ一覧が出て来て対象のマクロを選択、編集をクリックするとマクロ構文(VBE)が出てきます。・・・・・以下、略
---------------------------------------------------------------------------

ここでまず、エクセルマクロファイルをメモリに保存して、別のPCでエクセルファイルを開いてもマクロが出てきません。

いろいろ試してみたのですが、最初に作成したマクロはPERSONAL.XLSが含まれていましたが、メモリに保存されていなかったようです。

PERSONAL.XLSを表示させてそれだけを保存すれば、確かにそちらにはマクロが入っていました。

PERSONAL.XLSも一緒に保存するにはどうすればいいのでしょうか?

マクロの自動記録で保存したエクセルファイルを別のパソコンで使用したいのですが方法が分かりません。
この質問サイトにも同様のものがありましたが、よく解りませんでした。

以下、質問サイトを抜粋しました。
---------------------------------------------------------------------------
エクセルマクロファイルをメモリ等に保存し、エクセルを開いてマクロを有効にしてください。
 ツール→マクロでマクロ一覧が出て来て対象のマクロを選択、編集をクリックするとマクロ構文(VBE)が出てきます。・・・・...続きを読む

Aベストアンサー

こんばんは。

>保存先を個人用マクロ ブックで作成したものですが、これだと、別のパソコンに移すことは出来ないのでしょうか?

絶対にできないわけではありませんが、Excel等の個人用マクロブックの持ち出しはお勧めできません。例えば、どんなトラブルがあるかと言われても、具体的にコピーして移動したからということではないのですが、そのままでも、時々トラブルが発生するから、というしかありません。

>出来なければ、個人用マクロ ブックで作成したマクロを「作業中のブック」に保存しなおすことはできないのでしょうか

一旦、「作業中のブック」と選択しておいて、「ひとつのセルをクリック」すれば、仮のマクロが、Module(1) の中に、Sub Macro1() と出来上がります。そこに、Personal.xls を開いて、Module(1) にコードをコピー&ペーストすればよいです。

もう一つの方法は、モジュール全体をテキストにしてエクスポートする方法です。モジュールを右クリックすると、[ファイルのエクスポート]と出てきますから、それで出力して、それをUSBメモリ等に入れ、他のPCのExcelで、今度は、逆に、[ファイルのインポート]とすれば、モジュールのマクロコード全体が入ります。

なお、個人用マクロブックは、なるべく不要なマクロは置かないようにしてください。そうしないと、起動に時間が掛かったりするようになります。

私自身は、わざわざExcelブックやWordのドキュメントを、USBメモリにコピーしないで、マクロのコードを、メモ帳(NotePad)に貼り付け、テキスト保存して、それを別のパソコンのExcel等のModuleに貼り付けることもあります。よほど特殊なマクロでない限りは、これで十分です。

こんばんは。

>保存先を個人用マクロ ブックで作成したものですが、これだと、別のパソコンに移すことは出来ないのでしょうか?

絶対にできないわけではありませんが、Excel等の個人用マクロブックの持ち出しはお勧めできません。例えば、どんなトラブルがあるかと言われても、具体的にコピーして移動したからということではないのですが、そのままでも、時々トラブルが発生するから、というしかありません。

>出来なければ、個人用マクロ ブックで作成したマクロを「作業中のブック」に保存しなおすことはでき...続きを読む

QSub ***( ) と Private Sub ***( ) の違い

初歩的な質問で申し訳ありませんが・・・

自分でコードを書いていても、イベントが発生したりした時の処理で、コードのウィンドウで上のドロップダウンリストで選択できる時の処理などは自動的に[Private Sub Command1_Click( )]などと出てくるのでそのまま使っています。自分で別途プロシージャーを作成する時は[Sub ****( )]としています。
ですがその違いを理解しないまま、自分で作成する時は[Private Sub]ではなくて[Sub]を使っています。

Sub ***( ) と Private Sub ***( ) の違いは何なんでしょうか?
どなたか説明頂けませんか?
よろしくお願いします。

Aベストアンサー

「Sub」の部分にカーソルを置いて[F1]を押せばヘルプが起動します。
「指定項目」のところに「Public」と「Private」の説明がありますよ。
省略して「Sub hogehoge()」とした場合は「Public」とみなされます。

Publicは「すべてのモジュールから呼び出せるプロシージャ」ということになります。
Privateとすると「同じモジュールの中からしか呼び出せないプロシージャ」となります。

もしExcelをお持ちでしたらExcelのVBEで標準モジュールを追加し、「Sub Test1()」と「Private Sub Test2()」を作成してみてください。
そしてExcelの[ツール]-[マクロ]-[マクロ(Alt+F8)]でマクロ実行のダイアログを表示させてみるとわかります。
ここには実行できるプロシージャの一覧が表示されますが、Test1は表示されているけれどTest2は表示されません。
Test1はPublicで、Test2はPrivateだからです。

QDoEvents関数って何?

こんにちは。

VBAやプログラミングに詳しい皆様に
教えていただきたい質問があります。

cells(1,1)からcells(5000,1)までの値を消去するときに
処理の進行状況を表示するためにuserform上にプログレスバーを表示したいと思います。

そこで下記のようなコードを入力しました。

userform1.show
for i =1 to 5000
cells(i,1)=""
userform1.progressbar1.value=i/5000*100
next i
unload userform1

しかしこれだとuserformの背景が真っ白になってしまい
ラベルの文字も消えてしまいます。
そこで「EXCEL VBA パーフェクトマスター」という本を見たら

for i =1 to 5000
cells(i,1)=""
userform1.progressbar1.value=i/5000*100
DoEvents
next i
unload userform1
と入力すれば解決することがわかりました。

しかし「DoEvents」についてあまり詳しく書いていなかったのでDoEvents関数をヘルプで見ると、
「発生したイベントがオペレーティング システムによって処理されるように、プログラムで占有していた制御をオペレーティング システムに渡すフロー制御関数です。」

と書いてあるのですが正直、書いてあることがよくわかりません。

どなたかDoEvents関数について、
もう少しわかりやすく教えていただけませんか。
それから、最初に書いたコードで実行すると
ユーザーフォームの背景が真っ白になってしまう原因も
教えていただけませんか?

よろしくお願いいたします。

こんにちは。

VBAやプログラミングに詳しい皆様に
教えていただきたい質問があります。

cells(1,1)からcells(5000,1)までの値を消去するときに
処理の進行状況を表示するためにuserform上にプログレスバーを表示したいと思います。

そこで下記のようなコードを入力しました。

userform1.show
for i =1 to 5000
cells(i,1)=""
userform1.progressbar1.value=i/5000*100
next i
unload userform1

しかしこれだとuserformの背景が真っ白になってしまい
ラベルの文字も消えてしまいます。
そ...続きを読む

Aベストアンサー

簡単に言うと、
OS に制御を渡すってことです。(ヘルプそのまんま)
時間が掛かるループ処理などの場合、ループが終わるまで制御は独占されてしまいます。
ですのでループ中は OS や Excel そのものにも再描画をさせる暇さえ与えません。
途中に DoEvents を入れると制御が OS に渡るので、OS は溜まっていた処理をそこで行うことができます。
結果、フォームの再描画などが行われることになります。

注意点ですが、
Private Sub CommandButton1_Click()
  Dim i As Long

  For i = 1 To 50000
    DoEvents
    Cells(i,1) = ""
  Next i
End Sub

Private Sub CommandButton2_Click()
  MsgBox "hoge"
End Sub

っていうフォームのコードがあった場合、
DoEvents を入れることによって、ループ中にユーザーがCommandButton2 を押すことによって CommandButton2 のクリック イベントも動いちゃいます。
CommandButton1 のクリック イベントではループの前に
CommandButton1.Enabled = False
CommandButton2.Enabled = False
を書いてフォーム上の CommandButton を無効にしておき、ループが終わったら
CommandButton1.Enabled = True
CommandButton2.Enabled = True
と書いて CommandButton を有効に戻してください。

これを工夫すれば、CommandButton2 で CommandButton1 のループを途中キャンセルする処理もすることができます。

Private Canceled As Boolean

Private Sub CommandButton1_Click()

  CommandButton2.Enabled = False

  Dim i As Long
  For i = 1 To 50000
    DoEvents

    If Canceled = True Then
      MsgBox "キャンセルしました"
      Exit Sub
    End If

    Cells(i, 1).Value = ""
  Next i
End Sub

Private CommandButton2_Click()
  Canceled = True
End Sub



コードの行頭にあるスペースは見易さのために全角スペースで作成していますので、これをこのままコピペするとエラーになるかもしれません。
コピペするなら行頭の全角スペースを半角スペースに直してください。

簡単に言うと、
OS に制御を渡すってことです。(ヘルプそのまんま)
時間が掛かるループ処理などの場合、ループが終わるまで制御は独占されてしまいます。
ですのでループ中は OS や Excel そのものにも再描画をさせる暇さえ与えません。
途中に DoEvents を入れると制御が OS に渡るので、OS は溜まっていた処理をそこで行うことができます。
結果、フォームの再描画などが行われることになります。

注意点ですが、
Private Sub CommandButton1_Click()
  Dim i As Long

  For i = 1 To 50000
...続きを読む

Qエクセルで特定の行を削除したいのですが。

エクセルで特定の行を一発で削除したいのですが、やり方がわかりません。
どなたか詳しい方お教えいただけませんでしょうか?

やりたいことは、B列に、特定の文字が有れば、その行全部を削除して上方向にシフトしていきたいのですが、マクロとかを使うのでしょうか?
宜しくお願いいたします。

Aベストアンサー

マクロを使う別の方法です。
XXXの部分を特定の文字に置きかえて実行してください。
また、「特定の文字があれば」というのが、その文字列を含む、というのでなくセルの値がその文字列ならば、というのであれば、LookAt:=xlPart の部分を LookAt:=xlWhole に書き換えてください。

Sub DelLines()
  Dim R As Range
  Do
    Set R = ActiveSheet.Range("B:B").Find(What:="XXX", LookAt:=xlPart)
    If R Is Nothing Then Exit Sub
    R.EntireRow.Delete
  Loop
End Sub

Qエクセル:マクロ「Application.CutCopyMode = False」って?

エクセルのマクロを記録していると

「Application.CutCopyMode = False」

というものがよく出てきますが、これは何でしょう?
どういう意味のものかわかりません。
削除しても差し支えないのもでしょうか?

Aベストアンサー

「Application.CutCopyMode = False」の前で
セルのコピー、または切り取りを行っていると思います。
これは、その操作(セルのコピー、または切り取り)を無効にしているだけです。
------------
Range("A1").Select
Selection.Copy ← これを無効にしている
Range("A2").Select
ActiveSheet.Paste
Application.CutCopyMode = False
------------
上記の場合であれば、「Application.CutCopyMode = False」を削除しても問題ありませんが、
以下の場合、貼り付け処理でエラーになります。
------------
Range("A1").Select
Selection.Copy
Range("A2").Select
Application.CutCopyMode = False
ActiveSheet.Paste ← ココでエラー
------------
ご自分で、セルをコピーしてみると分かると思いますが、コピーした範囲が点線で点滅されます。
「Application.CutCopyMode = False」をすると、
その点滅がなくなります。

「Application.CutCopyMode = False」の前で
セルのコピー、または切り取りを行っていると思います。
これは、その操作(セルのコピー、または切り取り)を無効にしているだけです。
------------
Range("A1").Select
Selection.Copy ← これを無効にしている
Range("A2").Select
ActiveSheet.Paste
Application.CutCopyMode = False
------------
上記の場合であれば、「Application.CutCopyMode = False」を削除しても問題ありませんが、
以下の場合、貼り付け処理でエラーになります。
------------
...続きを読む

QExcelVBA実行後に時々落ちる

VBA初心者です。
色々調べてみましたが、どうしても原因が判りません。よろしくお願いします。

Excel2007
Windows7

実行後時々Excelが落ちてしまいます。

エラーの内容
***************************
問題の署名:
問題イベント名:APPCRASH
アプリケーション名:EXCEL.EXE
アプリケーションのバージョン:12.0.6661.5000
アプリケーションのタイムスタンプ:4f7cda6d
障害モジュールの名前:EXCEL.EXE
障害モジュールのバージョン:12.0.6661.5000
障害モジュールのタイムスタンプ:4f7cda6d
例外コード:c0000005
例外オフセット:0004da42
OS バージョン:6.1.7600.2.0.0.256.48
ロケール ID:1041

この問題に関する追加情報:
LCID:1041
Brand:Office12Crash
skulcid:1041

*****************************

以下のVBAに問題があるのでしょうか?

内容は「フォームのテキストに数字を入力し、入力した回数繰り返す」というものです。

******************************

Private Sub キャンセル_Click()
MsgBox "キャンセルされました"
Unload 奉行変換
End Sub

Private Sub 変換実行_Click()
DM = 実行枚数.Value
実行枚数.Value = Empty
MsgBox DM & "枚の伝票を変換します"
Unload 奉行変換
変換
End Sub


**********************************

入力用のシートで入力した内容を他のシートにためていくものです。
以下の内容を標準モジュールに書いています。

**********************************

Public DM As Byte '入力フォームテキストに入力された数
Public BGyo As Integer
Public BCol As Integer

Sub 変換開始()
BGyo = ActiveCell.Row '入力セルの行取得
BCol = ActiveCell.Column '入力セルの列取得
奉行変換.Show
End Sub


Sub 変換()
Dim hgyo As Integer
Dim BGyoH As Integer

If BGyo = 5 Or BGyo Mod 23 = 5 And BCol = 2 Then ’特定のセルがアクティブな時だけ実行

データー用シートの最終行指定
hgyo = Worksheets("HANYO").Cells(1, 3).CurrentRegion.Rows.Count
hgyo = hgyo + 1

For n = 1 To DM
BGyoH = BGyo + 3
With Worksheets("HANYO")

.Cells(hgyo, 3).Value = Cells(BGyo, BCol)

.Cells(hgyo, 5).Value = Cells(BGyoH, BCol + 1)

.Cells(hgyo, 6).Value = Cells(BGyoH, BCol + 2)

.Cells(hgyo, 7).Value = Cells(BGyoH + 1, BCol + 2)

.Cells(hgyo, 8).Value = Cells(BGyoH, BCol)

If Cells(BGyoH + 1, BCol + 1) = 2 Then
.Cells(hgyo, 10) = 1
ElseIf Cells(BGyoH + 1, BCol + 1) = "" Then
.Cells(hgyo, 10) = ""
.Cells(hgyo, 11) = "0"
ElseIf Cells(BGyoH + 1, BCol + 1) = 1 Then
.Cells(hgyo, 10) = 1
.Cells(hgyo, 11) = 1
End If



.Cells(hgyo, 13).Value = Cells(BGyoH, BCol + 6)

.Cells(hgyo, 14).Value = Cells(BGyoH, BCol + 7)

.Cells(hgyo, 15).Value = Cells(BGyoH + 1, BCol + 7)

.Cells(hgyo, 16).Value = Cells(BGyoH, BCol + 10)



If Cells(BGyoH + 1, BCol + 6) = 2 Then
.Cells(hgyo, 18) = 1
ElseIf Cells(BGyoH + 1, BCol + 6) = "" Then
.Cells(hgyo, 18) = ""
.Cells(hgyo, 19) = "0"
ElseIf Cells(BGyoH + 1, BCol + 6) = 1 Then
.Cells(hgyo, 18) = 1
.Cells(hgyo, 19) = 1
End If

.Cells(hgyo, 21).Value = Cells(BGyoH, BCol + 4) & Cells(BGyoH + 1, BCol + 4)


End With
hgyo = hgyo + 1
BGyoH = BGyoH + 2
Next nd
BGyo = BGyo + 23

Next n
Else
MsgBox "アクティブセルが日付にありません。"
Exit Sub
End If

End Sub

Excelが落ちるのはこれを実行した後のみ時々起きますので
私が作成した内容に何か問題があるのだと思うのですが
調べても判りません・・・・

この内容で情報は足りるでしょうか?
よろしくお願いします。

VBA初心者です。
色々調べてみましたが、どうしても原因が判りません。よろしくお願いします。

Excel2007
Windows7

実行後時々Excelが落ちてしまいます。

エラーの内容
***************************
問題の署名:
問題イベント名:APPCRASH
アプリケーション名:EXCEL.EXE
アプリケーションのバージョン:12.0.6661.5000
アプリケーションのタイムスタンプ:4f7cda6d
障害モジュールの名前:EXCEL.EXE
障害モジュールのバージョン:12.0.6661.5000
障害モジュールのタイムスタンプ:4f7cda6d
例外コー...続きを読む

Aベストアンサー

こんにちは。

一応ひとつひとつ確認していきますが

>  Next nd

Neext に対応する For がありません。
確実にコンパイルエラーになる間違いです。
誤って消してしまった関連の記述があったのか、
関連の記述を削除した時に消し忘れたものが残ってしまっているのか、
確認しましょう。
///
 
 
以下、今回のトラブルに直接関わりがあるかは状況次第ですが、 

>  Public DM As Byte '入力フォームテキストに入力された数

Byte 型というのは、バイナリデータのやり取りに使う為のものですから
こういう使い方をするものではありません。間違いです。
ユーザーフォームの TextBox の .Value から
数値文字列を格納するのなら Variant 型が正解です。

  Public DM As Variant

確認の上、書換えておいた方が無難です。
///
 
 
>  Public BGyo As Integer
>  Public BCol As Integer
 
>  Dim hgyo As Integer
>  Dim BGyoH As Integer
以上4点の宣言は Long 型を使うのが正常です。
.Row プロパティ、.Column プロパティ の戻り値は Long 型です。
Integer 型には収まりきらない大きな数値を扱いますから
必然 Long 型になる、という覚え方でも、当面は構わないですけれど、
本来は取得するプロパティに合わせるものです。
  Public BGyo As Long
  Public BCol As Long

  Dim hgyo As Long
  Dim BGyoH As Long
後になってからエラー原因になりそうな不備は直しておきましょう。
///
 
 
Sub 変換() に欠けてる宣言は以下。これは今回のトラブルとは無関係です。
  Dim n As Long
  Dim nd As Long
(但し、nd に関しては、推測です。)
///
 
 
以上は、比較的基本的で、環境や動作条件に左右されないレベルの手当てです。
確認して、それでも解決できない場合、は以下。
 
 
  Sub 変換開始()
これは、どうやって呼び出してますか?
シート画面からAlt + F8などでマクロを直接実行するのでしょうか?
もしそうなら、このセクションは読み飛ばして結構です。
シートにあるボタンやシェイプから実行させている場合は
その点、具体的で詳細な情報が必要です。
また、他のマクロから呼び出している場合も同様です。
///
 
 
以上で解決の目途が立たない場合は、試しに
>  奉行変換.Show

  奉行変換.Show vbModeless
に換えてから実行するとどうなるか、知らせてください。
Worksheets("HANYO") にシートの保護を適用しているかどうか知らせてください。
///
 
 
以上、とりあえず、気が付いた点だけレスしておきます。
確認してみてください。

こんにちは。

一応ひとつひとつ確認していきますが

>  Next nd

Neext に対応する For がありません。
確実にコンパイルエラーになる間違いです。
誤って消してしまった関連の記述があったのか、
関連の記述を削除した時に消し忘れたものが残ってしまっているのか、
確認しましょう。
///
 
 
以下、今回のトラブルに直接関わりがあるかは状況次第ですが、 

>  Public DM As Byte '入力フォームテキストに入力された数

Byte 型というのは、バイナリデータのやり取りに使う為のものですから
こういう使...続きを読む

QEXCEL VBAのユーザーフォームに引数を渡す方法について

すいません、EXCEL VBAのユーザーフォームに引数を渡す方法についてご質問があります。

シート上にコマンドボタンを2つ用意する。
コマンドボタン1を押すと変数mは1
コマンドボタン2を押すと変数mは2
としてユーザーフォームを呼び出す。

Public m As Integer
Private Sub CommandButton1_Click()
 m = 1
 Call フォーム呼び出し(m)
End Sub

Private Sub CommandButton2_Click()
 m = 2
 Call フォーム呼び出し(m)
End Sub

Sub フォーム呼び出し(m As Integer)
 UserForm1.Show
End Sub

次にユーザフォームにコマンドボタンを1個置き、
ボタンを押したとき、mが1であれば「ボタン1」
mが2であれば「ボタン2」
とメッセージボックスを出し、ユーザーフォームを閉じる。

Private Sub CommandButton1_Click()
  If m = 1 Then
   MsgBox "ボタン2"
  ElseIf m = 2 Then
   MsgBox "ボタン2"
  End If
 Unload UserForm1
End Sub

プロシージャ間の引数渡しは色々なテキストに載っているのですが
ユーザーフォームに引数を渡す方法はどうも見つからず、
Private Sub CommandButton1_Click(m)
としても、コンパイルエラーとなってしまいます。
よろしくご教示をお願いいたします。

すいません、EXCEL VBAのユーザーフォームに引数を渡す方法についてご質問があります。

シート上にコマンドボタンを2つ用意する。
コマンドボタン1を押すと変数mは1
コマンドボタン2を押すと変数mは2
としてユーザーフォームを呼び出す。

Public m As Integer
Private Sub CommandButton1_Click()
 m = 1
 Call フォーム呼び出し(m)
End Sub

Private Sub CommandButton2_Click()
 m = 2
 Call フォーム呼び出し(m)
End Sub

Sub フォーム呼び出し(m As Integer)
 UserForm1...続きを読む

Aベストアンサー

こんばんは。

引数の渡し方には二種類ありますから、それを混乱しているのだと思います。必ずしも、以下の方法が良いというわけではありませんが、UserForm の立ち上げに対して、渡しようがない場合は、プロジェクト・スコープの変数を用いて、以下のようなスタイルで変数として渡すのが良いのではないかと思います。

'-------------------------------------------
'標準モジュール

Public m As Integer

'-------------------------------------------
'シートモジュール

Private Sub CommandButton1_Click()
 m = 1
 Call フォーム呼び出し
End Sub

Private Sub CommandButton2_Click()
 m = 2
 Call フォーム呼び出し
End Sub

Sub フォーム呼び出し()
 UserForm1.Show
End Sub

'-------------------------------------------
'UserForm モジュール

Private Sub CommandButton1_Click()
 MsgBox "ボタン" & m & "が押されました。", vbInformation
 Application.Wait Now + TimeSerial(0, 0, 1)
 Unload Me
End Sub

こんばんは。

引数の渡し方には二種類ありますから、それを混乱しているのだと思います。必ずしも、以下の方法が良いというわけではありませんが、UserForm の立ち上げに対して、渡しようがない場合は、プロジェクト・スコープの変数を用いて、以下のようなスタイルで変数として渡すのが良いのではないかと思います。

'-------------------------------------------
'標準モジュール

Public m As Integer

'-------------------------------------------
'シートモジュール

Private Sub CommandBu...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング