- 締切済み
excelのファイルを比較して列を追加するマクロを捜しています。
Aのファイルに製品番号と製品名が書かれています。Bのファイルに製品番号とサイズが書かれています。 これを製品番号を元に製品名とサイズが書かれたひとつのファイルにまとめれる方法を捜しています。 Bのファイルは抜け番があり、列をくっつける訳には行かないので、AとBを比較して同じ製品番号に対して、 サイズを追加できるようなマクロはないでしょうか? ちなみに自分ではマクロを作れないので、 VECTOR等でダウンロードして使える物はないでしょうか? ファイルA 製品番号 製品名 11111111 ABCDE 11111112 AABBCC 11111113 AAABB 11111114 AAAABB 11111115 BBBBCCDD 11111116 CCCCDDEE 11111117 CCDDEE 11111118 FFGG ファイルB 製品番号 サイズ 11111111 20×50 11111112 10×40 11111115 30×30 11111117 40×20 11111118 10×10 結合して、このようにしたいのです。 製品番号 製品名 サイズ 11111111 ABCDE 20×50 11111112 AABBCC 10×40 11111113 AAABB 11111114 AAAABB 11111115 BBBBCCDD 30×30 11111116 CCCCDDEE 11111117 CCDDEE 40×20 11111118 FFGG 10×10
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 #2の回答者です。 >#N/A をブランクで表示させる方法はあるでしょうか? IF(ISERROR(VLOOKUP(A1,[Book1]Sheet1!$A:$B,2,FALSE)),"", _________) とISERROR 関数で囲んで、TRUE で、"" とすればよいのですが、私は、あまりそういう方法をとりません。同じものが重なるからです。本物の何もないEmpty 状態は、数式では基本的にはありません。 なお、Excel VBAは、実務的には、ワークシートが良く分かってから使うほうが楽ですが、VBA自体は、あまりワークシートを念頭に置かないで学習したほうが、絶対的に覚えが早いです。そういう教本もありますが、あまり売れていません(^^;理由は、プログラムだけなので面白みが少ないのです。 私は、VBAよりも、関数のほうが難しく感じることが多いです。イメージの中で、数式を組み立てなければならないからです。その上に、何を使ってよいのとか悪いのとか、関数自身にも、それぞれの癖があったりしますから、やりにくいです。 検索するのなら、最初の引数が、検索語であればよいと思うのですが、それが、第二引数にきたりすることもあります。 VBAは、コードを足したり引いたり、途中の間違えも、プロパテイも、VBEditr 自身が教えてくれます。
- squip
- ベストアンサー率16% (2/12)
>ただ]、[編集]メニュー からは#N/A をブランクにが出来ないので 4. の手順を実行していますか? その上で、[編集]メニュー → [置換...] を選択すると、[置換] ダイアログが現れますので、[検索する文字列] に #N/A を入力し、[置換後の文字列] には何も入力しない、何か入力されているなら消去します。 >=IF(C1="","",VLOOKUP(A1,[Book2]Sheet1!$A:$B,2,FALSE)) かな? >と思ってやってみましたが、これもうまくできませんでした。 空の文字列はブランクではありません。 表示上見えないだけであり、これを多用するとやっかいなバグの元になりますよ。 新規ワークブックで、セル A1 に、="" と入力、セル B1 に、=ISBLANK(A1) と入力してみます。 セル B1 の値は、当然 FALSE となります。 次に、セル A1 を [コピー]、[形式を選択して貼り付け] で [値] に置き換えます。 セル A1 は、一見ブランクのようですが(数式バーにも何も表示されない。)、セル B1 の値は、FALSE のままです。 さらに、セル A1 を選択して、[Delete] キーを押下してみます。 ここでやっと、セル B1 の値が、TRUE となります。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 一応、割り込みしておきます。 いくつか方法はありますが、例えば、 =IF(C1="","",VLOOKUP(A1,[Book1]Sheet1!$A:$B,2,FALSE)) ↓ =IF(COUNTIF([Book1]Sheet1!$A:$A,A1),VLOOKUP(A1,[Book1]Sheet1!$A:$B,2,FALSE),"") というようにしたらよいと思います。
お礼
ありがとうございます。 =IF(COUNTIF([Book1]Sheet1!$A:$A,A1),VLOOKUP(A1,[Book1]Sheet1!$A:$B,2,FALSE),"") ではうまくいかなかったので、昨日マクロ入門の本を買って来て 勉強しております。 多分私のやり方が間違っていると思います。 もう少し勉強したら、どこが問題なのかが分かると思います。 知識ががなくて申しわけないです。
- squip
- ベストアンサー率16% (2/12)
ファイルA を Book1、ファイルB を Book2 とし、Book1 にサイズ列を追加します。 1. Book1、Book2 を開きます。 2. Book1 のセル C1 を選択して、以下の式を入力。 =VLOOKUP(A1,[Book2]Sheet1!$A:$B,2,FALSE) 3. Book1 のセル C1 を選択した状態で、フィルハンドルをダブルクリック。 4. [編集]メニュー → [コピー]、[編集]メニュー → [形式を選択して貼り付け...] ダイアログで [値] を選択して、[OK] をクリック。 5. あとは、[編集]メニュー → [置換] で #N/A をブランクに置き換えれば完成。
補足
ご教授ありがとうございます。 サイズ列には間違いなくデータを持ってこれました。 ただ]、[編集]メニュー からは#N/A をブランクに置き換えが出来ないので =IF(C1="","",VLOOKUP(A1,[Book2]Sheet1!$A:$B,2,FALSE)) かな? と思ってやってみましたが、これもうまくできませんでした。 #N/A をブランクで表示させる方法はあるでしょうか?
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 このファイルは、A列B列の1行目から使っているものとします。 「データの元のシート」と「引用される側のシート」は、良くみて、コードの中を実際のブック名やシート名に書き換えてください。 この意味は、 Set Sh1 = Workbooks("Book1.xls").Worksheets("Sheet1") Sh1.Range("A1", Sh1.Range("A65536").End(xlUp)) Book1.xls のSheet1 のA1 から、A65536 から上に検索して、データがあるところまで(Ctrl + ↑) ということです。 c.Offset(, 2).Value = rng2.Cells(i, 2).Value 書き込みは、検索して見つかった2行列目のデータを、検索値のオフセット右に2つ、つまり、A列ならC列にデータを書き込めという意味です。 '標準モジュールが良いです。 Sub IntegrateSheets() Dim Sh1 As Worksheet Dim Sh2 As Worksheet Dim c As Variant Dim rng1 As Range Dim rng2 As Range Dim i As Long 'データの元のシート Set Sh1 = Workbooks("Book1.xls").Worksheets("Sheet1") Set rng1 = Sh1.Range("A1", Sh1.Range("A65536").End(xlUp)) '引用される側のシート Set Sh2 = Workbooks("Book2.xls").Worksheets("Sheet1") Set rng2 = Sh2.Range("A1", Sh2.Range("A65536").End(xlUp)) Application.ScreenUpdating = False On Error Resume Next For Each c In rng1 i = 0 i = WorksheetFunction.Match(c.Value, rng2, 0) If i > 0 Then c.Offset(, 2).Value = rng2.Cells(i, 2).Value End If Next c On Error GoTo 0 Application.ScreenUpdating = True Set rng1 = Nothing: Set rng2 = Nothing Set Sh1 = Nothing: Set Sh2 = Nothing End Sub
お礼
早速のご教授ありがとうございます。 上の方のやり方で一応できたので、マクロの本を読みながら このマクロをじっくり研究してみたいと思います。 ありがとうございました。
お礼
何度もありがとうございます。 一度変換できたのですが、今度は#N/Aでなくて0が表示される ようになりました。 私のやり方のどこかが間違っているのだと思います。 本で勉強したり、詳しい同僚にも聞いてみたら多分解決できると思います。 一番肝心のマクロ自体が教えて頂けたので、後はなんとかなると思います。 ありがとうございました。