ここから本文です

FOR文の記述について教えて下さい。 当方、VBAが全くの初心者です。

tos********さん

2017/4/408:45:28

FOR文の記述について教えて下さい。

当方、VBAが全くの初心者です。

VBAで結合したセルの値で別シートの結合したセルを検索し、検索結果の同じ行にコピーするというVBAを組もうとして難儀しています。
具体的にはシート①のB2セル(例100)とB3セル(例200)をB4セルでvalue(conect)(例100200)とし、B4セルでシート②のg列(このセルもA列とB列をコネクトしたセル)を検索し、ヒットした行のc列の数値をシート①のB6セルにコピーする事をしたいです。
検索条件がg列に存在しなかった場合、メッセージで”検索条件が存在しません”と返す様に変更をしたいのですが、for~nextの文をどの様に変更すれば良いでしょうか。

申し訳ありませんが、知恵をお貸し下さい。



Dim a As Long
Dim b As Long

Set sh1 = Worksheets("シート①")
Set sh2 = Worksheets("シート②")


'b6セルの値を変数『a』に格納
With sh1
a = .Range("b4").Value
End With

'for~nextを使用した検索
With sh2
For x = 1 To .Range("g65536").End(xlUp).Row
If .Cells(x, 6).Value = a Then
'検索したセルの3行左のセルの値を変数『b』に格納
b = .Cells(x, 7).Offset(, -3).Value
Exit For
End If
Next
End With

’シート①のb6に格納した数値をコピー
With sh1
.range("b6") = b
End With

End Sub

閲覧数:
45
回答数:
1

違反報告

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

プロフィール画像

カテゴリマスター

lin********さん

2017/4/409:20:59

まず、

With sh1
a = .Range("b4").Value
End With

ですが、1つだけのために「With」を使っても意味がありません。

1つだけなら、単純に「a = sh1.Range("B4").Value」と書いた方が、見やすいですし、マクロ全体がムダに長くなりません。

質問者のマクロでも、何回も「sh2」が出てくる場合は、「With」の方が、分かりやすいですし、記述も簡単になりますから、意味があります。

回答ですが、

sh1.range("B6") = .Cells(x, 7).Offset(, -3).Value

では、いけないのですか?

もしくは、

b = .Cells(x, 7).Offset(, -3).Value
sh1.range("B6") = b

とか。

  • 質問者

    tos********さん

    2017/4/409:43:57

    回答ありがとうございます。記述のやり方、ありがとうございます。色々な記述例を見て、似たような使い方をしているのを探して、変更したので、効率の良いとはこういうのかと、目から鱗です。あと、申し訳ありません。g行に存在しなかった場合のコメントを返すやり方も教えて頂ければ、うれしいです。

  • その他の返信(2件)を表示

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

  • 取り消す
  • キャンセル

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

2017/4/4 10:01:27

本当にありがとうございます。丁寧な説明、非常に分かりやすく、感謝です。早速、修正を実施します。ありがとうございました。

この質問につけられたタグ

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

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

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

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

閉じる

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

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

閉じる