- ベストアンサー
EXCEL2002で作成したマクロをEXCEL97で使いたい
EXCEL2002で作成したマクロを、急遽、EXCEL97でも使用する必要が出てきてしまいました。 そこで、構文や引数のEXCELバージョン別の対比一覧表のようなものがある参考書、又は、ホームページがありましたら、是非、教えて下さい。 EXCEL97で使用すると、実行時エラーが発生してしまい、うまく動作しません。(主にシート名の記述のあるあたりで止まる) ソート部分では、引数の(DataOption1)という部分を削除することでうまく動作しました。 マクロそのものはそれほど高度なものはなく、主にブック内でのデータシートから別シートに転記を行なう程度です。(フィルタオプション・ソート・msgbox・inputbox・selct・if then あたりを使用しています ) 何かヒントだけでもよいのでお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 >Range("M所属_センター") こういう使い方をする場合は、まず、例: Range("A1:D10").Name ="M所属_センター" というコードを足しますが、Name は、Rangeオブジェクトのメンバには違いないのですが、シートを特定化して、以下のようなコードを付け加えてください。 例: △ Sheets("Q建屋センター").Range("A1:D10").Name = "M所属_センター" ただし、あまり、お勧めできない方法です。 ○ Range("A1:D10").AdvancedFilter と、できれば、一般的な、Range("A1:D10") の書き方にし、名前を使わないほうがよいです。私は、はっきりとした理由はありませんが、Name で登録したものは、ブック-シートが、暗黙的に特定化されるからのような気がします。 つまり、難しく考えると、Rangeオブジェクトは、確かに、Applicationのメンバに存在しているのですが、シートオブジェクトにも存在しています。それを、シートの中で使っていくと、位置のない物を指定するという矛盾が起きる可能性があるのではないか、と考えます。 >Sheets("出力センター1").Select これは、私が前回述べたとおりで、全角半角の違いが出てくるものだと思います。私の記憶が曖昧でしたので、今試してみましたが、やはり全角と半角の違いで通りませんでした。非常に間違いやすいものですが、シート名の数字は、半角にするのが、一応のルールにしてください。 これで様子をみていただけますか? 私個人は、シートのObjectNameを使うようにしています。それは、ユーザーがシート名を変更してしまったりしたときの対処なのです。それから、曖昧さが減ります。 後は、細かいことを言えばキリがありません。Select を減らしてどうこうなどというのは、「最適化」の問題に発展しますので、よほど、プロシージャが、100行以上のコードでなければ、私は申しません。それに、このAdvancedFilterは便利なのですが、その使い方は慣れても、ややこしいと感じています。 なお、 >自宅にも97の環境がすでにないので、自動記録などでコードを確認することがなかなかできません。 開発用には、必要なので、私は時々チェックのために使いますが、だからといって、97にあわせていたら、とてもやっていられない部分があります。だいたいは、開発する人たちは、97用のユーザー定義関数をいくつかおつくりだと思いますが、それでも、追いつかないところがあります。
その他の回答 (4)
- sam_inoue
- ベストアンサー率47% (27/57)
No.4ですが、 「参考URL」に記した私のサイトのURLは主催者側に削除されました。 「共存インストール」に関する説明ページのURLでしたが、教えて!goo サポート担当のメールによると、 ------------------------------------- 当サイトは質疑応答の場として運営しておりますので、ご自身がアフィリエイト をされているURLの紹介や、ご自身にキャッシュバック等利益が出るようなURLの 紹介もご遠慮いただいております。 ------------------------------------- だそうです。 これでは、世に多くある情報の配信先をここで紹介することは できないようです。 なぜなら、現在では個人サイトでもGoogleAdsense等の広告を 貼っていないサイトを探す方が困難だからです。 他の掲示板でもこのような排他的な攻撃を受けたことはありません。 別にアクセス数はあるレベルにいるので、 ここでアクセス稼ぎをやるつもりはないし、 何回も回答しているなかで、自サイトのURL紹介はわずかです。 このような閉鎖的な考え方の掲示板では、 質問される方にも閉鎖的な回答しかできないので、 私は今後、この掲示板での回答は一切いたしません。 もし、意見がある方があるなら、左の「sam_inoue」の 名前の方をクリックしてメールをいただければ幸いです。
お礼
せっかくのご親切によるご回答なのに、不快な思いをさせてしまい申し訳ありません。参考URLはご回答を頂きすぐ確認して、とても参考になり、ありがたく思っております。 ありふれた言葉ですが、情報も多くありすぎると、本当に探したいものが見つからない事が多いと思います。 せっかく良いホームページを教えていただき、質問者の私も、とても喜んでおりましたのに、残念です。 お気にさわるお気持ちも分かりますが、どうか、一切回答しないなどとおっしゃらず、又助けていただきたいです。
- sam_inoue
- ベストアンサー率47% (27/57)
>自宅にも97の環境がすでにないので、 >自動記録などでコードを確認することがなかなかできません。 >現在使用していないノートパソコンをEXCEL97に >落として作り直そうかなと考えています。 別のPCでなくても「共存インストール」という方法があります。 古い方からインストールしないとマズいので、 現バージョンもインストールし直しにはなりますが。 私は1台のPCに97,2000,2002,2003をインストールしています。 ヘルプもショートカットで集めておけば、 立ち上げていないExcelのバージョンのヘルプも 随時見ることができます。
お礼
とても参考になりました。ありがとうございます! 一台のPCに97から2003が共存できるのですか。 そのような方法があるとは知りませんでした。
- sam_inoue
- ベストアンサー率47% (27/57)
ExcelはOfficeの中でもバージョン互換が高い方だと思います。 でも、原則としては実行される可能性がある最も低いバージョンに合わせて作成することです。 新機能については上位側のバージョンのヘルプで分かりますが、 今回のように引数だけが変更になったような場合など、 動作確認段階で発覚することもありますが、 下位バージョンに合わせて作成していればほとんどが問題は起きないはずです。
お礼
早速のご回答ありがとうございます。 EXCEL97で使用する事は全く念頭においていなかったもので、困っております。 もともとEXCLE2002で使用するということを前提に作り出したところ、未だ会社に数多く残っているEXCEL97でも使えないかということに急遽なってしまいまして・・ 自宅にも97の環境がすでにないので、自動記録などでコードを確認することがなかなかできません。 現在使用していないノートパソコンをEXCEL97に落として作り直そうかなと考えています。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 そういうカテゴリのことを、Excelのマイグレーション(Migration)といいますが、内容的には、プロの開発者のためのものですから、常識的なレベルの内容はないかもしれませんね。 Excelの VBA開発(ソリューション)は、97をベースにしますから、ある程度、VBAの経験者なら、コードをざっとみれば分るはずです。 >ソート部分では、引数の(DataOption1)という部分を削除することでうまく動作しました。 必要なものだけを、取り上げれば、エラーにはなりませんね。主に、一番最後のあたりの行だったような気がします。 >主にシート名の記述のあるあたりで止まる あまり記憶がはっきりしていないのですが、シート名に全角と半角の認識の仕方が、旧バージョンと違いがあったような気がしますね。また、シートをIndexで取るようなコードは、初歩的にダメだということです。それから、フィルタオプションは、記録マクロレベルですと、一旦、シートのSelectをしないと、エラーで弾かれますね。 オブジェクトとして、VBA と Office と Excel とがありますが、Excelに関する部分が、作業手順を守らないと、言うことを聞いてくれないことが多いです。 エラーになったところの周辺のコードを見せていただければ、分るかもしれません。
お礼
補足の補足になりますが、コードの中のシート名にある「センター」の部分はこのページでは全角になってしまいましたが、本来は全て半角です。 シート名そのものが半角になっており、コードも半角で記述しております。 やはり、全角と半角のシート名に問題があるのでしょうか・・ とても勉強になるご回答をありがとうございました。
補足
早速のご回答ありがとうございます!! エクセルマクロは少しだけ習って、あとは本を見ながらの独学ですので基本的な事がよくわかっておりません。 初心者のコードで恥ずかしいのですが、何かここからお気づきの点などございましたら、教えていただけるとうれしいです。 *************************************** ◆実行時エラー 1004◆ *************************************** 「抽出した範囲にはフィールド名がないか、または不正なフィールドです」 Sub FOセンター選択() Sheets("Q建屋センター").Select Range("M所属_センター").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range _ ("B1:K2"), CopyToRange:=Range("B10:K10"), Unique:=False Range("B10").Select End Sub ■range("M所属_センター")あたりで止まります **************************************** ◆実行時エラー 9◆ **************************************** 「インデックスが有効範囲にありません。」 Sub FOセンター1() Sheets("出力センター1").Select Range("A1").Select Sheets("DB人員").Range("A1").CurrentRegion.AdvancedFilter Action:=xlFilterCopy, _ CriteriaRange:=Sheets("Q建屋センター").Range("AA10:AH11"), CopyToRange:=Range( _ "A1:H1"), Unique:=False Range("F8").Select End Sub ■Sheets("出力センター1").Select 部分で止まります
お礼
こんにちは。 幾度もご親切なご回答ありがとうございます。 とても専門的な知識をお持ちの方が、私のレベルにあわせて説明して下さっているのがわかり、とても嬉しいです。 ご回答をよく読んでみまして、ピンとくるものがありました。確かに、名前の部分とシート名のところがいつもひっかかっておりました。 名前部分とシート名からまずしっかり見直してみようと思います。 EXCEL97の環境は別の場所にあるため、すぐにはテストできませんが、教えていただいたヒントを元にがんばってみようと思います。 ありがとうございました。