見出し画像

13-一行ずつ検索する(エクセルマクロ)

繰返しの処理を使って一行ずつ目当ての値を探す。

皆さんこんにちは。
前回の続きです。

◆イメージ

画像2

◆完成マクロ

画像1


◆前回確認したコード

   Dim i As Long
⑤For i = 2 To 8
 ③If kakikomi.Range("B2").Value = masuta(i, 2) Then
  ①kakikomi.Range("C2").Value = masuta(i, 3)
  ④Exit For 
 ③End If
⑤Next

◆解説
前回のコードでは、C2に値を入力するコードを書きました。
masutaの「i」行3列目が書き込まれるという想定です。
(3列目が書き込まれることは決まってますからね。)
①が実際にセルに書き込まれるコード
③のIf文ではC2の隣のセルB2セルの値がmasutaの「i」行2列目と一致すれば。(→①書込む)
そして⑤「i」が2から8まで変化するようにコード全体を「For Next」の繰り返し構文で挟みます。
④は値を入力したら繰返し処理からすみやかに抜ける。

書込み先の行を移動させる

ではここから今回のコード作成の続きに入ります。
書込み先のセルをC2に固定して、masutaから値を検索・取得し、書き出すところまで完成しましたので、次にC2だけでなく、C3, C4, C5, , , , C12と書き込み先のセルを一行下に移動して同じ処理で書き出すようにコードを書いていきます。

まず、今固定されているkakikomiシートのセル"B2", "C2"の2の部分ですね。

⑤For i = 2 To 8
 ③If kakikomi.Range("B2").Value = masuta(i, 2) Then
  ①kakikomi.Range("C2").Value = masuta(i, 3)
  ④Exit For 
 ③End If
⑤Next

この2の部分が2から12までの行番号に変化していけばいいですよね。
変化させたい値は変数をつかいます。
「i」は使っていますので、「j」にしましょう。
すると、

⑤For i = 2 To 8
 ③If kakikomi.Range("B" & j).Value = masuta(i, 2) Then
  ①kakikomi.Range("C" & j).Value = masuta(i, 3)
  ④Exit For 
 ③End If
⑤Next

このようになりますね。そして、「j」の変化の範囲をマクロ側に伝えるため、「For Next」構文を使って「j」の変化の範囲を指定します。

⑦Dim j As Long(⇦ j の変数宣言もこの時に同時に書く)
⑥For j =2 to 12
 ⑤For i = 2 To 8
  ③If kakikomi.Range("B" & j).Value = masuta(i, 2) Then
   ①kakikomi.Range("C" & j).Value = masuta(i, 3)
   ④Exit For 
  ③End If
 ⑤Next
⑥Next

で、できました!
これでマクロの完成です。早速ご自分でも実行してみてください。
始めて完成マクロを見た時とは違って、かなり理解できる部分が出てきたと思います。このマクロが使えると思ったときにはぜひ使ってみて、慣れていってください!

今回はここまでです。ではまた次回まで♪

関連動画

■作業動画■VLOOKUP関数を使わずに配列から値を取得




この記事が気に入ったらサポートをしてみませんか?