• ベストアンサー

Excel VBA で別ファイルの値と一致したらその行の値を設定する

Excel VBAについてご質問します。 やりたいこととしては、別のファイル(refer.xls)の「A1」に記載されている値と、マクロを実行しているファイル(action.xls)の「C1」に記載されている値が"一文字でも一致している場合"、action.xlsの「D1」から右方向に、refer.xlsの1行目を全てコピペする、ということをやりたいです。 どのようにすればできるでしょうか? プログラミング内容もあわせて教えていただけると助かります。 よろしくお願いします。

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.1

>プログラミング内容もあわせて教えていただけると助かります これも丸投げの質問で、回答者にコードを書いてくれということで、規約違反では。 この課題は初心者には、易しくないと思う。参考までに挙げておくが、質問者にはコピペしか出来ないだろう。もっと勉強してからの課題。 ーー どういうことのコード作成のスキルが要求されるか、解決が必要か、一歩一歩勉強しないと。 >別のファイル(refer.xls)の「A1」に記載されている値と 別ファイルを開くコードは Sub test01() Dim wb As Workbook Set wb = Workbooks.Open("C:\Documents and Settings\XXXX\デスクトップ\yyyy.xls") x = wb.Worksheets("検索表B").Range("A1") MsgBox x wb.Close Set wb = Nothing End Sub 値は.Range("A1")でとれる。 >refer.xlsの1行目を全て Sub test01() Dim wb As Workbook Set wb = Workbooks.Open("C:\Documents and Settings\OTO\デスクトップ\01化B.xls") x = wb.Worksheets("検索表B").Range("B1") MsgBox x '----第1行をコピーする用意 Set Z = wb.Worksheets("検索表B").Range("A1:J1") wb.Worksheets("検索表B").Activate Z.Copy Range("A10") 'テストでやってみるだけ '----- wb.Close Set wb = Nothing End Sub ーー >action.xls)の「C1」に記載されている値 Sub test02() y = ActiveWorkbook.Worksheets("Sheet1").Range("C1") MsgBox y End Sub ーーー >一文字でも一致している場合 上述のXとYが比較対照 よいアルゴリズムもあると思うが、泥臭く Sub test03() x = "朝日はすばらしい" y = "朝のコーヒーを飲む" For i = 1 To Len(x) p = InStr(y, Mid(x, i, 1)) If p <> 0 Then MsgBox "同文字あり " & Mid(x, i, 1) Exit Sub End If Next i MsgBox "同文字なし" End Sub ーーー >action.xlsの「D1」から右方向に 上記の Z.Copy Range("A10") のDestinationを D1にする。 ===== 総合して Sub test04() Dim wb As Workbook Dim wb0 As Workbook Set wb0 = ActiveWorkbook Set wb = Workbooks.Open("C:\Documents and Settings\OTO\デスクトップ\01化B.xls") x = wb.Worksheets("検索表B").Range("B1") MsgBox x '----第1行をコピーする用意 Set Z = wb.Worksheets("検索表B").Range("A1:J1") 'ここではJ列までに限定 wb.Worksheets("検索表B").Activate '----- y = wb0.Worksheets("Sheet1").Range("C1") MsgBox y For i = 1 To Len(x) p = InStr(y, Mid(x, i, 1)) If p <> 0 Then MsgBox "同文字あり " & Mid(x, i, 1) GoTo p1 End If Next i MsgBox "同文字なし" Exit Sub '--- p1: Z.Copy wb0.Worksheets("Sheet1").Range("D1") '--- wb.Close Set wb = Nothing End Sub 簡単な例でテスト済み。

sun-sky
質問者

お礼

できました!ご丁寧な回答ありがとうございました。

関連するQ&A

  • エクセルのVBAについて

    エクセルのVBAについて教えて下さい。 エクセルのVBAでプログラムを組んでいるのですが、一つわからないことがあるのです。 マクロが実行(オープン)されるファイル名(ファイルパス)をVBAで取得するためにはどうすればいいでしょうか? たとえば、マクロが実行されるファイルがC:\テスト.xlsならば "C:\テスト.xls"を取得したいと考えています。 どなたかご教授お願い致します。 宜しくお願い致します。

  • 別のエクセルファイルの値をコピーをしたいです

    別のエクセルファイルの値をコピーをしたいです。 現在、仕事でファイルAにファイルBの値をコピーペーストをする作業を行っております。 しかし、量が多いのでいちいちファイルを開いてコピーして貼り付けという作業は時間がかかるのでマクロでやりたいと考えています。 そこで教えてほしいのですが、以下のような操作をマクロでするにはどうしてらよいのでしょうか? 1.ファイルAの列範囲F~J、行は9から下にファイルBの値をコピーしたい。 2.コピーするファイルBの値の範囲は、列E~I・行は1から下。 3.コピーするファイルBの行は毎日更新されるため、行の範囲は不特定です。 つまりは 昨日のファイルBの行は10まであり、マクロを実行するとファイルBのE1~I1からE10~I10の値がファイルAのF9~J9から下にコピーされる。 今日のファイルBの行は4まであり、マクロを実行するとE1~I1からE4~I4の値がファイルAのF9~J9から下にコピーされる。 という操作をマクロで実行したいと思っております。 また、ファイルBの名前も不特定のため、ファイルはダイアログで指定し、指定したファイルのE1~I1から下の値をコピーできるようにしたいです。 毎日の作業ですので、これが出来れば効率はぐっと上がります。 わかる方、どうか回答宜しくお願いいたします。

  • エクセルにおいて、行ごとに別ファイルを作成

    エクセル AAA.xls の、シート aaa のデータが851行まであります。 (1行目は名前や列名などのデータです) このデータを複数のエクセルファイルに、 2~171行目までは 01.xls 172~341行目までは 02.xls 342~511行目までは 03.xls 512~681行目までは 04.xls 682~851行目までは 05.xls のように分けて保存したいです。 さらに、週毎に シートaaa のデータは更新されるため、 B~F.xls への保存も、前月分を残したまま追記していく必要があります。 (たとえば、01.xls を開くと、12月1週目のデータの後に、12月2週目のデータが 追記される・・・ という操作を組み込みたいです) こういった作業をするためのマクロは、実際にどのように書けばよいのか、 ご教示ください。 非常に複雑なマクロになってしまうかもしれませんが、 どうぞよろしくお願いいたします。

  • EXCEL VBA 行の値を累計したいのですが・・

    VBA初心者です。 VBAでEXCELの行の値を累計したいのですが、プログラムの仕方がわかりません。 どなたかわかる方教えてください。     A    B   C    D   E ・・・・ 1  1000 3000 2000 4000 3000  2  2000 5000 1000 3000 2000  3  4000 2000 3000 1000 5000   :     実行結果     A    B    C    D    E  ・・・・ 1  1000 4000 6000 10000 13000 2  2000 7000 8000 11000 13000   ←行の値の累計 3  4000 6000 9000 10000 15000 : 行と列はたくさんあって、最後のセルまで累計する方法を教えていただけるとありがたいです。 どうぞよろしくお願いします。m(_ _)m

  • Excelで他Excelファイルのセルの値をVBAで参照したい時

    こんにちは。 Excelで他Excelファイルにあるセルの値をVBAで参照したい時って、 場所をどう指定したらいいのでしょうか。 やろうとしている事ですが、 c:\1.xlsに記述するVBAで c:\2.xlsのsheet1のA1の値を参照して、 それとc1.xlsのsheet1のA1の値が一致した時に、 c:\2.xlsのsheet1のB1の値を、 C:\1.xlsのsheet1のB1に書き出そうとしています。 派遣就業先でAccessで作ればいいものを なぜか社員の方たちでExcelで作ってしまったため、 そのメンテに四苦八苦しています。(笑) ご存知の方ぜひ教えてください。 よろしくお願いします!

  • VBAを使って、2つのファイルを比較したい

    OS Windows98 Excel2000 下記のとおり、2つのファイルがあるとします。 aaa.xls(比較元) bbb.xls(比較先) 内容はほとんど同じなのですが、 行や列が追加、或いは削除されている場合もあります。 1)追加されている場合 bbb.xlsよりaaa.xlsへコピペをする。 2)削除されている場合 aaa.xlsからセルの値を削除し、 それ以下の値を上へ詰める。 ここで問題なのは、 1)ページ毎に行数が決まっていない。 2)アイテム毎に1行ずつ空白の行がある。 3)追加或いは削除の場合のコピペを行う場合、   ページブレイクをどう扱うか。 4)連番等といったLOOP等を使ってできる基本になる   値が全くない。(わざわざ手動で追加してもよいが、   全部で20ファイル(比較元)、各ファイルには300以   上の行がある。) 5)セルによって、2つ以上のセル(上下どうし、或いは   隣どうし)が結合している場合もある。 以前、Excel98でVBAを使ってプログラムを書いたことはあ るのですが、Excel2000は初めての初心者同様のものです。 プログラムの内容を書いてもらえれば1番うれしいのです が、多分これだけの説明ではそういう訳にはいかないと思 います。 ですから、何らかのきっかけとなるアドバイスでも頂けれ ばと思ってここへ質問にきました。 よろしくお願いします。

  • Excel VBA でファイルが開かれているか確認する

    ExcelのVBAで、book1.xlsというファイルが現在開かれているか確認するにはどんなプロパティを使えばいいでしょうか? 実際にやりたい事は、book1.xlsに対して処理するマクロがあるのですが、そのbook1.xlsが開かれていなければ処理が出来ないのでマクロが入っているファイルを閉じる。というものです。

  • VBA エクセル 開いている別ファイルをアクティブにするには?

    すみません、よろしくお願いいたします。 <前提> A.xls=コピー元ファイル(マクロを組んでいるのはこちら) 2009・・・.xls ファイル=コピー先ファイル(2009以降はファイル名が変化しますが、必ず頭に2009があります) 同一フォルダ内に上記のファイルがあります。 どちらも開いて、Aファイルのマクロを実行すると、Aのデータをコピーして、2009・・・のファイルに貼りつける。としたいのですが、 (1)ファイル名が変化するので貼り付け先のファイル名をどう指定したらよいかわからない。 (2)フォルダごと、色々な人へ配る予定なので、できればアクティブなファイルという指定をしたい。(他のファイルは開いてないという前提でOKです。) (3)フォルダ内には2009がつく別ファイルもあるので、(2)同様アクティブなファイルという指定をしたいです。 わかるかた、おねがいいたします。 BVA初心者です。 普通のマクロで記録したら、以下のようになりました。 (例) Sub Macro1() ' ' Macro1 Macro ' ' Range("A1").Select Selection.Copy Windows("20091002_2650.xls").Activate '←この20091002_2650.xlsが変化します。 Range("A10:B10").Select ActiveSheet.Paste End Sub

  • エクセルVBA

    こんばんは! エクセルマクロ初心者です。 エクセルVBAについて教えてください! パス(?)を指定して、ファイルを開けてから実行する マクロを書きたいのですが、エラーになってしまいます。 Dim Filename as string (1)Workbooks.Open Filename:= "\D\MyDocument\●●.xls" (●●はファイル名) (2)Workbooks("●●").Activate (1)の部分は実行されて目的のファイルは開くのですが(2)でエラーになってしまいます。 どなたか教えてください! 以前までは、このマクロ実行できていたのですが、突然できなくなりました。 困ってます。

  • エクセルVBAでフォルダ内の全ファイルをコピペ

    フォルダ内にあるファイルの内、複数を指定して開いて、任意の部分をコピーし、マスターとなるファイルに貼りつける、という作業をVBAで行いたいと思っています。 VBAを全く知らないため、毎回20近いファイルを手で開いてはコピペしなくてはならず困っております。 ●あるフォルダ内にあるファイルの形式は全て同じで、10行目まではタイトル欄になっているため、11行目以降の記載がある行だけをマスターとなるファイルにコピペしたいです。 ●マスターも同じく10行目まではタイトル欄なので、11行目以降に、他ファイルの11行目以降の内容をどんどん積み上げていく形式にしたいです。 ●ファイルの名前は毎回変わるので、フォルダ内の指定されたエクセルファイルのみをコピペ、のような処理にしたいです。 ●B列だけは必ず記載がある列なので、そこを参考に11行目から何行目までをコピーすればいいのかを判断できるのかな、と思います。 ●貼り付けが完了したらマスター以外の開いたファイルを全て閉じるところまで自動化できたら有難いです。 全くの初心者なため、貼り付けるだけで動くようなものをいただけれると大変助かります。 よろしくお願いいたします。