データファイルを開かずにコピー、別ファイルに転記する方法

このQ&Aのポイント
  • データファイルを開かずに、指定した番号のデータをコピーして別ファイルに転記する方法を教えてください。
  • ユーザーフォームを使用して、指定した番号を検索し、データファイルから行ごとにデータをコピーして別ファイルに貼り付ける方法を教えてください。
  • データファイルを開かずに、該当する番号のデータを抽出し、別ファイルに転記する方法を教えてください。
回答を見る
  • ベストアンサー

データファイルを開かずにコピー、別ファイルに転記

データファイルを開かずに、該当行をコピー、別ファイルに転記する方法を教えてください。 ・ユーザーフォームを持つファイルがあります(仮ファイル名:印刷用ツール.xls)  ユーザーフォームには、テキストボックス(番号入力用)と、コマンドボタンがひとつあります  印刷用ツール.xlsのSheet1は「印刷用シート」になっています。  印刷用ツール.xlsのSheet2は、「印刷用シート」に表示するためのデータが入るデータシートです。 ・↑とは異なるデータファイルがあります(仮ファイル名:データファイル.xls) データファイルには A列に番号 、B~D列には番号に付随する情報データが入力されています。 (例)  A   B   C   D  1  りんご 青森 150 2  いか  新潟 200 ***以下、実行したい内容のイメージです (1)ユーザーフォームのテキストボックスに番号を入力して、コマンドボタンを押す ↓ (2)テキストボックスに入力された番号と同じ番号をデータファイル.xls内で検索する(データファイル.xlsを開かずに) ↓ (3)データファイル内で検索して合致した番号行を行ごとコピーする ↓ (4)コピーしたデータを印刷用ツール.xlsのSheet2の1行目に貼り付ける(貼り付ける前にSheet2の1行目をクリアする) (後は、Sheet2のデータはSheet1(印刷用シート)で、表示したい部分だけを表示して印刷します) 宜しくお願い致します。

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.3

スミマセン,なんだかあちこち書き間違えてました。 private sub CommandButton1_Click()  dim Target as range  application.screenupdating = false  workbooks.open filename:="c:\test\データファイル.xls"  set target = workbooks("データファイル.xls").worksheets(1).range("A:A").find(what:=me.textbox1, lookin:=xlvalues, lookat:=xlwhole)  if target is nothing then   workbooks("データファイル.xls").close false   application.screenupdating = true   msgbox "not found"   exit sub  end if  target.entirerow.copy destination:=thisworkbook.worksheets("Sheet2").range("A1")  workbooks("データファイル.xls").close false  application.screenupdating = true end sub 大変失礼しました。

rikaina1110
質問者

お礼

できました!!! 速度も速いです! 丸々書いて頂いた上に、最後までご確認頂いて、本当に本当にありがとうございました!

その他の回答 (2)

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.2

ん? おっとスミマセン,単純な誤記してましたね まちがい workseets 正解: worksheets 失礼しました。

rikaina1110
質問者

お礼

自分で発見できずすみません、、^^; ただ、hを入れてもまだ同じエラーが出てしまいました・・・ 変わらず「target =」のところが反転してます。。 私ももう一回コードを見てみます!

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

マクロの基本的な理解として,「ブックを開かずにコピーしてくる」方法はありません。 ブックを開かず処理するためは,ワークシート上で数式を使用して該当ブックの値を検索や参照します。 繰り返すと,できることは次のどちらかです。 1.諦めてブックを開いてコピーしてくる 2.ブックを開きたくないので,数式を工夫して少しでも高速化する ケース1) 「開かずに」開いてコピーして閉じる。 private sub CommandButton1_Click()  dim Target as long  application.screenupdating = false  workbooks.open filename:="c:\test\データファイル.xls"  set target = workbooks("データファイル.xls").workseets(1).range("A:A").find(what:=me.textbox1, lookin:=xlvalues, lookat:=xlwhole)  if target is nothing then   workbooks("データファイル.xls").close false   application.screenupdating = true   msgbox "not found"   exit sub  end if  target.entirerow.copy destinaton:=thisworkbook.worksheets("Sheet2").range("A1")  workbooks("データファイル.xls").close false  application.screenupdating = true end sub ケース2) 事前にシート2のB1セルに =MATCH(A1,'c:\test\[データファイル.xls]Sheet1'!A:A,0) と数式を準備しておく A2セルに =INDEX('c:\test\[データファイル.xls]Sheet1'!A:A,$B$1) と数式を準備して右に必要な列範囲までコピーしておく private sub commandbutton1_Click()  worksheets("Sheet2").range("A1") = me.textbox1 end sub シート2は,たとえばシート自体を非表示にしておく。

rikaina1110
質問者

お礼

続けてのご解答ありがとうございます! ファイル名、ファイル場所等を書き換えて早速やってみたのですが、 「コンパイルエラー:オブジェクトが必要です」というエラーになります。 書き換え時にファイル名を間違えたり、場所の指定を間違えたかな?と 思って確認したんですがわからず・・・ エラー時は、コードの 「private sub CommandButton1_Click()」が黄色くマーカーされ 「Set target」のところが青く反転されます(選択された状態になります)

rikaina1110
質問者

補足

すみません、お礼の内容ですが、 ケース1)のコードでやってみた結果です。

関連するQ&A

  • ユーザーフォームでの検索結果を別シートに転記

    ユーザーフォームでの検索結果を別シートに転記して印刷したいのですが・・・ このようなイメージです↓↓ ・データファイルがあります    A    B    C    D 1 0001 みかん  3     300 2 0002 とうふ 1     500 3 0003 チョコ   2     100 4 0004 いか    10     300 ・データファイルとは別のファイルでユーザーフォームを表示します。 番号入力欄 ----- 印刷ボタン ・ユーザーフォームで番号が入力され、「印刷」が押された時に、 入力されたのと同じ番号をデータファイルから検索して、 その番号の列データを別シートに転記して印刷したいのです 別シートに 番号:0001 商品:みかん 数量:3 単価:300 と転記して印刷(番号、商品、などの項目名は、転記するひな形シートに元々入れてあります) *ユーザーフォームのイメージは、番号を入力するボックスと、「印刷」ボタンだけがある状態です。 ユーザーフォーム上で該当番号列のほかの値を表示する欄は持ちません。 また、列の情報が多いため、ユーザーフォーム上に表示させてそのまま印刷するというのは厳しいです *ユーザーにはデータファイルを直接触ってほしくないので、ユーザーフォームを介してデータを取り出すようにこのような形にしたいのですが・・・ 自分でいろいろと勉強する前に質問してしまい申し訳ありません。。。が 仕事で使うのに時間がなくお力を貸して頂ければと思います。 宜しくお願い致します。

  • Excel VBA 別ブックを開かずに転記

    Excel2007のユーザーフォームについて教えてください。 ユーザーフォームを以下のように作成しました。 ■テキストボックス6つ テキストボックス2→件名 テキストボックス3→数 テキストボックス4→名前 テキストボックス5→備考1 テキストボックス6→備考2 ■コマンドボタンが1と3の2つです。 コマンドボタン1→転記と印刷 コマンドボタン3→終了 ■シートの構成  sheet"作成と一覧"   1行目を以下の項目で使用しています。  A1→番号(テキストボックス1を表示)  B1→件名(テキストボックス2を表示)  C1→数(テキストボックス3を表示)  sheet"印刷"  A1→番号(テキストボックス1を表示)  A2→件名(テキストボックス2を表示)  B2→数(テキストボックス3を表示)  A3→名前(テキストボックス4を表示)  A4→備考1(テキストボックス5を表示)  A5→備考2(テキストボックス6を表示) テキストボックスに入力した値を2つのシートにそれぞれ転記して、 シート"印刷"を2部印刷しています。 ここまで以下のコードで行いました。 Private Sub CommandButton1_Click() '入力値を作成と一覧シートに転記 行 = ActiveCell.Row 列 = ActiveCell.Column Cells(行, 列) = UserForm1.TextBox1.Value Cells(行, 列 + 1) = UserForm1.TextBox2.Value Cells(行, 列 + 2) = UserForm1.TextBox3.Value '入力値を印刷シートにに転記 Worksheets("印刷").Range("A1") = UserForm1.TextBox1.Value Worksheets("印刷").Range("A2") = UserForm1.TextBox2.Value Worksheets("印刷").Range("B2") = UserForm1.TextBox3.Value Worksheets("印刷").Range("A3") = UserForm1.TextBox4.Value Worksheets("印刷").Range("A4") = UserForm1.TextBox5.Value Worksheets("印刷").Range("A5") = UserForm1.TextBox6.Value 部数 = 2 Worksheets("印刷").PrintOut Copies:=部数, Collate:=True UserForm1.TextBox1.SetFocus Cells(行 + 1, 列).Select End Sub Private Sub CommandButton3_Click() '終了ボタンで値をクリアしてウィンドウを閉じる Dim Ctrl As Control For Each Ctrl In Controls If TypeName(Ctrl) = "TextBox" Then _ Ctrl.Value = "" Next Ctrl Unload Me End Sub 教えて頂きたい事なのですが・・・ コマンドボタン1の入力値を作成と一覧シートに転記の所なのですが、 アクティブセルではなく、常にA列の最後の値の次の空白行に転記するようにしたい場合、 どのように書き換えればいいのでしょうか? もう一点ですが、 別ブックにテキストボックス1から6が入力された一覧があります。 この別ブックを開かずに、 テキストボックス1に入力された番号を探して、 テキストボックス2から6に表示されるようにしたいのです。 うまく説明できないのですが・・・ 別ブックの名前は"たちつ" 別ブックは、あいうサーバーの かきくフォルダの中のさしすフォルダです。 ブック"たちつ"に"一覧"というシートがあります。 一覧のシートのD列の3行目以降には番号が入力されており、日々増えています。 テキストボックス1に入力された番号を、 一覧のD列から探し、 I列の値をテキストボックス2へ K列の値をテキストボックス3へ L列の値をテキストボックス4へ M列の値をテキストボックス5へ J列の値をテキストボックス6へ転記させたいのです。 同じブックの別シートを参照するときには Application.VLookupで出来たのですが、 マクロの記録でやってみても、解決できませんでした。 コードをご覧いただいてお分かりの通り、 VBA超初心者です。 ネットを見ながら試行錯誤している状況です。 コードの間違い等あるかもしれませんが、 ご教示よろしくお願いいたします。

  • Excelユーザーフォームでのデータ検索

    初心者の質問で申し訳ございません。 ユーザーフォームを利用して検索ボタンを作ろうと考えています。 ユーザーフォームでテキストボックスを2個と コマンドボタン1個を作成し、 テキストボックス1に検索したい氏名を入力して コマンドボタンを押すと、 ワークシート(ワークシート名、データ)に作成されたデータのD列から 一致するものを検索し、 一致したデータのA列にある「番号」をテキストボックス2、 表示する。 というマクロが書けず困っています。 よろしくお願いします。

  • Excelユーザーフォームでのデータ検索

    現在Excelマクロの勉強中ですが、ユーザーフォームでテキストボックスを4個とコマンドボタン1個を作成し、テキストボックス1にコードを入力してコマンドボタンを押すと、ワークシート(ワークシート名、住所録)に作成されたデータのA列からコードを検索(データは2行目から始まる)し、一致したデータのB列にある「名前」をテキストボックス2、C列の「住所」をテキストボックス3、D列の「電話番号」をテキストボックス4に表示する。 というマクロが書けず困っています。 わかる方教えてください。

  • エクセルVBAマクロで、一度テキストポックスに入力した値がコピーされて

    エクセルVBAマクロで、一度テキストポックスに入力した値がコピーされてしまう VBAマクロ初心者です。 エクセルVBAマクロで、以下の様なプログラムを作成し計算させていますが、 一度入力した値がテキストポックスに残ってしまい、なんとかならないかなと 思っています。 (1)複数シートにそれぞれコマンドボタンを配置し、クリックすると同じユーザー フォームが立ち上がるようになっています。 (2)そのユーザーフォーム内に、テキストボックスが複数あり、それぞれ値を入力 して計算スタートさせると、ワークシートの1行目から数千行目まで計算して 各行に計算結果を表示します。 (計算は、既に各行に入力済みのデータとこのテキストボックスの値を元に算出されます) (3)次に、別のシートでコマンドボタンをクリックし、ユーザーフォームを立ち上げると、 前のシートで入力した値がそのまま各テキストボックスに入ってしまいます。 (これは、必ず起こる訳ではなく、時々起こるのですが、起こる場合は、コマンドボタン をクリックしてからユーザーフォームが立ち上がるまでの時間が若干短い感じがします) ※一度、上記の計算をさせるとテキストボックスの値がそのシートの特定のセルに入り、 次回ユーザーフォームを立ち上げた際に、テキストボックスに入るようになっています。 (Private Sub UserForm Initialize を使っています) パソコンの構造を、私はよく知らないのですが、おそらく、一度テキストボックスに値 を入力して計算させると、どこかのメモリにそれが残っていて、次にユーザーフォーム を立ち上げた際にそれが入ってしまうのかな、と思っています。 (ただし、もし前の値が入ってしまったとしても、一度そのユーザーフォームを消して から、再度立ち上げると、正常な値(そのシートの特定のセルを参照)が必ず入ります) 何か、プログラムにより、このメモリ?を消す?、あるいはうまく解決する方法など 考えられませんでしょうか? もし、詳しい方がおられましたら、御教示いただけませんでしょうか。 よろしくお願いいたします。

  • (エクセル)別のブックにシートをコピーすると

    初めて質問します。 EXCEL2000で、VBAとテンプレートが同じブックに保管されています。(test1.xls) test1.xlsのユーザーフォームでデータを入力して、コマンドボタンを押すと、テンプレートが別ブックにコピーされ、セルが埋められるようにしたいのですが、テンプレートにシート間参照(temp!A1)を使っているので、コピー元のブックを参照するように書き換えられてしまいます。([test1.xls]temp!A1) がんばって検索したのですが、回避策を見つけることができませんでした。 よろしくお願いします。

  • VBA 任意のセルにデータを転記する方法

    Excel のユーザーフォームを使って、データの入力をしたいと考えています。 入力ボタンを押すと、テキストボックスに入力した内容が別シートのセルに転記されるものです。 指定したセルに追加する、1番下の行に追加する、はできるのですが、コンボボックスに入力した内容によって転記するセルを変える方法はありますでしょうか? 具体的に言うと、 ユーザーフォーム内のコンボボックスで 月(4月~3月)を選べるようにしているのですが 4月を選べば4月を入力するセルに。7月を選べば7月を入力するセルに転記したいです。 何かいい方法はありますでしょうか。

  • 開いていない他のファイルのデータを条件に応じてコンボボックスに呼び出す方法

    同じフォルダにあるが、別の開いていないファイルに有るA列のデータを、 ユーザーフォーム上のオプションボタンのチェックによって自動的に選択して、同じユーザーフォーム上の、コンボボックスのデータとしてその時その時、必要なデータを選択できる様にしたいのですが、そのような事は可能でしょうか。 複数の人にあらかじめデータファイルとユーザーフォームのあるファイルを渡しておき、フォームを使って、データ選択の上新たなデータを作る、と言うような事をしなければいけ無くなりました。 データファイルは適時アップデートする必要があり、ユーザーフォームとは別のファイルとして更新のあったファイルのみ配布しなければなりません。 ファイルはみな同じフォルダーにあります ユーザーフォームのあるファイルが User.xls データのあるファイルが Date1.xls Date2.xls Date3.xls データのあるシートはそれぞれともSheet1です ぜひ、諸先輩方のお知恵を拝借いただければと思います よろしくお願いします

  • EXCEL ユーザーフォームを使ったマクロ

    データの登録をするのにユーザーフォームを使おうと思うのですが、なかなかうまくいきません。教えてください。 ユーザーフォームにはコンボボックス、テキストボックス、コマンドボタンが貼り付けてあります。(コンボボックスのリストには呼び出したいシートの名前が入っています) コンボボックスのリストの中から呼び出したいシートを選択し、テキストボックスに入力した内容を、コマンドボタンを押すことで選択されたシート上の、あるセルに登録したいのですがどうすればよいでしょうか?

  • 転記作業を自動化できないか

    こんな作業を自動化・高速化できないでしょうか。 ある入力フォームについて、Excelデータから転記する作業をしています。その入力フォームには縦横に入力用テキストボックスが並んでいるわけですが、横方向の入力をする場合 ExcelファイルのA1セルをコピー(Ctrl+C) → 入力フォームをアクティブに(Alt+Tab) → 貼付け(Ctrl+V) → Excelをアクティブに(Alt+Tab) → ExcelのB1セルへ移動(Tab)してコピー(Ctrl+C) → 入力フォームをアクティブに(Alt+Tab) → 次のテキストボックスへ移動(Tab)して貼付け(Ctrl+V) ・・・というのを繰り返してやっています。非常に単純な機械的繰り返し作業なので、なんとか自動化できないでしょうか。 ちなみにA1セル~B1セルを一度にコピーしてテキストボックスに貼付けても、2つのテキストボックスに一度に貼付けられたりはせず、1つのテキストボックスにしか貼付きません。また、データの自動取込み機能などは、その入力フォームにはありません。

専門家に質問してみよう