EXCEL VBAマクロ作成で他のEXCELからデータを取り込む方法

このQ&Aのポイント
  • EXCEL VBAマクロを使用して、他のEXCELファイルからデータを取り込む方法を紹介します。
  • メインプログラム(EXCEL VBA)から、他のフォルダーにあるEXCELファイルの特定の項目の内容を取得したい場合、以下の手順を実行します。
  • まず、コマンドボタンを押すと、取り込むファイルのパスが表示されるポップアップが表示されます。作業者は選んだパスとファイル名を確認できます。次に、OPENとINPUTの手順を実行してデータを取り込みます。
回答を見る
  • ベストアンサー

EXCEL VBAマクロ作成で、他のEXCELからデータを取り込みたい

メインプログラム(EXCEL VBA)より、 他のフォルダーにあるEXCELの項目の内容を取り込みたいです。 たとえば他のフォルダーのEXCELのRange("A2:A3").ValueをメインプログラムのRange("C2:C3").Valueにセットしたい時です。 ・コマンドボタン押したら、どこのEXCELから取り込むかのポップアップ(?)は、表示はできてます。 ・作業者が選んだパスとブックもMsgBoxで表示できてるので、もらう相手の場所も取得できてます。 ・となると次はOPEN,INPUTですか? テキストデータの取り込みですと、Inputでそのバッファを定義してるのですが、なんか違うような。。。 よろしくお願いします!

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

  • ベストアンサー
回答No.1

私がやる方法です。 Dim writeSheet As Worksheet ' 自分自身の書き出し先シート Set writeSheet = ThisWorkbook.Worksheets(1) ' Sheet1 を参照 Dim readBook As Workbook ' 相手ブック Set readBook = Workbooks.Open(filename) ' 相手ブックを開いて参照 Dim readSheet As WorkSheet ' 相手シート Set readSheet = readBook.Worksheets("sheetName") ' 相手シートを参照 ' または Set readSheet = readBook.Worksheets(sheetIndex) ' 例えば writeSheet.Cells(1, 1).Value = readSheet.Cells(2, 2).Value ' 相手シートの B2 の値を自分自身の A1 に書き込む readBook.Close False ' 相手ブックを閉じる Set readSheet = Nothing Set readBook = Nothing

bluebluerose
質問者

お礼

ありがとうございます。 まったくの初心者なんですが。。。 Dimというのは変数の定義のためのもので、 Dim hensu as interger とか使ってたんで、書いていただいたのが、びっくりしたのですが。

その他の回答 (2)

回答No.3

探せばもっともっとたくさんのサイトが出てきますし、初心者~中級者向けの書籍もたくさんでているでしょうが、とりあえずこんな感じで。 ■Microsoft Office Excel 2003 オブジェクト モデルの初心者向けガイド http://www.microsoft.com/japan/msdn/office/excel2003/odc_super.asp ■VBA(Excel)講座 http://mam.itbdns.com/vba/ ■ExcelVBAへの道 http://ww8.tiki.ne.jp/~nikoniko/

bluebluerose
質問者

お礼

ありがとうございますっ No.1で教えて頂いたマクロをかんばって組んでみましたら、動きました。 No.3のHPは、今後役立てたいと思います。 ほんとにありがとうございました。

回答No.2

> まったくの初心者なんですが。。。 大丈夫です。難解なことは一つも書いていませんので。 Workbook 型や、Worksheet 型の変数がいくつか出てきましたが、これらは通常の Integer 型の変数とはちょっと違って「参照型」って言います。 参照型の変数に値を入れるには、 Set hensu = object って書き方になります。 # 厳密に言えば "入れる" じゃなくて、構文そのまんま "セットする" です。 私のコードにやたらと Workbook 型や Worksheet 型が出てきましたが、 読み込み元のブックやシート、書き出し先のブックやシートをきちんと整理してコードを書くためです。 「あっちのブックから読み込んで、こっちのブックに書き出す」ってケースはこれから幾らでも登場しますので、ぜひ覚えておいて損はないテクニックです。

bluebluerose
質問者

お礼

ありがとうございます。 Workbook型、Worksheet型というのも、初めてです。 実は仕事で組んでまして、そのプログラムも初心者用のテキストも会社にありまして。。。。 一応、別の書き方で持ってこれるようになりました。 持ってくる側をワークに入れて、メインの方のエクセルを再度開いて、入れるかんじです。 私は、あまり頭が良くないので、せっかく丁寧に書いていただいたんですが、イマイチ ぴんと来ません。 temtecmai2さんの書いてある事が載っているURLやテキストをご存知でしたら、是非教えてください 私が組んだのがダメな時、または次回のチャレンジの時に是非、temtecomai2さんのきっと上級者のロジックを組みたいと思います。

関連するQ&A

  • 【エクセルVBA】ファイル参照後にデータ取り込み

    はじめまして。マクロ素人&勉強中です。 現在、メインプログラム(エクセルVBA)から、他のフォルダ内にある 複数の読み込み用データ(EXCEL)からひとつを選択し、データの取り込み作業をマクロ化したいと考えております。 例えば、読み込み用データ1のEXCELのRange("A2:A3")を メインプログラムのRange("C5:C6")に値を転記させるようなイメージです。 動作としましては (1)メインプログラムの「ファイル参照ボタン」より、読み込み用データをひとつ選び開く  ※ここまでは、msoFileDialogOpenで作成しました。 (2)メインプログラムの「取り込みボタン」にて、開いた読み込み用データの値をメインに転記  ※マクロの記録にて実施したため、読み込み用データ2や3・・・には適応できず困っております。 何か良いアドバイスがございましたら、何卒よろしくお願い申し上げます。

  • 1行おきのデーターを他のシートに詰めて表示する。

    1行おきのデーターを他のシートに詰めて表示する。 よろしくおねがいします。 1行おきの(シート【A】)のデーターを、他の(シート【B】)に詰めて表示する。 EXCEL関数で Range("C5").Value =【A】!B5 Range("C6").Value =【A】!B7 Range("C7").Value =【A】!B9 Range("C8").Value =【A】!B11  ~ これをVBAで実施できないでしょうか。

  • エクセルのVBAで悩んでいます。

    いつもありがとうございます。 エクセルのVBAで悩んでいます。 セルの範囲指定をVBAで行いたいのです。 ただし、引数に数値変数を使用する為、Cellsプロパティを使います。 すると、離れている範囲の範囲指定が出来ないのです。 例えば、Rangeプロパティだと、 Range("A5:E5,A9:E32").Select こうなるところを、 A9:E32 を変数に置き換えたくて、 Range("A5:E5", Cells(g, 1), Cells(h, 5)).Select と、するとエラーが出ます。 VBAの前文は次の通りです。 Private Sub CommandButton1_Click() a = Me.TextBox1.Value b = Me.TextBox2.Value Set c = Range("a:a").Find(what:=a, LookIn:=xlValues, lookat:=xlWhole) Set d = Range("a:a").Find(what:=b, LookIn:=xlValues, lookat:=xlWhole) 'MsgBox c + d e = c.Address 'MsgBox e f = d.Address 'MsgBox f g = Range(e).Row MsgBox g h = Range(f).Row MsgBox h Range(Cells(g, 1), Cells(h, 5)).Select End sub よろしくお願い致します。

  • Excelのセルの比較について

    Excelのマクロにてセルの比較を行っています。 A1に"123" A2をハイパーリンクに指定して"123"と表示しています。 表示形式はどちらも通貨で表示しています。 If Range(A1).Value <> Range(A2).Value Then   MsgBox "同じではない" Else   MsgBox "同じ" End If と比較しているのですが"同じではない"が表示されてしまいます。 試しに MsgBox Range(A1).Value と MsgBox Range(A2).Value を表示してみたところ、どちらも"123"と表示されました。 セルに表示されている値で比較するにはどうしたらいいのでしょうか?

  • エクセル VBAで

    変動する数値が、セル A1に入る状況で、 該当シートに Private Sub Worksheet_Change(ByVal Target As Range) If Range("A1").Value = 1 Then Range("C62").Value = "○" ElseIf Range("A1").Value = 2 Then Range("C62:C63").Value = "○" ElseIf Range("A1").Value = 3 Then Range("C62:C64").Value = "○" ElseIf Range("A1").Value = 4 Then Range("C62:C65").Value = "○" ElseIf Range("A1").Value = 5 Then Range("C62:C66").Value = "○" ElseIf Range("A1").Value = 6 Then Range("C62:C67").Value = "○" ElseIf Range("A1").Value = 7 Then Range("C62:C68").Value = "○" ElseIf Range("A1").Value = 8 Then Range("C62:C69").Value = "○" ElseIf Range("A1").Value = 9 Then Range("C62:C70").Value = "○" ElseIf Range("A1").Value = 10 Then Range("C62:C71").Value = "○" ElseIf Range("A1").Value = 11 Then Range("C62:C72").Value = "○" ElseIf Range("A1").Value = 12 Then Range("C62:C73").Value = "○" ElseIf Range("A1").Value = 13 Then Range("C62:C74").Value = "○" ElseIf Range("A1").Value = 14 Then Range("C62:C75").Value = "○" ElseIf Range("A1").Value = 15 Then Range("C62:C76").Value = "○" End If End Sub と言ったマクロを記述しましたが、 動作がどうにも重くて困っています。 一度、プレビューをした後は特に遅くなります。 何か良い解決方法はありますでしょうか?

  • エクセル VBA オフセットさせたいのですが。

    エクセル VBAでの質問です。 自分以外のファイルの値7を参照するエクセルを作っています。 sheet1のA1~B4に入力欄があり、 そこにフォルダ名、ファイル名、レンジを入力し、sheet1に表示しようと思っています。 しかし、A1~B4までの範囲を設定してしまうと、入力欄が上書きされてしまいます。 それを回避するためにオフセットさせようと思い、 自分で色々やってみたのですが、うまくいかないので教えてください。 要望としては、Sheet1B4にA1:F10と入力されてた場合、 Sheet1のC5からその範囲を表示させたいです。 以下が詳細です。 ーーーーー Sheet1 (B1)フォルダ名入力欄 例 C:\test\test2 (B2)空白 「コマンドボタン1」あり (B3)20110101.xls (B4)B5:D8 -------- ’コード Private Sub Commandbutton1_Click() Dim hani As Variant hani = Range("B4").Value Range(hani) = "='" & Range("B1").Value & "\[" & Range("B3").value & "]Sheet1'!" & Range("B4").Value’↑改行なしです。 End Sub -------- です。 よろしくお願いします。

  • Excelマクロで

    Excelマクロで 範囲内を書き換えたときだけ 処理を通るようにしたいのですが どうしたらいいのか分かりません。 範囲がRange("A1:B10")で 書換がB5のとき 範囲内なので MsgBox "true" を 書換がC5のとき 範囲外なので MsgBox "false" を 範囲は変わるのでマクロでお願いします。

  • EXCEL VBA 日別データを検索しコピー

    度々すいません。行き詰まりましたので教えてください。 エクセルSheet2に月の日別のデータがあります。日によってデータの 行数はまちまちですが、A列には日付、B,C,D列には時間、E列には目的等々があります。そのデータをユーザーフォームのスピンボタンで日付を指定し、コマンドボタンをクリックしたら、Sheet1の1日分の表にコピーしたいのです。また指定日がなければメッセージで指定日がありませんと表示したいのです。よろしくお願いします。 excel2003 Private Sub SpinButton1_Change() TextBox1.Value = Date + SpinButton1.Value End Sub Private Sub CommandButton1_Click() '年月日表示 Range("C3") = Format(TextBox1.Value, "yy") Range("D3") = Format(TextBox1.Value, "mm") Range("E3") = Format(TextBox1.Value, "dd") Range("F3") = Format(TextBox1.Value, "aaa")   ここがわかりません   Else MsgBox "指定日がありません" End If End Sub

  • エクセルマクロで

    エクセルマクロでファイルの有無を確認したくて 次のようなマクロを作りました。 Dim fso Const Folder = "D:\AAA" Const File = "*****.xlsx" Set fso = CreateObject("Scripting.FileSystemObject") If fso.FileExists(Folder & "\" & File) = False Then MsgBox "ファイルは存在しません" ファイル名の*****部分に Range("A1").Valueを使いたいのですがうまくいきません。 どのようになるのでしょうか。よろしくお願いします。

  • EXCEL VBAマクロについて質問です

    Excel VBAマクロについて質問です ※Excel Ver.は2005でやってます 例のような感じで、 同じ列(列1)に或る同じ列名の数字(列2)を足して 違うセル、または違うブックの指定行に合計値を横並び表示させたいのですがうまくいきません 例のように 同じ言葉が含まれているもの(りんご・青りんご)は足して出したいと思ってます 【理想】実行前 ****************************** 番号  名前  個数 001   りんご  1 002   ばなな  2 003   いちご  3 001   青りんご 2 ****************************** 【理想】実行後 ****************************** 番号   りんご  ばなな  いちご 001    3      -     - 002    -      2     - 003    -      -      3 ****************************** ※「-」記号はついてなくても大丈夫です 現在、組んでいるコード・実行結果をのせておきました どなたか享受ください、お願いいたします j = 1 For i = 0 To Range("A65536").End(xlUp).Row cnt = cnt + Range("列2" & i).Value If Range("C" & i + 1).value <> Range("C" & i).value Then 'もし次の行が違う名 Range("任意セル" & j).Value = Range("A" & i).Value '列1 Range("任意セル" & j).Value = Range("B" & i).Value '列2 Range("任意セル" & j).Value = cnt '数字合計 j = j + 1 '出力行カウントアップ cnt = 0 End If Next