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

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

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

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

Q&A

解決済

1回答

3913閲覧

エクセル VBA 別ファイルから抽出した2つの値を結合して表示

marutoki

総合スコア16

VBA

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

0グッド

0クリップ

投稿2017/01/14 15:14

初心者です、教えてください。
同一フォルダに別ファイル①.xlsmの春夏シートがありまして、
春夏シートのA列とアクティブシートのC列に一致した値がある場合、
1.春夏シートのE列をアクティブシートのF列へ
2.春夏シートのDとF列を結合してアクティブシートのE列へ

という処理をしたいのですが、
1は問題なく動くのですが、2がうまくいかず、
「型が一致しません」と出ます。(下記コードでエラー)
ThisWorkbook.Worksheets("Sheet1").Range("E" & I).value = Shohin & strColor ⇐黄色

Option Explicit Sub Sample() Application.ScreenUpdating = False Dim I As Long Dim xlBook As Workbook Dim data As String Dim Shohin Dim strColor Set xlBook = Workbooks.Open(fileName:=ThisWorkbook.Path & "\①.xlsm") For I = 5 To 20000 'サイズを抽出してF列へ ThisWorkbook.Worksheets("Sheet1").Range("F" & I).value = Application.VLookup(ThisWorkbook.Worksheets("Sheet1").Range("C" & I).value, xlBook.Worksheets("春夏").Range("A2:F20000"), 5, False) '商品+カラー抽出して結合してE列へ Shohin = Application.VLookup(ThisWorkbook.Worksheets("Sheet1").Range("C" & I).value, xlBook.Worksheets("春夏").Range("A2:F20000"), 4, False) strColor = Application.VLookup(ThisWorkbook.Worksheets("Sheet1").Range("C" & I).value, xlBook.Worksheets("春夏").Range("A2:F20000"), 6, False) ThisWorkbook.Worksheets("Sheet1").Range("E" & I).value = Shohin & strColor Next xlBook.Close 'Application.ScreenUpdating = True MsgBox ("完了") End Sub

気になる質問をクリップする

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

アクティブシートのC列i行の値が春夏シートA2:F20000に存在しない場合、変数ShohinとstrColorそれぞれにエラー値が格納されます。
そのためいくつかの変数の中身を結合する時に、1つでもエラー値の変数があれば結合が不可となり処理が止まることになると思われます。

今回の場合、vloolup関数の結果がエラーとなり、そのエラーを変数ShohinとstrColorに格納することで最後の結合処理が失敗しています。
解決策としては、vlookup関数のエラーを無視するか、エラーがあった場合の処理を加えます。

①エラーを無視する場合:
for文の前に "On Error Resume Next" を記載

これによりアクティブシートのC列i行の値で、春夏シートA2:F20000に存在しないものを認識しても処理が止まることはなくなります。

②エラーがあった場合の処理を用する場合:
for文の前に "On Error GoTo エラー時の処理名" を記載し、
"End Sub" の直前に以下の記述を記載します。
'--------------------------
Exit Sub
エラー時の処理名:
エラー時の処理内容
'--------------------------

参考:http://officetanaka.net/excel/vba/tips/tips104.htm

投稿2017/01/14 19:15

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

marutoki

2017/01/15 14:16

丁寧にご説明までいただきありがとうございます。 とりあえず、 On Error Resume Next で思った通りの動きになりました!(´;ω;`)ウゥゥ ただ、確かこれは最後の砦的な使い方だったとおもうので、 エラー時の処理をきちんと書けるよう勉強したいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問