Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


8084 / 13645 ツリー ←次へ | 前へ→

【35207】ワークシート関数使用時の他シートデータ参照について hiropon 06/2/23(木) 19:51 質問[未読]
【35211】Re:ワークシート関数使用時の他シートデー... ponpon 06/2/23(木) 20:43 発言[未読]
【35218】Re:ワークシート関数使用時の他シートデー... ponpon 06/2/23(木) 21:47 発言[未読]
【35220】Re:ワークシート関数使用時の他シートデー... hiropon 06/2/23(木) 21:51 お礼[未読]
【35213】Re:ワークシート関数使用時の他シートデー... Kein 06/2/23(木) 20:51 発言[未読]
【35221】Re:ワークシート関数使用時の他シートデー... hiropon 06/2/23(木) 21:58 お礼[未読]
【35214】Re:ワークシート関数使用時の他シートデ... 太公望 06/2/23(木) 20:56 回答[未読]
【35223】Re:ワークシート関数使用時の他シートデ... hiropon 06/2/23(木) 22:09 お礼[未読]

【35207】ワークシート関数使用時の他シートデータ...
質問  hiropon  - 06/2/23(木) 19:51 -

引用なし
パスワード
   はじめて投稿します。よろしくお願いいたします。

シート1のA列、B列という表とシート2のA列、B列という表の二つの表があり、
シート1のA列のデータを頭から全て順に、シート2のA列のデータと比較して
データが一致したらシート2のB列の値をシート1アクティブセルの隣のセル
(B列)データを転記するVBAを作りたいと思っています。シート1がアクティブ
な状態で以下のコードを実行すると

Do Until ActiveCell.Value = ""

ActiveCell.Offset(0, 1).Value = Application.WorksheetFunction.VLookup(ActiveCell.Value, 作業シート!A:B, 2, False)

ActiveCell.Offset(1).Select

Loop

というコードを書いたのですが、”作業シート!A:B”の”:”部分にフォーカス
があたり、構文エラーが発生してしまいます。[作業シート!A:B]と書き換えてみ
たり、(作業シート!A:B)としてみたり、””で囲ってみたりしたのですが、ど
うにもエラーが解除されません。

ワークシート関数(VLOOKUP)の参照範囲が異なるシートの場合、VBAではどのよ
うに記述したらよいのでしょうか?

アドバイス頂けましたら幸いです。よろしくお願いいたします。

OS:WindowsXP
Ver:Excel2003

【35211】Re:ワークシート関数使用時の他シートデ...
発言  ponpon  - 06/2/23(木) 20:43 -

引用なし
パスワード
   こんばんは。

>シート1のA列、B列という表とシート2のA列、B列という表の二つの表があり、
>シート1のA列のデータを頭から全て順に、シート2のA列のデータと比較して
>データが一致したらシート2のB列の値をシート1アクティブセルの隣のセル
>(B列)データを転記するVBAを作りたいと思っています。

シート2のA列のデータには、重複は、ないのでしょうか?

Vlookupでは、ありませんが、
シート1のA列のデータを上から順に見ていき、シート2のA列のデータと
一致したら、シート2のB列の値を検索したシート1のA列の隣(B列)に
転記します。
 こういう意味でしょうか?

Sub test()
  Dim myR As Range
  Dim r As Range
  Dim FR As Variant
 
  With Sheets("Sheet1")
   Set myR = Range("A1", Range("A65536").End(xlUp))
  End With
  
  Application.ScreenUpdating = False
  For Each r In myR
   FR = Application.Match(r.Value, Sheets("Sheet2").Range("A:A"), 0)
   If Not IsError(FR) Then
     r.Offset(, 1).Value = Sheets("Sheet2").Cells(FR, 2).Value
   End If
  Next
  Application.ScreenUpdating = True
End Sub

【35213】Re:ワークシート関数使用時の他シートデ...
発言  Kein  - 06/2/23(木) 20:51 -

引用なし
パスワード
   ワークシートに埋め込む数式の場合は、"作業シート!A:B" という文字列でないとダメ
ですが、VBAコードの中で計算する場合は「オブジェクトそのもの」を引数に
渡さないといけません。従ってそこは Sheets("作業シート").Range("A:B") に
するべきでしょう。

【35214】Re:ワークシート関数使用時の他シートデ...
回答  太公望  - 06/2/23(木) 20:56 -

引用なし
パスワード
   今晩は。

VLOOKUPを使うと、こんなになります。
Dim r As Range
  For Each r In Range("a1", Range("A65536").End(xlUp))
    r.Offset(0, 1).Value = Application. _
      VLookup(r.Value, Sheets("作業シート").Range("A:B"), 2, False)
  Next


>ワークシート関数(VLOOKUP)の参照範囲が異なるシートの場合、VBAではどのよ
>うに記述したらよいのでしょうか?
>
>アドバイス頂けましたら幸いです。よろしくお願いいたします。
>
>OS:WindowsXP
>Ver:Excel2003

【35218】Re:ワークシート関数使用時の他シートデ...
発言  ponpon  - 06/2/23(木) 21:47 -

引用なし
パスワード
   こんばんは。
.が抜けていました。
  With Sheets("Sheet1")
   Set myR = .Range("A1", .Range("A65536").End(xlUp))
  End With

【35220】Re:ワークシート関数使用時の他シートデ...
お礼  hiropon  - 06/2/23(木) 21:51 -

引用なし
パスワード
   ▼ponpon さん:

こんなに短時間でレス頂き、本当にありがとうございます。

>シート2のA列のデータには、重複は、ないのでしょうか?

はい、シート2のA列データには重複はありません。質問文を後から読んで
みると意味不明な文になっていて恐縮です。それでも正確に内容を把握し
て的確なアドバイスを頂き感謝です。

>Vlookupでは、ありませんが、
>シート1のA列のデータを上から順に見ていき、シート2のA列のデータと
>一致したら、シート2のB列の値を検索したシート1のA列の隣(B列)に
>転記します。
> こういう意味でしょうか?
>
>Sub test()
>  Dim myR As Range
>  Dim r As Range
>  Dim FR As Variant
> 
>  With Sheets("Sheet1")
>   Set myR = Range("A1", Range("A65536").End(xlUp))
>  End With
>  
>  Application.ScreenUpdating = False
>  For Each r In myR
>   FR = Application.Match(r.Value, Sheets("Sheet2").Range("A:A"), 0)
>   If Not IsError(FR) Then
>     r.Offset(, 1).Value = Sheets("Sheet2").Cells(FR, 2).Value
>   End If
>  Next
>  Application.ScreenUpdating = True
>End Sub

素晴らしいです!w(゜o゜)w上記のコードには私が疑問に思っていた事や他の
テクニックが盛り込まれていて大変勉強になりました。シートの範囲選択の
方法や、選択範囲内をMatch関数を使い、順に検索して、エラーが発生して
いなければシート2のB列の値をシート1のB列に転記するというテクニックは
すごいと思いました。

これで問題は解決できると思います。

本当にありがとうございました。m(_ _)m

【35221】Re:ワークシート関数使用時の他シートデ...
お礼  hiropon  - 06/2/23(木) 21:58 -

引用なし
パスワード
   ▼Kein さん:
>ワークシートに埋め込む数式の場合は、"作業シート!A:B" という文字列でないとダメ
>ですが、VBAコードの中で計算する場合は「オブジェクトそのもの」を引数に
>渡さないといけません。従ってそこは Sheets("作業シート").Range("A:B") に
>するべきでしょう。

Keinさん、回答頂きありがとうございます。m(_ _)m 納得の回答です。
マクロの記録で式を作成し、そのコードに手を加えてコードを作成した
のですが、根本的な知識が乏しかったです。

これからも努力して腕を磨き、今度は私も皆の力になれればと思います。

【35223】Re:ワークシート関数使用時の他シートデ...
お礼  hiropon  - 06/2/23(木) 22:09 -

引用なし
パスワード
   ▼太公望 さん:
>今晩は。
>
>VLOOKUPを使うと、こんなになります。
>Dim r As Range
>  For Each r In Range("a1", Range("A65536").End(xlUp))
>    r.Offset(0, 1).Value = Application. _
>      VLookup(r.Value, Sheets("作業シート").Range("A:B"), 2, False)
>  Next
>
太公望さん、ご回答頂きありがとうございます。m(_ _)m
VLOOKUPバージョンの回答を頂き感謝です。
ループのまわし方や、他のシートへの参照方法など大変勉強になりました。

これで問題も解決なのでとても助かりました。

本当にありがとうございました。

8084 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free