• 締切済み

エクセルのVBAで、ファイルの読込・出力をしたい。

エクセル2003 VBAで、得意先コードを基準に(質問1)(質問2)を行いたいです。 申し訳ありませんが、教えて下さい。 (質問1) VBAで得意先コードが一致するものを読みたいです。 [表A.xls]に[表B.xls]の前月残高を読み込ませたい。 [表A.xls] 得意先コード |  氏名  |  前月残高  | ----------------------------------------------- 11121234   | 山川太郎 |   2000   | 131235432   | 山川次郎 |   500   | 113456789   | 山川三郎 |    0   | 12214321   | 山川四郎 |   20000   | 12119876   | 山川五郎  |  1500   | 137896543   | 山川六郎 |    0   | [表B.xls] 得意先コード | 前月残高 | ----------------------------- 11121234   |  10000  | 131235432   |    0 | 113456789   |  25000 | 12214321   |     0 | 12119876   |   5620 | 137896543   |   800 | [表A.xls]の前月残高をクリアして、 [表B.xls]の前月残高を読み込みたい。 【読み込み結果】 得意先コード |  氏名  |  前月残高  | ----------------------------------------------- 11121234   | 山川太郎 |   10000   | 131235432   | 山川次郎 |    0   | 113456789   | 山川三郎 |   25000  | 12214321   | 山川四郎 |     0  | 12119876   | 山川五郎 |    5620  | 137896543   | 山川六郎 |    800  | (質問2) その後、VBAで得意先コードの先頭2文字を指定して、 [表A.xls]から[表C.xls]を出力したい。 得意先コードは、8桁や9桁があります。 【得意先コードの先頭2文字を、例えば11と指定して出力した結果】 [表C.xls] 意先コード |  氏名  |  前月残高  | ----------------------------------------------- 11121234   | 山川太郎 |   10000   | 113456789   | 山川三郎 |   25000  |

みんなの回答

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.1

Vlookupで試しにやってみました。 'マクロをA.xlsに記述し、B.xlsも開いているとします。 'データは共にSheet1にあるとします。 '両ブックのSheet1のA列を文字列に変換し、後始末していません。 Sub test() Dim targetRange As Range, refRange As Range Dim wbk As Workbook Application.ScreenUpdating = False With Workbooks("B.xls").Sheets("Sheet1") Set refRange = .Range(.Range("A1"), .Range("B" & .Rows.Count).End(xlUp)) 'vlookupや、オートフィルタで誤動作するので、A列を文字列に変換 change2str refRange.Columns(1) End With With ThisWorkbook.Sheets("Sheet1") Set targetRange = .Range(.Range("A2"), .Range("A" & .Rows.Count).End(xlUp)).Resize(, 3) change2str targetRange.Columns(1) targetRange.Columns(3).FormulaR1C1 = "=VLOOKUP(RC[-2],B.xls!" & refRange.Address(ReferenceStyle:=xlR1C1) & ",2,FALSE)" targetRange.Columns(3).Value = targetRange.Columns(3).Value End With targetRange.AutoFilter Field:=1, Criteria1:="=11*" Set wbk = Workbooks.Add targetRange.CurrentRegion.Copy wbk.Sheets("Sheet1").Paste wbk.SaveAs Filename:="C:\c.xls" Call wbk.Close(savechanges:=False) targetRange.AutoFilter Application.ScreenUpdating = True End Sub 'セル範囲を文字列に変換 Private Sub change2str(targetRange As Range) Dim myCell As Range For Each myCell In targetRange.Cells myCell.Value = CStr(myCell.Value) Next myCell End Sub

関連するQ&A

  • エクセルVBAで複数VLOOKUP

    お世話になります エクセルが3つあるとします下記 大阪方面.xls コード|太郎|次郎|三郎|四郎| 0111|  1|   | | 1 | 0112|  |  1| | | 0113|  |  1| | | 0114|  |   | | | 京都方面.xls コード|田中|次郎|五郎|四郎| 0111|  2|   | | 2 | 0112|  |  1| | | 0113|  |  3| | 1| 0114|  1|   | | | 奈良方面.xls コード|田中|次郎|五郎|四郎| 0111|  2|   | | 2 | 0112|  |  1| | | 0113|  |  3| | 1| 0114|  1|   | | | 上記3件のエクセルをを合計させたいのですが ■問題点 *名前がランダムに入っている *名前の件数も決まっていない(セルのF20~BH20までのどれかに名前が入る)行数は1619です。 上記の内容からすべてに関数を入れるのは非常に重たくなりそう *エクセルファイルは3つとは限らない。 *エクセルファイル名が決まっていない ■やりたいこと VBAのフォームにテキストボックス(ファイル場所表示用)を設置しダイアログボックス呼び出し用ボタンを設置(10個ぐらい) 必要なxlsを指定し実行ボタンで下記のような計算をさせたいのが理想です。 合計.xls コード|太郎|次郎|三郎|四郎|田中|五郎| 0111|  1|   | | 5| 4 | | 0112|  |  4| | | | | 0113|  |  7| | 2| | | 0114|  |   | | | 2 | | Win XP オフィース2003 わかる方ご教授願います。

  • Accessで一致データを抜いて項目をずらす方法

    Access2000を使用して、テーブル1のフィールド2~5で、テーブル2と一致したフィールドを抜いて項目をシフトさせたいのですが、どのような方法があるのでしょうか。 <元テーブル>    フィールド→ 氏名, 名1, 名2, 名3, 名4 ・テーブル1の項目 山田,花子,次郎,三郎,四郎           鈴木,五郎,六郎,七朗,和子           佐藤,和子,一郎,太郎,四郎 ・テーブル2の項目 山田,花子           鈴木,七朗           鈴木,和子          佐藤,一郎           佐藤,四郎           佐藤,和子 <変換後テーブル>テーブル1を基準として   フィールド→ 氏名, 名1, 名2, 名3, 名4           山田,次郎,三郎,四郎,null           鈴木,五郎,六郎,null,null           佐藤,太郎,null,null,null 分りずらい説明で申し訳ありませんが、宜しくお願いします。

  • 【Excel VBA】コピー&ペーストの自動化

    以下のエクセル表があり、同じ日付ごとのデータを自動的に別のシートに移したいです。 例えば、別のシートに、2004/1/1に書かれているデータのみを移す。(シート2参照) それをVBAで書くにはどうすればいいでしょうか。 マクロの記録をするのではなく、この表の日付を増やしたり変えたりしても機能するようにコードを書きたいと思っております。 For LoopとIf thenを使い、A1セルがそれより下のセルの値と異なるまでコピーし続ける、、といった作業をすればよいのでしょうか。 全くの初心者で勉強中です。よろしくお願いいたします。 列行 A B 1 2004/1/1 太郎 2 2004/1/1 次郎 3 2004/1/1 三郎 4 2004/1/1 一郎 5 2004/1/1 五郎 6 2005/3/3 三郎 7 2005/3/3 次郎 8 2005/3/3 太郎 9 2005/3/3 四朗 10 2006/2/2 次郎 11 2006/2/2 一郎 12 2006/2/2 太郎 シート2 2004/1/1 太郎 次郎 三郎 一郎 五郎 シート3 2005/3/3 三郎 次郎 太郎 四朗 シート4 2006/2/2 次郎 一郎 太郎

  • エクセルのことで質問です

    うまく説明ができないかもしれないのですがよろしくお願いします<(_ _)> シート1 会社名  氏名   携帯番号 ○○会社 山田太郎 090-****-**** ○○会社 佐藤次郎 090-****-**** ○○会社 田中三郎 090-****-**** ××会社 松尾四郎 090-****-**** ××会社 小泉五郎 090-****-****         ・         ・         ・ シート2 会社名  氏名   携帯番号 ××会社 松尾四郎 というデータがあって、シート2で××会社の松尾さんの携帯番号を抽出したい時は何の関数を使えば良いでしょう?

  • エクセルで文字列を数えて一覧表にしたいのですが

    たとえばですが、2人一組で配達に行きます。 メンバーは、太郎、次郎、三郎、四郎、五郎・・・と多人数です。 A1に太郎、B1に三郎 A2に次郎、B2に五郎 A3に太郎、B3に次郎 ・ ・ ・ と、いうような表ができます。 このとき、*郎は何回配達にいったのかをカウントしたいのです。 *郎は、A、Bのどちらに登場するかわかりませんし、 何回も登場しますし、組み合わせもばらばらです。 最終的に、太郎 15回、次郎 8回、三郎 21回・・・というように分かるようにしたいので、 仮にD1に太郎、E1に次郎、F1に三郎・・・の名前 (ダブって登場する名前を一つにまとめて、登場する全ての名前を残したい)、 D2に太郎、E2次郎、F2に三郎の回数(登場した名前の回数を数字で求めたい) というようにしたいのです。 エクセルの詳しい方、よろしくお願いします。

  • ワード 差込フィールドの間隔について

    度々質問してすみません。教えて下さい。 XPのワードの差込印刷で宛名ラベルを作成中です。 差込フィールドを挿入した場合、フィールドとフィールドの間にスペースを挿入したいのですが、自動的にくっついてしまいます。 下記のように家族1と家族2の間と、家族3と家族4の間にスペースを入れて 《〒郵便番号》 《住所》 《氏名_様》 《家族1_様》 《家族2_様》 《家族3_様》 《家族4_様》 《家族5_様》 データを差し込んだ時に 〒100-0001 千代田区XXX-XXX 佐藤太郎 様 二郎 様 三郎 様 四郎 様 五郎 様 六郎 様 となるようにしたいのですが、エクセルのデータを読み込むと、 〒100-0001 千代田区XXX-XXX 佐藤太郎 様 二郎 様三郎 様 四郎 様五郎 様 六郎 様 となって前の人の様と次の人の名前がくっついてしまいます。 差込フィールドと差込フィールドの間にスペースを入れるための方法を教えて頂けますか?何卒宜しくお願い致します。

  • エクセルでのデータ抽出方法について

    Excel2010で、IDと氏名を結びつけたリスト表を作成しようと考えています。 例として以下のようなエクセル表があったとします。 ※列A・列B→ID及び氏名   列D・列E→列A・列Bから抽出したい情報        【列A】    【列B】    【列C】    【列D】    【列E】      【行1】   11111   山田 太郎    -      11119    (※「山田 九郎を」入れたい) 【行2】   11112   山田 二郎    -      11112    (※「山田 二郎を」入れたい)     【行3】   11113   山田 三郎    -       11118    (※「山田 八郎を」入れたい)     【行4】   11114   山田 四郎    -       11114    (※「山田 四郎を」入れたい) 【行5】   11115   山田 五郎              【行6】   11116   山田 六郎                【行7】   11117   山田 七郎           【行8】   11118   山田 八郎 【行9】   11119   山田 九郎         : D列は既に入力済み(確定)で、IDが割り振られている人の氏名をE列に挿入したい場合の エクセルの操作方法について教えていただきたく、よろしくお願いします。

  • 一郎二郎三郎四郎五郎六郎七郎八郎九郎十郎・・・

    一郎・二郎・三郎・四郎・五郎・六郎・七郎・八郎・九郎・十郎で・・・ (1)あなたの親族知人でいるのは、どの名前ですか?    因みに私の場合は、中学校の恩師に一郎先生と、妻の叔父に四郎さんがいるだけです。 (2)それぞれで思いつく有名人は、誰ですか? 各1名づつ上げてみてください。    (全部でなくとも、思いつく名前だけで結構です)

  • 計算式を教えてください

    下記の左表を、矢印右側のような表に集計したいのですが、 うまく計算式ができません。教えてください。 計算式で出したいのは、右表の「40」「太郎」「15」「次郎」・・ のデータの部分です。    名前  ランク  点数      1位 名前  2位 名前 ・・・ 総務 三郎  3位  5  ⇒ 総務  40 太郎   15 次郎 ・・・ 総務 太郎  1位  40    経理  60 五郎   50 司郎 ・・・ 総務 次郎  2位  15   経理 司郎  2位  50 経理 五郎  1位  60 経理 六郎  3位  4

  • 「並び替えとフィルター」を使って空白以外を抽出

    シート1に別のシートから抽出した人名が並んでいます。 シート2にも別のシートから抽出した数字が並んでいます。 人名と数字は同じ行/列に格納されます。 シート1もシート2も空白が含まれています。 シート3に人名と数値を隣り合わせで格納したいのです。 シート1とシート2共に、「並び替えとフィルター」を使って空白以外を 抽出したいのですが、「昇順/降順」を使うと、人名と数字の関連が崩れる ので困っています。 「並び替えとフィルター」で不可能ならば、別な方法でも構いません。 ご教示いただけますようお願い致します。 シート1                 シート2   A   B   C   D         A   B   C   D 1 太郎     次郎         1 100       10 2 三郎 花子     春子     2   5  200       50 3         秋子 夏子     3         500  100 4 四郎 五郎 六郎         4  80  300  400 5 七郎         冬子     5 300            60 シート3   A   B   C   D   E   F   G   H 1 太郎 100  花子 200  次郎 10  春子 50 2 三郎   5  五郎 300  秋子 500  夏子100      3 四郎  80          六郎 400  冬子 400    4 七郎 300      5                 

専門家に質問してみよう