質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.34%

  • VBA

    1910questions

    VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

  • Excel

    1646questions

    Excelは、マイクロソフト社が開発しているデータ集計や分析を行う表計算ソフトの一つです。文書作成や表計算、資料作成などの多彩な機能を備えており、統合パッケージであるMicrosoft Officeに含まれています。

マクロ VBA 別ブックA列の値と一致した時、任意のセルに値を転記(VLookup)で転記が変

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 5,517

marutoki

score 10

またお世話になります。
教えてください。
下記コードで、一致⇒抽出⇒転記まではできたのですが、
各列で一致していない値が入った行まで値が入ってしまいます。
なぜなのかさっぱり分かりません。

※一致させる値は13ケタのJANコードです。

【追記】
もう少し詳細に症状を・・・
結局何が原因か分かりません・・・#N/Aとかは出ないんですが。
On Error Resume Next
で片方の検索列が空白だった場合飛ばすようにしています。
実際途中までは空白なのですが、
例えば、
300行目が一致、E,F,G列に値が入る。
次に、
310行目が一致、E,G,F列に値が入る。

なのですが、301~309行目に300行で転記した情報が入ってしまいます。
つまり、一度一致したら次の一致が見つかるまで転記を繰り返す状態になっているようです。
エラー時の処理としてVLookupコードの下に
On Error GoTo 0

とか入れると「型が一致しません」と出ます。

あと、別ブックにはフィルターやマクロが入っていますが、影響を及ぼすことはありますか?

Option Explicit

Sub 更新ボタン()
  Application.ScreenUpdating = False
  Dim i As Long
  Dim xlBook As Workbook
  Dim size As String
  Dim Shohin As String
  Dim strColor As String

  Worksheets(2).Activate
  Worksheets(2).Range("E5:G10004").ClearContents

  Set xlBook = Workbooks.Open(Filename:=ThisWorkbook.Path & "\商品Master(マクロ).xlsm")  '★要変更★

  On Error Resume Next

  For i = 5 To 10004
  'サイズを抽出してF列へ
  size = Application.VLookup(ThisWorkbook.Worksheets(2).Range("C" & i).Value, xlBook.Worksheets("商品Master").Range("A6:G10000"), 6, False)
  ThisWorkbook.Worksheets(2).Range("F" & i).Value = StrConv(size, vbWide) '全角にして転記


  '品名を抽出してG列へ
  Shohin = Application.VLookup(ThisWorkbook.Worksheets(2).Range("C" & i).Value, xlBook.Worksheets("商品Master").Range("A6:G10000"), 5, False)
  ThisWorkbook.Worksheets(2).Range("G" & i).Value = StrConv(Shohin, vbWide) '全角にして転記



  '商品+カラー抽出して結合してE列へ
  Shohin = Application.VLookup(ThisWorkbook.Worksheets(2).Range("C" & i).Value, xlBook.Worksheets("商品Master").Range("A6:G10000"), 5, False)
  strColor = Application.VLookup(ThisWorkbook.Worksheets(2).Range("C" & i).Value, xlBook.Worksheets("商品Master").Range("A6:G10000"), 7, False)
  ThisWorkbook.Worksheets(2).Range("E" & i).Value = StrConv(Shohin & " " & strColor, vbWide)
  Next i

  xlBook.Close

  Application.ScreenUpdating = True
  MsgBox ("完了")
End Sub
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • -K_O-

    2017/01/17 18:13

    失礼します。今回の質問を初めてみた人は前回の質問を見た上で回答しなければなりません。その上で別途回答します

    キャンセル

  • marutoki

    2017/01/17 23:17

    言葉足らずですみません、前回の問題は解決し、無事稼働していたのですが、急に症状が現れて困っているところです。(症状は追記しました)

    キャンセル

回答 2

+1

On Error Resume Next
こちらを削除すれば、値は入りません。

しかし、このような書き方ですが、型が違うとエラーが出るかもしれません。

引用
http://www.relief.jp/itnote/archives/excel-vba-error-trap-vlookup-function.php

Sub VLookupのサンプル_エラー回避_1()
 Dim tbl As Range
 Dim key As Long
 Dim ret As String

 Set tbl = Range("D1:E5")
 key = Range("A1").Value

 On Error Resume Next
 ret = WorksheetFunction.VLookup(key, tbl, 2, False)
 If Err.Number <> 0 Then
  ret = "該当なし"
 End If
 On Error GoTo 0

 Range("B1").Value = ret

End Sub


エラー処理も考慮にいれてコードを書くようにしましょう。
また蛇足ですがShohin = ・・・ の部分が2回あるので1つは不要です。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/01/17 23:22

    ありがとうございます、蛇足の件、お恥ずかしい限りです。
    エラー処理後がいまいち分からずいたのですが、IF文を使えばよかったのですね。
    しかし試したのですが、今度は「型が一致しません」と出てきてしまいます。
    今回の症状は何が原因なのか、取り込み先のブックにフィルターやマクロが入っているのって関係しますでしょうか?

    キャンセル

check解決した方法

0

う~ん、とりあえず型が一致しないので、(Valiantにしても)

Option Explicitを外して
Dim size
Dim Shohin
Dim strColor

にしたら治りました!
全然解決してませんが(-_-;)
一応症状は治りました。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

同じタグがついた質問を見る

  • VBA

    1910questions

    VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

  • Excel

    1646questions

    Excelは、マイクロソフト社が開発しているデータ集計や分析を行う表計算ソフトの一つです。文書作成や表計算、資料作成などの多彩な機能を備えており、統合パッケージであるMicrosoft Officeに含まれています。