Excel VBA質問箱 IV

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

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


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

【10833】Vlookupについて教えてください。 ギン 04/2/15(日) 19:46 質問
【10834】Re:Vlookupについて教えてください。 りん 04/2/15(日) 21:12 質問
【10849】Vlookupについて教えてください。 ギン 04/2/16(月) 11:33 質問
【10859】Re:Vlookupについて教えてください。 りん 04/2/16(月) 23:55 回答
【10882】解決しました。 ギン 04/2/17(火) 20:14 お礼

【10833】Vlookupについて教えてください。
質問  ギン  - 04/2/15(日) 19:46 -

引用なし
パスワード
   またまた質問させて下さい。
Vlookupを使ってセルに参照された値を入れようとしています。
ActiveCell.FormulaR1C1 = WorksheetFunction.VLookup(Cells(2, 1), _
Worksheets("区分").Range("A2:D100"), 2, 0)
のようにするとエラーになってしまいます。
同じワークシート上だと大丈夫なのに
他のワークシートを参照しようとすると
だめみたいです。何故でしょうか?
どなたか宜しく御願い致します。

【10834】Re:Vlookupについて教えてください。
質問  りん E-MAIL  - 04/2/15(日) 21:12 -

引用なし
パスワード
   ギン さん、こんばんは。

>ActiveCell.FormulaR1C1 = WorksheetFunction.VLookup(Cells(2, 1), _
>Worksheets("区分").Range("A2:D100"), 2, 0)

Sub TEST()
  ActiveCell.FormulaR1C1 = WorksheetFunction.VLookup(Cells(2, 1), _
   Worksheets("区分").Range("A2:D100"), 2, 0)
End Sub
アクティブなシートのA2セルに検索値を入れて、区分シートにテーブルを作って、実行してみたらエラーになりませんでした(XL97 & WinXP)。

CommandButtonで実行ですか?ほかの部分に問題はありませんか?どんなエラーがでるのですか?

【10849】Vlookupについて教えてください。
質問  ギン  - 04/2/16(月) 11:33 -

引用なし
パスワード
   りん さん、こんにちは。
有難うございました。
検索値自体が違っていました。
このように違う検索値がある場合の回避はどのようにしたら宜しいでしょうか?
For n = r To rEnd 'rは最初の行でrEndは最後の行です。
  c2 = ActiveCell.Column
  If ActiveCell.FormulaR1C1 = WorksheetFunction.IsError _
    (WorksheetFunction.VLookup(Cells(n, 2), Worksheets _
    ("区分").Range("A2:AZ700"), 2, 0)) Then
    ActiveCell.FormulaR1C1 = "#N/A"
    ActiveCell.Offset(1).Select
  Else
    ActiveCell.FormulaR1C1 = WorksheetFunction. _
    VLookup(Cells(n, 2), Worksheets("区分").Range("A2:AZ700"), 2, 0)
    ActiveCell.Offset(1).Select
  End If
Next n
とすると検索値が違うところで実行時エラー1004が出てしまいます。
エラー処理で回避するしか無いのでしょうか?
宜しく御願い致します。

【10859】Re:Vlookupについて教えてください。
回答  りん E-MAIL  - 04/2/16(月) 23:55 -

引用なし
パスワード
   ギン さん、こんばんわ。

>検索値自体が違っていました。
>このように違う検索値がある場合の回避はどのようにしたら宜しいでしょうか?
On Error で分岐するか、CountIfでチェックしてエラーを回避するか...。

CountIfで回避してみましょう。

Sub test()
  '↓ためし用
  r = 5
  rEnd = 10
  '
  For n = r To rEnd 'rは最初の行でrEndは最後の行です。
   If Application.WorksheetFunction.CountIf(Worksheets("区分") _
            .Range("A2:A700"), Cells(n, 2).Value) = 0 Then
     'なかった
     Cells(n, 1).Value = "#N/A"
   Else
     'あった
     Cells(n, 1).Value = Application.WorksheetFunction.VLookup( _
      Cells(n, 2), Worksheets("区分").Range("A2:AZ700"), 2, 0)
   End If
  Next n
End Sub

ところで、VLOOKUPでないとだめですか?

Sub test()
  Dim r1 As Range
  '↓ためし用
  r = 5
  rEnd = 10
  'チェックするのはB列,検索結果を入れるのはA列だとして
  For n = r To rEnd 'rは最初の行でrEndは最後の行です。
   'B列の内容を完全一致で検索
   On Error Resume Next
   Set r1 = Worksheets("区分").Range("A2:AZ700").Find( _
         what:=Cells(n, 2).Value, LookAt:=xlWhole)
   On Error GoTo 0
   '結果分岐(結果はA列)
   With ActiveSheet.Cells(n, 1)
     If r1 Is Nothing Then
      .Value = "#N/A"
     Else
      .Value = r1.Offset(0, 1).Value 'B列から取得
     End If
   End With
   Set r1 = Nothing '開放
  Next n
End Sub

こんな感じです。

【10882】解決しました。
お礼  ギン  - 04/2/17(火) 20:14 -

引用なし
パスワード
   りん さん こんばんは!

解決しました。
とてもすばらしいです。

今回は、CountIfを使ってみました。
3日間くらい悩んで解らなかったのに・・・
目からうろこが落ちる思いです。
私の変な構文も直していただき
有難うございました。
(Activecell.Offset(1).Selectなど)
cells(n,2).valueでしたね。
On Errorの方はこんど試させていただきます。
こちらでも出来そうです。
VlookUPを使う目的は
検索列が35と多く参照先が一つなので
そちらの方が良いかなと思ったからです。
私もりんさんのように他の人にアドバイスが
出来る様にもっともっと勉強したいと思います。
これからも宜しく御願い致します。

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