• ベストアンサー

EXCEL2002で作成したマクロをEXCEL97で使いたい

 EXCEL2002で作成したマクロを、急遽、EXCEL97でも使用する必要が出てきてしまいました。  そこで、構文や引数のEXCELバージョン別の対比一覧表のようなものがある参考書、又は、ホームページがありましたら、是非、教えて下さい。  EXCEL97で使用すると、実行時エラーが発生してしまい、うまく動作しません。(主にシート名の記述のあるあたりで止まる)    ソート部分では、引数の(DataOption1)という部分を削除することでうまく動作しました。  マクロそのものはそれほど高度なものはなく、主にブック内でのデータシートから別シートに転記を行なう程度です。(フィルタオプション・ソート・msgbox・inputbox・selct・if then あたりを使用しています )  何かヒントだけでもよいのでお願いします。

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんにちは。 >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用のユーザー定義関数をいくつかおつくりだと思いますが、それでも、追いつかないところがあります。

marokuri
質問者

お礼

こんにちは。 幾度もご親切なご回答ありがとうございます。 とても専門的な知識をお持ちの方が、私のレベルにあわせて説明して下さっているのがわかり、とても嬉しいです。  ご回答をよく読んでみまして、ピンとくるものがありました。確かに、名前の部分とシート名のところがいつもひっかかっておりました。 名前部分とシート名からまずしっかり見直してみようと思います。  EXCEL97の環境は別の場所にあるため、すぐにはテストできませんが、教えていただいたヒントを元にがんばってみようと思います。 ありがとうございました。

その他の回答 (4)

  • sam_inoue
  • ベストアンサー率47% (27/57)
回答No.5

No.4ですが、 「参考URL」に記した私のサイトのURLは主催者側に削除されました。 「共存インストール」に関する説明ページのURLでしたが、教えて!goo サポート担当のメールによると、 ------------------------------------- 当サイトは質疑応答の場として運営しておりますので、ご自身がアフィリエイト をされているURLの紹介や、ご自身にキャッシュバック等利益が出るようなURLの 紹介もご遠慮いただいております。 ------------------------------------- だそうです。 これでは、世に多くある情報の配信先をここで紹介することは できないようです。 なぜなら、現在では個人サイトでもGoogleAdsense等の広告を 貼っていないサイトを探す方が困難だからです。 他の掲示板でもこのような排他的な攻撃を受けたことはありません。 別にアクセス数はあるレベルにいるので、 ここでアクセス稼ぎをやるつもりはないし、 何回も回答しているなかで、自サイトのURL紹介はわずかです。 このような閉鎖的な考え方の掲示板では、 質問される方にも閉鎖的な回答しかできないので、 私は今後、この掲示板での回答は一切いたしません。 もし、意見がある方があるなら、左の「sam_inoue」の 名前の方をクリックしてメールをいただければ幸いです。

marokuri
質問者

お礼

 せっかくのご親切によるご回答なのに、不快な思いをさせてしまい申し訳ありません。参考URLはご回答を頂きすぐ確認して、とても参考になり、ありがたく思っております。  ありふれた言葉ですが、情報も多くありすぎると、本当に探したいものが見つからない事が多いと思います。 せっかく良いホームページを教えていただき、質問者の私も、とても喜んでおりましたのに、残念です。  お気にさわるお気持ちも分かりますが、どうか、一切回答しないなどとおっしゃらず、又助けていただきたいです。

  • sam_inoue
  • ベストアンサー率47% (27/57)
回答No.4

>自宅にも97の環境がすでにないので、 >自動記録などでコードを確認することがなかなかできません。 >現在使用していないノートパソコンをEXCEL97に >落として作り直そうかなと考えています。 別のPCでなくても「共存インストール」という方法があります。 古い方からインストールしないとマズいので、 現バージョンもインストールし直しにはなりますが。 私は1台のPCに97,2000,2002,2003をインストールしています。 ヘルプもショートカットで集めておけば、 立ち上げていないExcelのバージョンのヘルプも 随時見ることができます。

marokuri
質問者

お礼

とても参考になりました。ありがとうございます! 一台のPCに97から2003が共存できるのですか。 そのような方法があるとは知りませんでした。

  • sam_inoue
  • ベストアンサー率47% (27/57)
回答No.2

ExcelはOfficeの中でもバージョン互換が高い方だと思います。 でも、原則としては実行される可能性がある最も低いバージョンに合わせて作成することです。 新機能については上位側のバージョンのヘルプで分かりますが、 今回のように引数だけが変更になったような場合など、 動作確認段階で発覚することもありますが、 下位バージョンに合わせて作成していればほとんどが問題は起きないはずです。

marokuri
質問者

お礼

早速のご回答ありがとうございます。 EXCEL97で使用する事は全く念頭においていなかったもので、困っております。 もともとEXCLE2002で使用するということを前提に作り出したところ、未だ会社に数多く残っているEXCEL97でも使えないかということに急遽なってしまいまして・・ 自宅にも97の環境がすでにないので、自動記録などでコードを確認することがなかなかできません。  現在使用していないノートパソコンをEXCEL97に落として作り直そうかなと考えています。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんにちは。 そういうカテゴリのことを、Excelのマイグレーション(Migration)といいますが、内容的には、プロの開発者のためのものですから、常識的なレベルの内容はないかもしれませんね。 Excelの VBA開発(ソリューション)は、97をベースにしますから、ある程度、VBAの経験者なら、コードをざっとみれば分るはずです。 >ソート部分では、引数の(DataOption1)という部分を削除することでうまく動作しました。 必要なものだけを、取り上げれば、エラーにはなりませんね。主に、一番最後のあたりの行だったような気がします。 >主にシート名の記述のあるあたりで止まる あまり記憶がはっきりしていないのですが、シート名に全角と半角の認識の仕方が、旧バージョンと違いがあったような気がしますね。また、シートをIndexで取るようなコードは、初歩的にダメだということです。それから、フィルタオプションは、記録マクロレベルですと、一旦、シートのSelectをしないと、エラーで弾かれますね。 オブジェクトとして、VBA と Office と Excel とがありますが、Excelに関する部分が、作業手順を守らないと、言うことを聞いてくれないことが多いです。 エラーになったところの周辺のコードを見せていただければ、分るかもしれません。

marokuri
質問者

お礼

補足の補足になりますが、コードの中のシート名にある「センター」の部分はこのページでは全角になってしまいましたが、本来は全て半角です。 シート名そのものが半角になっており、コードも半角で記述しております。 やはり、全角と半角のシート名に問題があるのでしょうか・・  とても勉強になるご回答をありがとうございました。

marokuri
質問者

補足

早速のご回答ありがとうございます!! エクセルマクロは少しだけ習って、あとは本を見ながらの独学ですので基本的な事がよくわかっておりません。 初心者のコードで恥ずかしいのですが、何かここからお気づきの点などございましたら、教えていただけるとうれしいです。 *************************************** ◆実行時エラー 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 部分で止まります

関連するQ&A

  • エクセルのマクロ作成で困ってます

    マクロ初心者です。 ”Sheet1にあるデータについて、複数条件で抽出後、Sheet2の表に転記” という動作をマクロで組みました。 ここまでは良かったのですが、Sheet2に転記する際、下記の様にさらに条件を付加したいと思っています。 やりたいこと(ア) Sheet1で条件によりたとえば10個のデータを抽出できたとし、 1~6個目までは、Sheet2の1行~6行に転記、 7~10個目までは、Sheet2の11行~14行に転記。 ※”6個目まで1~6行に転記”というのは決まっているのですが、  この10個というのは、例であって、5個だったり、14個だったり、  抽出したデータにより異なるので、変数です。 やりたいこと(イ)   Sheet1から、さらに別の条件で抽出したデータを、  やりたいこと(ア)の10個目を転記した行のあとすぐ(例でいうと15行目)から転記したい。  ※やりたいこと(ア)で抽出した条件が6個以下だった場合、11行目から転記。 以上の2つです。 条件の抽出までは出来るのですが、 (ア)の7個目から別のところに転記 (イ)の別の条件で抽出したデータを(ア)の次(6個以下の場合は11行目)から転記 をどうやって組んだら良いかわかりません。 もし分かる方がいらしたら、 どのようなコマンド(?)を使ったら良いのか、 ご教示いただけると助かります。 よろしくお願いします!

  • VBAでのエラー(新しいマクロの記録)

    新しいマクロの記録で、work1にてソート等を行って、 新しいマクロ(ソート等)を作成しました。 このマクロは単体で正常に動作するのですが、 sheet1の別のマクロにカット&ペーストで追加し、 動作させたところエラーになってしまいました。 パス的な問題だと思いますが、いまいち理解できません。 以下、ソートの中身 Sheets("work1").Select Columns("A:H").Select Selection.Sort Key1:=Range("B2"), Order1:=xlAscending, Key2:=Range("C2") _ , Order2:=xlAscending, Key3:=Range("F2"), Order3:=xlAscending, Header:= _ xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _ SortMethod:=xlPinYin, DataOption1:=xlSortNormal, DataOption2:= _ xlSortNormal, DataOption3:=xlSortNormal

  • エクセル マクロ

    エクセルマクロで、複数ファイルにある全シートの情報を、別ファイルの1シートに転記したいのですが、なかなか上手く行きません。(ほぼ初心者です。) 詳細は↓です。どなたかご教授の程よろしくお願いいたします。 【やりたいこと】 同一フォルダ内にある約60個のファイルの、全てのシート内の情報を別の集計用ファイルに転記する。 (1) ファイル毎にばらばらなシート名&シート数で、これら全てのデータを集計用ファイルに転記するには?(シート数は1ファイルあたり1シートから最大13シート) (2) 以前に似たような作業をした時は、ファイル名をいちいち集計用ファイルにコピペして読み込ませたが、こうした手間を掛けずに一括処理するには? ※転記作業自体は「マクロの記憶」機能で書き出すので、それ以外の、特に始まりと終わりの部分を教えて下さい。 ※転記内容自体はあまり複雑ではなく、集計用ファイルに1シート1行として転記し、ズラッと下に120行書き込むつもりです。 説明が分かりづらい部分があればご指摘ください。よろしくお願いいたします。

  • 複数シートでしょう可能なマクロ作成法

     マクロ初心者です。お教えください。  マクロを用いてデータ処理を行っています。1月のシートを用いてマクロ作成をすると、プログラムの 途中ですが以下のようになります。    Application.CutCopyMode = False ActiveWorkbook.Worksheets("1月").Sort.SortFields.Clear ActiveWorkbook.Worksheets("1月").Sort.SortFields.Add Key:=Range("R13"), _ SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("1月").Sort  この1月限定部分を変更して12ヶ月のいずれの月でも使用可能にしたいのですが、  どのように変更すべきかお教えください。  よろしくご教授ください。  

  • Excel 2000 のVBAにおけるソートについて教えて下さい。

    Excel2002のVBAで、並び替えをマクロ記録させると、Excel2000ではなかったものがあるのですが、これはどんな意味なのですか? 2002で記録されたマクロは、 Selection.Sort Key1:=Range("E2"), Order1:=xlDescending, Header:= xlGuess,OrderCustom:=1, MatchCase:=False,Orientation:=xlTopToBottom, SortMethod:=xlPinYin, DataOption1:=xlSortNormal です。このうち2000のマクロ記録では最後の DataOption1:=xlSortNormal がないのです。この2002以降(?)で記録されるこの部分はどのような働きをするのですか? また2000では同じような働きをさせるにはどのようにマクロを記述すればいいのですか? よろしくお願いします

  • EXCEL2002のマクロについて

    EXCEL2002のマクロについて教えて下さい。 元々はEXCEL97で作成したファイルなのですが、EXCEL97、2000上では不具合はないのですが、2002になるとシート全体が選択された状態で画面が固まったようなメモリ不足のような状態に陥ってしまいます。ちなみにマクロ処理はオープン時に行っています。 ================================================ Workbooks("ファイル名").Sheets("シート名").Select ================================================ 上のようなシート全体を指定する部分が原因らしく、この命令(複数)をコメントでつぶすと正常に処理されます。 (上記命令をコメントでつぶしているため一部の処理は未処理) 原因はEXCEL2002の不具合でしょうか。パッチが出ていたりするのでしょうか。 何度もシートを選択しているのが悪いのでしょうか?? しかし97、2000では問題ありませんでした。 2003ではほかの命令を使用しなくてはいけないのでしょうか?? わかる方教えてください。宜しくお願い致します。

  • EXCELでマクロが

    昨日から、期待する動きでなくなりました。 シートに新たに数式を加え、rank関数ではきちんと表示するのですが、マクロを動かすと、 期待した動きでなくなりました。 Sub Sheet2STD昇順並べ替え() ' ' Sheet2STD昇順並べ替え Macro ' ' Range("B6:V24").Select ActiveWorkbook.Worksheets("Sheet2").Sort.SortFields.Clear ActiveWorkbook.Worksheets("Sheet2").Sort.SortFields.Add Key:=Range("C7:C24") _ , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("Sheet2").Sort .SetRange Range("B6:V24") .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With Range("A1").Select End Sub 図にある下向きの矢印にマクロを登録しています。

  • エクセルのマクロ記録を他のシートでも実行したい

    エクセル2010を使用しています。 シート1でマクロ記録を使用しデータの並び替えをし、 同じブック内にシート1をコピーしてシート2としました。 このシート2でもシート1で行ったデータの並び替えをしたいのですが シート2ではマクロは実行されませんでした。 わからないながらもVBAを見たところ下記のように 記述されおりましたが、どのような修正をすればよいかご教授いただけると助かります。 ちなみに、シート1でマクロを記録し、そのシートを同ブック内に複数コピーして それぞれのシートでマクロを実行させるということを考えています。 Sub Macro1() ' ' Macro1 Macro ' ' Range("A11:Q17").Select ActiveWorkbook.Worksheets("1").Sort.SortFields.Clear ActiveWorkbook.Worksheets("1").Sort.SortFields.Add Key:=Range("B11:B17"), _ SortOn:=xlSortOnValues, Order:=xlAscending, CustomOrder:="日,月,火,水,木,金,土" _ , DataOption:=xlSortNormal ActiveWorkbook.Worksheets("1").Sort.SortFields.Add Key:=Range("A11:A17"), _ SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("1").Sort .SetRange Range("A11:Q17") .Header = xlGuess .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With End Sub

  • Excelのイベントマクロ

    Private Sub Worksheet_Activate()に関する質問です。 ワークシート1と2があるとします。 ワークシート1は普通のデータが記されており、それのソートを実行するマクロをMacro1、そのデータから重複したものを外してソートするマクロをMacro2とし、Macro1から呼び出してます。 今、シート2を開いたときは必ず、シート1でMacro1を実行するようにしたいのですが、以下のように記述すると、無限ループになってしまいうまくいきません。 どなたか、方法をお教えください。 Sheet2に記載したイベントマクロ Private Sub Worksheet_Activate() Sheets("Sheet1").Select Macro1 Sheets("Sheet2").Select End Sub 標準モジュールに記載したマクロ Sub Macro1() Dim team As Integer ActiveSheet.Unprotect ("pass") Range("A3:c18").Select Selection.Sort Key1:=Range("c3"), Order1:=xlAscending, Key2:=Range("A3") ,Order2:=xlAscending, Header:=xlNo,OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod:=xlPinYin, DataOption1:=xlSortNormal, DataOption2:=xlSortNormal team = Range("b1").Value ActiveSheet.PageSetup.PrintArea = "$A$3:$c$" + CStr(team + 2) Macro2 Range("A1").Select ActiveSheet.Protect ("pass") End Sub Sub Macro2() Range("i3:j18").ClearContents Range("i3").Select Selection.Consolidate Sources:="R3C6:R18C7", Function:=xlMax, TopRow:=False,LeftColumn:=True, CreateLinks:=False Range("i3:k18").Select Selection.Sort Key1:=Range("k3"), Order1:=xlAscending, Header:=xlNo,OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod:=xlPinYin, DataOption1:=xlSortNormal, DataOption2:=xlSortNormal Range("j3:j18").Select Selection.NumberFormatLocal = "0_);[赤](0)" End Sub

  • 【Excel VBA】コンボボックスで選択した値の取得

    Excel2003を使用しています。 SheetAから、あるシート(都度選択)にデータを転記するマクロを作成しています。 当初は、下記のように InputBox で、転記先のシート名を入力して、そこからシート名を取得していましたが、確実にシート名を取得するために、ユーザーフォームのコンボボックスから選択するように、変更したいと思います。  MySht = InputBox("転記するシート名を入力してください")   With Sheets("SheetA")    .Range("H6:J9").Copy     Sheets(MySht).Range("M7") ~ これを、コンボボックスで選択した値を上記のコードでいう、MySht に設定(?)したいのですが、どのようにしたらいいでしょうか? コンボボックスで選択した値をセルに転記する方法はわかるので、とりあえず、今は一旦セルに転記していますが、コード内で直接(…というと変かもしれませんが)設定できるのであれば、教えていただきたいのです。 自分だけが使用するものならば、InputBox で十分なのですが、選択するシートのシート名に数字が含まれているので、全角や半角の入力ミスを避けるために、コンボボックスで選択するようにしたらどうかと思ったのですが、何か他にも良い方法があれば、あわせて教えていただけると嬉しいです。 よろしくお願いします。

専門家に質問してみよう