ここから本文です

マクロの簡単な質問です。

osh********さん

2017/10/2211:55:52

マクロの簡単な質問です。

Sheet2シートのA列と業種シートのA列にある値が一致したら、Sheet2のÇ列に業種シートのC列の一致した行の値を入れる、というマクロをやったんですがERROR表記になりどこが間違ってるかわからなくなってしまいました。

vlookup使えよ、と思われると思うんですが、勉強でやっているのでマクロでやりたいです。

どこが間違っているんでしょうか、知恵を貸してください。

Sub match()
Dim workSh, prefSh As Worksheet
Set workSh = ThisWorkbook.Worksheets("Sheet2")
Set prefSh = ThisWorkbook.Worksheets("業種")

Dim prefend As Long
prefend = prefSh.Cells(Rows.Count, 1).End(xlUp).Row
Dim prefRng As Range
Set prefRng = Range(prefSh.Cells(2, 1), prefSh.Cells(prefend, 1))

Dim workEndR, workTmpR As Long, tmpStr As String
workEndR = workSh.Cells(Rows.Count, 1).End(xlUp).Row

For workTmpR = 2 To workEndR
tmpStr = workSh.Cells(workTmpR, 1).Value
On Error Resume Next
workSh.Cells(workTmpR, 3).Value = prefSh.Cells(Application.WorksheetFunction.match(tmpStr, prefRng, 0) + 1, 3)
If Err <> 0 Then
workSh.Cells(workTmpR, 3).Value = "ERROR"
Err.Clear
End If
Next
End Sub

閲覧数:
340
回答数:
2
お礼:
100枚

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

tra********さん

2017/10/2214:23:50

>ERROR表記になり
私のPCでは、エラーにはならないですね。
データに起因しているのかも?
文字列・数値の扱い方法がダメなのかも?

ただ、もっとプログラムを整理すべき。
見つかるエラーも見つけられないですよね?
整理すれば、変数が減り読みやすくなります。

Sub Sample()
Dim prefRng As Range
Dim i, ii As Long
With ThisWorkbook.Worksheets
With .Item("業種")
Set prefRng = .Range(.Cells(2, 1), .Cells(Rows.Count, 1).End(xlUp))
End With
With .Item("Sheet2")
For ii = 2 To .Cells(Rows.Count, 1).End(xlUp).Row
i = Application.Match(.Cells(ii, 1).Value, prefRng, 0)
If IsError(i) Then
.Cells(ii, 3).Value = "ERROR"
Else
.Cells(ii, 3).Value = prefRng(i).Offset(, 2).Value
End If
Next
End With
End With
End Sub

  • 質問者

    osh********さん

    2017/10/2215:09:13

    train_benoistさん

    思ったような結果が出ました。ありがとうございます。

    本当ですね、読みやすいです!もっと勉強してうまく書けるようになりたいと思います。ありがとうございました。

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

質問した人からのコメント

2017/10/22 15:10:40

今回、思う結果がでたので、train_benoistさんをベストアンサーにします。
ありがとうございました。

ベストアンサー以外の回答

1〜1件/1件中

qaw********さん

2017/10/2212:10:07

カテゴリーが違う。

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる