Excel VBA質問箱 IV

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

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


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

【81204】VBAのVlookupについて as 20/3/7(土) 14:11 質問[未読]
【81205】Re:VBAのVlookupについて マナ 20/3/7(土) 15:12 発言[未読]
【81206】Re:VBAのVlookupについて as 20/3/7(土) 17:40 発言[未読]
【81207】Re:VBAのVlookupについて マナ 20/3/7(土) 17:47 発言[未読]
【81208】Re:VBAのVlookupについて as 20/3/7(土) 17:50 発言[未読]
【81209】Re:VBAのVlookupについて マナ 20/3/7(土) 18:22 発言[未読]
【81210】Re:VBAのVlookupについて as 20/3/7(土) 18:43 発言[未読]
【81211】Re:VBAのVlookupについて マナ 20/3/7(土) 18:51 発言[未読]
【81212】Re:VBAのVlookupについて as 20/3/7(土) 19:20 発言[未読]
【81213】Re:VBAのVlookupについて マナ 20/3/7(土) 19:36 発言[未読]
【81214】Re:VBAのVlookupについて as 20/3/7(土) 19:45 発言[未読]

【81204】VBAのVlookupについて
質問  as  - 20/3/7(土) 14:11 -

引用なし
パスワード
   空白をエラーと認識してしまいます。
お分かりになる方がいれば、ご教授いただけると幸いです。

現状は下記コードになります。

Sub Main()

 Dim Serchkey As Range
 Dim SerchRange As Range
 Dim OutputRange As Range
 Dim i As Long

 Set Serchkey = Worksheets("書籍貸出表").Range("B3:B8")    
 Set SerchRange = Worksheets("書籍管理一覧表").Range("A3:B8") 
 Set OutputRange = Worksheets("書籍貸出表").Range("B3:C8")   

 Application.ScreenUpdating = False 'Flaseで画面更新停止、Trueで画面更新再開
 
 For i = 1 To Serchkey.Rows.Count
  OutputRange(i, 2) = WorksheetFunction.Vlookup(Serchkey(i, 1), SerchRange, 2, False)
 Next
 Application.ScreenUpdating = True
  
End Sub

【81205】Re:VBAのVlookupについて
発言  マナ  - 20/3/7(土) 15:12 -

引用なし
パスワード
   ▼as さん:
>空白をエラーと認識してしまいます。

では、空白の場合は、どうしたいですか。

【81206】Re:VBAのVlookupについて
発言  as  - 20/3/7(土) 17:40 -

引用なし
パスワード
   >では、空白の場合は、どうしたいですか。

ご返信ありがとうございます。
空白の場合は、空白を文字列として「""」の状態を許可したいです。

【81207】Re:VBAのVlookupについて
発言  マナ  - 20/3/7(土) 17:47 -

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

では、検索して見つからないでエラーとなる場合は?

【81208】Re:VBAのVlookupについて
発言  as  - 20/3/7(土) 17:50 -

引用なし
パスワード
   検索して見つからなかった場合は、エラーとして返したいです。

そのため、書籍IDが空白の状態ではエラーを表示させず、書籍IDがなかった場合はエラーとして返したいです。

【81209】Re:VBAのVlookupについて
発言  マナ  - 20/3/7(土) 18:22 -

引用なし
パスワード
   ▼as さん:
>検索して見つからなかった場合は、エラーとして返したいです。


Application.VLookupを使います。

Sub Main2()
  Dim Serchkey As Range
  Dim SerchRange As Range
  Dim OutputRange As Range
  Dim i As Long
  
  Set Serchkey = Worksheets("1").Range("B3:B8")
  Set SerchRange = Worksheets("2").Range("A3:B8")
  Set OutputRange = Serchkey.Offset(, 1)
  
  Application.ScreenUpdating = False 'Flaseで画面更新停止、Trueで画面更新再開
  
  For i = 1 To Serchkey.Rows.Count
    If Serchkey(i) <> "" Then
      OutputRange(i) = Application.VLookup(Serchkey(i), SerchRange, 2, False)
    End If
  Next
  Application.ScreenUpdating = True
 
End Sub

【81210】Re:VBAのVlookupについて
発言  as  - 20/3/7(土) 18:43 -

引用なし
パスワード
   度々すみません。

ご提示いただきました内容を実行しましたところ、エラー9が発生しました。

シート2のB3~B8に値をいれると、A3~A8に入ってる値にまっちした隣の値(B3~B8)をC3~C8に出力したいとう内容なのですが、このエラーが発生したということは、outputrangeの値がそもそも間違っているんでしょうか?

【81211】Re:VBAのVlookupについて
発言  マナ  - 20/3/7(土) 18:51 -

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

>エラー9が発生しました。


ごめんなさい。シート名を実際のものに修正してください。

【81212】Re:VBAのVlookupについて
発言  as  - 20/3/7(土) 19:20 -

引用なし
パスワード
   変な空欄が入っておりエラーとなっていました。解決しました!ありがとうございました!

【81213】Re:VBAのVlookupについて
発言  マナ  - 20/3/7(土) 19:36 -

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

値のある範囲だけ SpecialCells(xlCellTypeConstants) を
For Each で、ループすることもできます。
また、複数セルを、まとめてVLookupできます。

Sub Main3()
  Dim Serchkey As Range
  Dim SerchRange As Range
  Dim a As Range
 
  Set Serchkey = Worksheets("書籍貸出表").Range("B3:B8")
  Set SerchRange = Worksheets("書籍管理一覧表").Range("A3:B8")
  Serchkey.Offset(, 1).ClearContents

  For Each a In Serchkey.SpecialCells(xlCellTypeConstants).Areas
    a.Offset(, 1).Value = Application.VLookup(a.Value, SerchRange, 2, False)
  Next

End Sub

【81214】Re:VBAのVlookupについて
発言  as  - 20/3/7(土) 19:45 -

引用なし
パスワード
   そうだったんですね!

VBAを覚えたてで分からないことが多々あり、参考になります!
ありがとうございました!

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