• ベストアンサー

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

DOUGLAS_の回答

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

 それでは、もともとの「前回の分のQ&AはNo7の記述」ではなくて「noro6857 さんのお手許にある コード」について説明をさせていただきます。  ヤリタイことができればよいようなものですが、この際、Excel VBA のお勉強だと思ってお付き合いくださいね。  最初にお断りしておきますが、今回も回答を3つに分割しております。 --------------------------------  先ず、最初に コード の一番最後にあるべき End Sub が抜けているようですが、一番最後に入っていますよね。 -------------------------------- 1)最初に、[Sub ステートメント] で [Sub プロシージャ] を宣言します。  何のことかさっぱりお分かりにならなくても結構です。  ここから、「End Sub」までが、1括りの マクロ だとぐらいに思っていただければ結構です。 >Sub Macro1() >' >' Macro1 Macro >' マクロ記録日 : 2010/2/9 ユーザー名 : QDELLSP2 >'  「'」で始まる行は コメント ですので、「Sub Macro1()」の次の4行は削除しても構いません。 -------------------------------- 2)変数・定数などを宣言します。  こちらも、初心者の内は、お分かりにならなくて結構です。 >Dim buf As String, buf2 As String, CB As New DataObject >Dim rng As Range 'データセル範囲 >Dim c As Range 'データセル >Dim n As Integer 'データセル範囲の列数 >Dim i As Integer 'ループカウンター >Dim x As Integer 'オフセット量 -------------------------------- 3)最終的に、「AA1:AA500」に データ を書き出しますので、予め、この範囲の データ を クリア しておきます。 >'//旧抽出データ消去 >Range("AA1:AA500").ClearContents -------------------------------- 4)「A:R」列内にある「アクティブセル を含む グループ」を編集対象とするため、先ず、「A:R」列外が アクティブセル になっている場合は、即時、マクロ を中止します。 >'//選択セルが対象列範囲外なら中止 >If Intersect(ActiveCell, Columns("A:R")) Is Nothing Then Exit Sub  ということで、ここの コード は「Columns("A:R")」でなくて、「Columns("M:R")」でもよいのかも知れませんが、上記の意味をよくお考えいただいてお決めください。 -------------------------------- 5)当該グループ の セル範囲 を Range オブジェクト「rng」に格納します。 >'//データ表示数式セル範囲の取得(エラー表示セルは除外) >Set rng = Range("M" & ActiveCell.Row, "R" & ActiveCell.End(xlDown).Row) >Set rng = rng.SpecialCells(xlCellTypeFormulas, 7)  1行目の コード は、『アクティブセル と同じ行にある M列 の セル』と『アクティブセル で [Ctrl] + [↓] を押下したときに移動する セル と同じ行にある R列 の セル』とによって囲まれた範囲 を「rng」に セット しています。  2行目の コード は、「rng」という範囲の中で、『[編集(E)] - [ジャンプ(G)...] = [ジャンプ] ダイアログ - [セル範囲(S)...] = [選択オプション] ダイアログ - [選択] セクション の中から [数式(F)] の中の [数値(U)]・[文字(X)]・[論理値(E)] に チェック を付けて、[OK] すると得られる セル範囲』を選択しています。

noro6857
質問者

お礼

【質問1】 空白行は、実態上収集する必要はありません。 ただしエラーセルは単一セルに発生することもあり得るので 収集しないと、列ごとの行数が不一致になってしまうため 収集が必要かもしれません。 行単位のエラーは、下記関数等により空白に置き換えています。 【質問2】 その都度集計前作業として手動で算式削除をしています。というのも最終行がデータであっても不要なものは削除するため、これはその都度見て判断しなくてはなりません。 【質問3】 下記関数式参照(空白行にするため、内容判断の上L列のセルを手動削除。) 【質問4】 下記関数式参照(R列) 【質問5】 下記関数式参照(B1)およびR3 【質問6】【質問7】 下記関数式参照(R3) 関数式は長くなるため若干関連セルを省略してありますが最低限の部分でご紹介します。 ●A1(元データ) 08月01日(日) により文字列でB1に「100801」と表示します。 ●B1 ="10"&LEFT(A1,2)&MID(A1,((FIND("月",A1,1)-1)+1)+1,2) ●E3(時間をふたけたにするための調整) =IF(ISERR(FIXED(VALUE(LEFT(A3,(FIND(":",ASC(A3),1)-1))),0,TRUE)),#REF!,IF((FIND(":",ASC(A3),1)-1)<2,"0","")&FIXED(VALUE(LEFT(A3,(FIND(":",ASC(A3),1)-1))),0,TRUE)) ●F3(時間を付します)E3がひとけただったら0を追加して二桁に とたうえでB1に付加 =$B$1&IF(LEN(E3)=1,"0"&E3,E3) 注A3には元データのうちタイトル部分の 00:00/○○○ という文字列が入ります。(各グループの先頭行に相当します・R3参照) 00:00は時間を意味し、0~9までは頭に0がつくように二桁にしています。 本来はEとFはひとつにできますが、目的がわからなくなるのを恐れて分割して作っていたためそのままにしておきました。 ■記号は各列適当に■だけ表示する列もありますが、R列だけは グループの1行めということで■をつけず ●R3 =IF(K3="A","MB"&F3&"="&A3,IF(K3="","",FIXED(L3,0,TRUE)&"."&Q3)) となり具体的には「MB10080100+A3の文字」になります。 あとでA3の文字の部分を書き換えるのですが、これはまったく不揃いでマクロでルールはしにくいかと思います。 (グループの内容を見ながら自己判断するため) 各列ともそうですが、K3には1連の番号をふたけたに揃えて表示します ●K3の関数 =IF(ISERR((FIND(":",A3,1)-1)),IF(L3="","",IF(L3<10,"0",""))&IF(L3="","",FIXED(L3,0,TRUE)),"A") ●L3は連続番号 =IF(L2+L3=0,1+L1,1+L3) エラーの出る行(元データの空欄の行)や、グループ間の不要な行は L列を手動すると、K列の値が消えることで、空白行に置き換えています。 そのままだとエラー表示される行です。 これもデータの内容から判断するため特に不要と思われる行などはルールしにくい性質です。したがって集計前に手動で仕切っています。 M3/=IF(K3="A","■5"&F3,IF(K3="","",TRIM(RIGHT(LEFT(H3,(FIND("/",H3,1)-1)),LEN(LEFT(H3,(FIND("/",H3,1)-1))))))) N3/=IF(K3="A","■6",IF(K3="","",IF(ISERR(REPLACE(T3,((FIND(" ",T3,1)-1))+1,1,"")),T3,REPLACE(T3,((FIND(" ",T3,1)-1))+1,1,"")))) O3/=IF(K3="A","■4",IF(K3="","",+F3&"-"&K3&"-"&Q3)) P3/=IF(K3="A","■3",IF(K3="","",+R3&"-"&F3)) Q3/=IF(K3="A","■2",IF(K3="","",TRIM(M3)&"("&N3&")")) K3/=IF(ISERR((FIND(":",A3,1)-1)),IF(L3="","",IF(L3<10,"0",""))&IF(L3="","",FIXED(L3,0,TRUE)),"A") これらの途中列セルは合体もできるのですが、あとでわかりやすいように分割してあるものです。

関連する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エディタを起動しても、個人用マクロの標準モジュールが表示されないのですが。