• ベストアンサー

エクセルで異なるファイルのA列とB列の差分を書き換え

tossy005の回答

  • ベストアンサー
  • tossy005
  • ベストアンサー率38% (7/18)
回答No.1

1.csvと2.csvの内容がよく分かりませんが、以下のようだと想像しました。 ■1.csvの内容 A列に検索のキーとなる型番がある B列に数量がある ■2.csvの内容 C列に検索のキーとなる型番がある D列に数量がある ■プログラムの目的 1.csvと2.csvのキー同士を照らし合わせ、1.csvの数量を2.csvの数量に反映する もしそうなら、2.csvを開いた状態で以下のマクロをご使用下さい。 ただし、マクロの初期設定の項目を実際のシートの内容に変更してからご使用下さい。 ■マクロ Sub test() Dim file_name As String Dim key1_retsu As Integer Dim key1_gyou As Integer Dim key2_retsu As Integer Dim key2_gyou As Integer Dim syutoku_retsu As Integer Dim henkou_retsu As Integer Dim kuuhaku_cnt As Long Dim kuuhaku_ok As Integer Dim sheet_name1 As String Dim sheet_name2 As String Dim line_cnt As Long Dim xlapp As Excel.Application Dim xlbook As Excel.Workbook Dim xlsheet As Excel.Worksheet Dim r As Excel.Range Dim max_gyou As String '*******************************************初期設定開始******************************************* '初期設定のデータは実際のデータに合わせて値を変えて下さい '1.csvのキーとなるデータが始まるセルの列(例題の場合型番の最初のセル(1,1)の列、つまり1) key1_retsu = 1 '1.csvのキーとなるデータが始まるセルの行(例題の場合型番の最初のセル(1,1)の行、つまり1) key1_gyou = 1 '2.csvのキーとなるデータが始まるセルの列(例題の場合型番の最初のセル(3,3)の列、つまり3) key2_retsu = 3 '2.csvのキーとなるデータが始まるセルの行(例題の場合型番の最初のセル(3,3)の行、つまり3) key2_gyou = 3 '1.csvの取得するデータのあるセルの列(例題の場合数量の列、つまり2) syutoku_retsu = 2 '2.csvの変更するデータのあるセルの列(例題の場合数量の列、つまり2) henkou_retsu = 4 '1.csvの該当するデータのあるシート名(例題の場合"1") sheet_name1 = "1" '2.csvの該当するデータのあるシート名(例題の場合"2") sheet_name2 = "2" 'データとデータの間に何行の空白まで許容するか。データがすべて連続しているなら0でよい kuuhaku_ok = 100 '1.csvのフルパス。ダイアロクで指定したい場合は改編してください。今回はDドライブの直下にあるとします。 file_name = "D:\1.csv" '*******************************************初期設定終了******************************************* Set xlapp = CreateObject("Excel.Application") Set xlbook = xlapp.Workbooks.Open(file_name, , True) Set xlsheet = xlbook.Worksheets(sheet_name1) line_cnt = 0 kuuhaku_cnt = 0 With xlsheet Do Until kuuhaku_cnt >= kuuhaku_ok If .Cells(key1_gyou + line_cnt, key1_retsu).Value = "" Then kuuhaku_cnt = kuuhaku_cnt + 1 Else kuuhaku_cnt = 0 End If line_cnt = line_cnt + 1 Loop End With max_gyou = line_cnt - kuuhaku_cnt line_cnt = 0 kuuhaku_cnt = 0 With ThisWorkbook.Worksheets(sheet_name2) Do Until kuuhaku_cnt >= kuuhaku_ok If .Cells(key2_gyou + line_cnt, key2_retsu).Value <> "" Then kuuhaku_cnt = 0 Set r = xlsheet.Range(xlsheet.Cells(key1_gyou, key1_retsu), xlsheet.Cells(max_gyou, key1_retsu)).Find(.Cells(key2_gyou + line_cnt, key2_retsu).Value) If r Is Nothing Then .Cells(key2_gyou + line_cnt, henkou_retsu).Interior.Color = RGB(192, 192, 192) '色は好きな色に変えて下さい Else .Cells(key2_gyou + line_cnt, henkou_retsu).Value = xlsheet.Cells(r.Row, syutoku_retsu).Value End If Set r = Nothing Else kuuhaku_cnt = kuuhaku_cnt + 1 End If line_cnt = line_cnt + 1 Loop End With Set xlsheet = Nothing xlbook.Close Set xlbook = Nothing xlapp.Quit Set xlapp = Nothing MsgBox "処理が終了しました。" End Sub

sky2009
質問者

お礼

非常に詳しい内容ありがとうございます。 さっそくテストしてみます。

関連するQ&A

  • エクセルの関数(列の差分を抽出)について

    A列(A1~A5)のデータと、B列(B1~B5)に1箇所でも差分があった場合に C7に"差分あり"みたいなことを表示させたいのですが、どのような関数になりますでしょうか。 countifの関数で試したのですが、うまくいかず。質問させて頂きます。       A列  B列   1行目  123 123 2行目  123 123 3行目  123 456 4行目  123 123 5行目  123 456 7行目 C7(列に差分があったかを表示させたい)

  • エクセル 在庫数を求める計算式

    エクセル2013を使用しています。 型番毎にシート管理していた在庫表を、 以下の内容で1シートにまためた形に変更したいと考えています。 型番毎の在庫数を求める計算式をお教え下さい。 A列:在庫管理する型番(34種類) B列:日付 C列:入荷 D列:出荷 E列:在庫 <例> 以下の場合3行目のE列(在庫:7)が1行目の同型番の、 E列(在庫:10)から算出される計算式。      A列   B列  C列  D列  E列 1行目 ABC型  11/20  0   5   10 2行目 DEF型  11/23  5   0   20 3行目 ABC型  11/24  0   3   7 ※A列に入る型番は注文次第なのでどの型番がいつくるかは未定となっています。 何卒よろしくお願い致します。

  • Excelで在庫数チェックを行いたい

    まず現状ですが、Sheet1のA列に商品型番がa,b,c,d,eとあります。 B列に在庫数を入力します。 Sheet2にはA列に商品型番があるのですが、a,a-1,a-2(以下商品bも同じb-1,b-2)とあります。B列にそれぞれの数量があります。 そこで、在庫入力セルの数式なのですが、Sheet2のa,a-1,a-2の数量を抽出して合計し、その値を返すようにしたいと思っています。商品aはa,a-1,a-2の合計数を表示させるという形です。 分かりにくくて申し訳ないですが、御教授頂ければ幸いです。 宜しくお願い致します。

  • エクセル 在庫管理(在庫数から入庫月を求める)

    エクセルでの在庫管理をご教示ください。 これまで手書きで計算していた入庫月をエクセルで行いたいと考えております。 在庫数からその在庫の一番古い入庫月を求める計算式をお教えください。 例: A列 商品名 2020/1月の B列 出荷数量 C列 入庫数量 D列 在庫数量 2020/2月の E列 出荷数量 F列 入庫数量 G列 在庫数量 2020/3月の H列 出荷数量 I列 入庫数量 J列 在庫数量 *K列に、3月の在庫数量(J列)の、一番古い在庫の入荷月を求める計算式を入力したいです。 宜しくお願い致します。

  • ファイルを比較して差分のみを出力するには…?

    とつぜんですみません。緊急なので投稿しました。 VBSを使って、2つのファイル(ファイルAとファイルB)の1行目からファイルの終わりまでを比較して差分を出力するプログラムを作成したいと考えています。 ファイルの1列目は主キーとなっております。 <ファイルA> 100,A 110,B 133,D 155,R … <ファイルB> 100,A 110,B 133,F 155,P … また差分の出力は上の例でいくと、 133,D → F 155,R → P というようなかたちでファイルに出力したいです。 どなたかアドバイス頂けないでしょうか? よろしくお願いします。

  • エクセル 行挿入のマクロについて

    こんばんは、エクセルのマクロについてお伺いします。 現在 A1:支店名 B1:連番 C1:在庫数 全部で1000行位入力があります。 ・A列には支店名 ・B列には連番は1・2・3~と1000件位 ・c列には在個数にはそれぞれ1桁から2桁の数字 【質問】 在庫数の数だけその連番の行を増やしたい。 例えば、 A2:東京支店 B2連番:1 C2在庫数:3 だとすると2行目のあとに2行挿入し在庫数が3なので下記のように3行にしたい。 A2 東京支店 B2連番 1 C2 在庫数 1 A3 東京支店 B3連番 1 C3 在庫数 空欄 A4 東京支店 B4連番 1 C4 在庫数 空欄 何せ数が多いのでマクロをお教え頂ければ助かります。 ※その際、支店名と連番は同じ物がはいるとありがたいです。 ※在庫数は空欄で構いません。 マクロでなくても方法があればお教え下さい。 よろしくお願い致します。

  • エクセル関数:複数行の値での判断がしたいです。

    エクセル2007で作業をしていて質問があります。 指示列(以下A),商品番号(以下B),カラー(以下C)、在庫数(以下D)という4列があります。 行数は千弱あります。1行はある商品に対するあるカラーの在庫数を示します。 例) A   B   C   D    ----------------------------- 更新 777 赤   3 更新 777 青   2 更新 777 黄   1 更新 888 赤   4 更新 888 青   1 更新 999 青   1 更新 999 黄   0 基本すべての商品に対して「更新」という値をAに入れたいと思っています。 ただ、以下のようにすべての色の在庫が0の場合は販売ができないので 更新対象にならないようにA列にはたとえば「無視」などと入れたいと思います。 例) A   B   C   D    ----------------------------- 無視 111 赤   0 無視 111 青   0 無視 111 黄   0 今までの他の作業は一行の中でVLOOKUPやIFなどを使って判断をしてきましたが 上記の判断をするためにはB列の値が同じ行をひとつの集団としてとらえ、 それらの行のD列の合計が0の場合、という複数行にまたがる判断が必要です。 これをうまく関数を使って判断できないでしょうか。 レコード数が多すぎるので手作業は厳しいと感じています。 今夜中に終わらせたいので迅速なご回答が頂ければ幸いです。 宜しくお願い致します。

  • エクセルVBAで、列の並び替えをしたいです。

    いつも大変お世話になっております。 初心者につき、ご教示いただけますと幸いです。 A列~BQ列までを使用したデータが 日々更新されるのですが、 デイリーでお客様へ提出する資料で必要な項目は限られており また、配列も異なる(前後している)仕様となっているため、 日々、手作業で必要な配列の抜き出しと列の配置替えをしています。 これをVBA(マクロ)で設定しておけば、 日々の作業が軽減できるかと考えておりますが、 記憶マクロで作ってはみたものの 知識不足のため、 日々更新され、範囲(行)が異なってしまうデータに対し そこにどう対応して良いかが分かりません。 お教えいただけますと幸いです。 ※A列は項番・BQは必須項目のため、Nullはありませんが、 他の項目にはNullもあります。 よろしくお願い致します。

  • 関数式がわかりません

    A列に品名をB列に在庫数を、1行目に日付を2行目に入荷・出荷を記入した上で、3行目から品名の数量を記入していく在庫表のようなものを使用しています。 この場合B列に在庫を表したいのですが三日三晩、自分なりに式を入れてみてもうまく行きませんでした。どうかご教授願います。 具体的にはB列の在庫値を 2行目の「入(入荷のこと)」「出(出荷のこと)」を読んで 入荷なら足し算、出荷なら引き算をして返してほしいんです。

  • excel vbaで複数のcsvファイルの読み込み

    100シート分のcsvファイルのデーターを一つずつ読み込んでexcelにコピーして使用してますが莫大な時間がかかって困ってます。 vbaを使用して作業を簡素化出来る事は出来ないでしょうか? ------------------------------------------ ※ csvの概要 excelで1枚のcsvファイルを開くとA列の11行目から65536行まで数値データがあります。 ※ vbaできたらよいなと思う仕様 そこで、複数のcsvファイルを選択して読み込むとCSV_データと言うSeetのA列の10行目から1枚目のcsvファイル、B列の10行目から2枚目のcsvファイルと言う風に選択した分のcsvを列に続けて数値データを貼り付けしてくれるvbaをご教授していただけると大変助かります。 不躾で申し訳ございませんが宜しくお願い致します。 excel2003 ------------------------------------------