• ベストアンサー

エクセルマクロで外部ファイルを開きたい

DOUGLAS_の回答

  • DOUGLAS_
  • ベストアンサー率74% (397/534)
回答No.11

6)データ を書き込む列番号を変数「x」に格納します。 >n = rng.Columns.Count >'//データ抽出 >For i = n To 1 Step -1 >Select Case i >Case 2: x = 1 >Case 1: x = 2 >Case Else: x = i >End Select  「n」、つまり、対象範囲の列数「rng.Columns.Count」は常に「6」かと存じますが、この時点で、「6,5,4,3,2,1」という「i」の値に対応する「x」の値が「6,5,4,3,1,2」というように場合分けされました。  「6,5,4,3,1,2」というのは、「M列~R列」の中で何列目かということですので、「R - Q - P - O - M - N」という順に列を読み込んでいく、ということを現わしています。 -------------------------------- 7)当該グループ の セル範囲「rng」の中から x番目 の列の範囲(例えば「6番目」なら「R1:R20」)を上から順に「buf」という変数に格納していきます。 >For Each c In Range(rng.Columns(x).Address) >buf = buf & vbCrLf & c.Value >Next -------------------------------- 8)(7)の操作を「R - Q - P - O - M - N」という列の順に行ないます。 >Next i -------------------------------- 9)変数「buf」に データ を格納したとき、 buf = buf & vbCrLf & c.Value という コード によって、一番最初に、余分な「vbCrLf」(改行)が挿入されましたので、これを削除します。  ちなみに、そのとき、「buf」の初期値は「""」ですので、「buf & vbCrLf」の値は「改行のみ」です。 >buf = Replace(buf, vbCrLf, "", 1, 1) -------------------------------- 10)「buf」の値を クリップボード に格納します。 >'//クリップボードに格納 >With CB >.SetText buf >.PutInClipboard >.GetFromClipboard >End With -------------------------------- 11)念のため「buf」の値を「AA1」以下、下方向に貼り付けます。 >'//データ貼り付け(確認用) >ActiveSheet.Paste Destination:=Range("AA1") >これを入れるとうまく貼り付けができなかったので >削除して運用しています。 とお書きの場所です。  何がどう「うまく貼り付けができなかった」のかは存じませんが、操作に問題がなければ削除しても構わないかと存じます。 -------------------------------- 12)Range オブジェクト「rng」を解放します。 >Set rng = Nothing  この行も削除されたようですが、[Set ステートメント] によって、 Set rng = Range(~~) というように書くということは、「rng」という変数に「Range(~~)」という [Range オブジェクト] への参照を代入した、ということになるのですが、「Range(~~)」のところに「Nothing」を書くとどうなるか、ということが下記のように ヘルプ に載っています(「objectvar」というのは「rng」の部分です)。 (ここより)引数 objectvar と特定のオブジェクトとの関係を無効にします。引数 objectvar に Nothing を代入したときに、ほかの変数がそのオブジェクトを参照していなければ、それまでに参照していたオブジェクトに割り当てられているすべてのシステム リソースおよびメモリ リソースが、解放されます。(ここまで)  したがって、 Set objectvar = Nothing という オブジェクト を解放する1行を付ける習慣にした方がよいのかも知れません(私もこの点につきましては自身がありませんが。。。)。 -------------------------------- 13)最後に、[End ステートメント] で [Sub プロシージャ] を終了します。 -------------------------------- というようなことになりましょうか。

noro6857
質問者

お礼

コードのご説明を詳しくしていただきありがとうございました。 ここらへんを理解できないと、 たとえば、列を1列増やしたいときや収集順序を変えたいときなど、 いじる場所がわからないので、いくらかでもわかると助かります。 (あとは応用を試すことができるので) End Subは記述し忘れましたが当然入っています。 Set objectvar = Nothingはその前のコメント>'//データ貼り付け(確認用) の中の一部かと思い削除しましたが別の目的だったのですね。 戻してみます。 それぞれの用語については記述説明とあわせながら、あとで書籍をよく読んでみたいと思います。

関連するQ&A

  • エクセルの終了マクロ

    エクセルのマクロの記述で、 処理が終われば、マクロを記述しているエクセル自体を終了(ワークブックではなくアプリケーション)させたいのですが、できるでしょうか?

  • エクセルのマクロを記述したファイルを呼び出して実行

    エクセルのマクロを記述した外部ファイルを作成しておいて メイン(普通)のマクロの実行中にそのファイルを読み込んで、 マクロを実行させることは可能でしょうか? 可能なら方法をお願いします。

  • Excelファイルがマクロを含むか調べるには?

    Excell2003で作っていた多量のExcelファイルを、Excel2010で動かす事が必要になってきました。 で、指定フォルダにある複数のExcelファイルが、マクロを含んでいるかどうかを調べたいのです。 加えて、マクロを含んだExcelファイルのファイル名をリストアップしたいのですが、 どの様にしたら良いでしょうか? 適切なマクロなりともご教授いただきたく、よろしくお願いします。

  • エクセルのマクロで外部ファイルを開く

    セルに入力した内容をファイルネームとして外部ファイルを開きたいのですが どうすればいいのかわかりません。 具体的には 1.外部ファイルはFDで供給されます。 2.FDに入れられるファイル名は毎日かわります。 3.ファイル名は固定された名称+日付のフォーマットです。(例:file0802) 4.やろうとしているのはA1に\"file\"、B1にtoday関数で日付を入力して   A1+B1をファイル名としマクロよりそのファイル名でFDのファイルを  開きたい。 5.開いたファイルの一部をコピーしてHDD上にあるエクセルのファイルに  ペースト、このファイルにマクロを組み込みたいのです。 help等をいろいろ見たのですがこの内容に関するものが見つけられません。 もしかしたら出来ないのでしょうか? よろしくお願いします。

  • Excelで外部ファイルの取り込み(データの更新)をマクロ化したい

    C:\data のdataフォルダの中に「20060709.dat」「20060710.dat」「20060711.dat」・・・というようにファイル名に日付が入ったファイルがあります。 例えば、(データ)→(外部データの取り込み)で"sheet2"に「20060709.dat」を読み込んでいるとしします。 この時に"sheet1”のセルA1に「20060710」と入力してマクロボタンをクリックすると"sheet2"に「20060710.dat」を(データ)→(データの更新)で読み込むというような作業をマクロで自動化することは可能なのでしょうか? 可能であれば教えて頂きたいのですが。どうぞよろしくお願いします。 ちなみにマクロに関しては(自動記録)で作ったマクロを少しいじる程度の知識しかありません。Excel2000を使用しています。 以上、どうぞよろしくお願い致します。

  • 秀丸のマクロでファイルを新規秀丸にコピーしたい

    王次郎っす お疲れさまです 秀丸エディタのマクロ関数を使用してファイルの内容を新規秀丸にコピーしたいです クリップボードを使わずにコピーできる方法があったら教えてください 例えば、「memo.txt」というテキストファイルを開いた状態でマクロを実行した場合に 新規秀丸を作成し(newfile)、「memo.txt」の内容を新規秀丸にコピーしたいです。 クリップボードを使用すればできますが(copy⇒paste)、それだとクリップボードの内容が 消えてしまうのでクリップボードは使いたくないです。 よろしくお願いします

  • Html(表)のExcel出力

    現在、JavaScriptで以下の処理を行い、Htmlで書かれた 表をExcelで表示しています。 1.Htmlをクリップボードにコピー 2.new ActiveXObject("Excel.Application")でExcelインスタンスを 生成 3.Workbooks.Openでワークブックをオープン 4.オープンしたワークブックにクリップボードのHtmlを貼り付けて表示 以上の処理を、クリップボードを経由せず、Htmlで書かれた表をExcelに 表示することはできますか? お心当たりのある方はご教示お願いします。

  • EXCELで外部ファイルを参照したい

    EXCELで外部のテキストファイルを相対アドレスで参照したいのですが、マクロでないとできないのでしょうか。 たとえば、 他のファイルを参照するのは、「データ」→「外部データの取り込み」でできるのですが、特定のアドレスかファイル(絶対アドレス)しかできません。 (例えば同じフォルダ内にあるa.txtを参照したいときは、./a.txtみたいに。) どなたかわかる方、教えてください。

  • Html(表)のExcel出力

    現在、JavaScriptで以下の処理を行い、Htmlで書かれた 表(<table>タグで囲まれている)をExcelで表示しています。 1.Htmlをクリップボードにコピー 2.new ActiveXObject("Excel.Application")でExcelインスタンスを 生成 3.Workbooks.Openでワークブックをオープン 4.オープンしたワークブックにクリップボードのHtmlを貼り付けて表示 以上の処理を、クリップボードを経由せず、Htmlで書かれた表をExcelに 表示することはできますか? お心当たりのある方はご教示お願いします。

  • エクセルで個人用マクロを移すには

    エクセル2002で使用していた個人用マクロを、他のPCにインストールしたばかりのエクセル2003で使えるようにするには、どういう手順をとればいいのでしょうか。 エクセル2002がある方のPCの、 C:\Documents and Settings\User\Application Data \Microsoft\Excel\XLSTART\PERSONAL.XLS を、 エクセル2003があるPCのXLSTARTフォルダにコピーしてみたのですが、エクセルファイルを開いてVBエディタを起動しても、個人用マクロの標準モジュールが表示されないのですが。