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

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

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

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

Q&A

0回答

492閲覧

VBA 配列から検索→一致したIDの値を取得したい

mizuno0377

総合スコア5

VBA

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

0グッド

1クリップ

投稿2021/06/07 11:55

Excel VBAで業務効率化の自動化ツールを作成しており、以下のコーディングの箇所がわからない状況です。
仕様は、表1の詳細情報が記入されたファイルを読み込み、表2の合併版の表に一元管理できる
自動化ツールを作成しています。

特に分からない所は
・配列から同じIDを検索して一致しているか見つけたい
・検索して一致しているIDに紐づいた値を取得する

・エラー箇所
Set temp = Worksheets("一覧表").Cells(i,6).Find(keyList(0),",")
→実行時エラー'91' オブジェクト変数またはWithブロック変数が設定されていません

・「検索して一致しているIDに紐づいた値を取得する」に関しては
以下の以下のコードを書いていますが、正確なコードがわかりかねています・・
If temp.Filter (keyList(0),",") Then

VBA

1Sub data() 2Dim keyList() As Variant 3Dim i As Long 4Dim a As Workbook 5Dim temp As Range 6Set a = ActiveWorkbook 7 8ReDim keyList(6) 9keyList(0) = a.worksheets(1).Columns("C") 10keyList(1) = a.worksheets(1).Columns("M") 11keyList(2) = a.worksheets(1).Columns("N") 12keyList(3) = a.worksheets(1).Columns("O") 13keyList(4) = a.worksheets(1).Columns("P") 14keyList(5) = a.worksheets(1).Columns("Q") 15 16cnt = 4 17For i = LBound(keyList) To UBound(keyList) 18 Set temp = Worksheets("一覧表").Cells(i,6).Find(keyList(0),",") 19 20If temp.Filter (keyList(0),",") Then 21 If Worksheets("一覧表").Cells("H" + cnt).Value = "" Then 22 Worksheets("一覧表").Cells("H" + cnt).Value = temp(i) 23 End If 24End If 25Next i 26 27End Sub 28

お気づきの点ありましたら、ご教授いただけますでしょうか。

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

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

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

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

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

jinoji

2021/06/07 15:37

何がしたくてこのコードになったのか、説明を読んでもコードを読んでも読み取れませんでした。 表1=worksheets(1)で 表2=Worksheets("一覧表")なの? とか worksheets(1).Columns("C")などの各列には何が入っているの? とか 何の値をどこの範囲で検索するの? 紐づく値とはどこの範囲のもの? とか コードにコメントを入れるか、説明文をもう少し詳しく書くかしてもらえると 何かしらのアドバイスができそうなのですが。
tosi

2021/06/08 07:32 編集

Set temp = Worksheets("一覧表").Cells(i,6).Find(keyList(0),",") iにはゼロが入るのでエラーがでるでしょう。 keyList(0)は配列なので、この部分は文字列では? tempはRangeオブジェクトなので、返却する型が一致しない。 Findでの返却は数値を返すと思う。 If temp.Filter部分も記述が怪しいので、デバック(ウォッチ等)で必要な値が取れているか確認しながら、遣ったほうが良いと思います。If temp.Filter部分は前行のエラーが解消されてから記述されて方が宜しいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問