VBA初心者のため、教えていただきたいです。
シートが"レポート"、"リスト"、"前月レポート"とある体です。
"レポート"にA4:F50までの表があり、A列を基準にD列にそれぞれ合う情報を反映したいです。
D列の情報は、"リスト"か"前月レポート"のどちらかにありますが、1個ずつ指定もできません。。
タイトルの通り、Vlookupで反映したいのですが、調べたりしてIsErrorが使えるかなと思い下のようなものを書いてみました。ですが、これだと最終的にD列すべて"前月レポート"の結果が反映されてしまい、#N/Aが出てしまいました。IsError=Trueは逆に"リスト"の結果が全て反映されてしまいました。
"リスト"の情報を反映した後、#N/Aのみを"前月レポート"から反映したいです。できますでしょうか?
Set rng1 = Worksheets("リスト").Range("A:V")
Set rng2 = Worksheets("前月レポート").Range("A:W")
Sheets("レポート").Range("D4:D50") = Application.VLookup(Sheets("レポート").Range("A4:A50"), rng1, 6, False)
If IsError(Sheets("レポート").Range("D4:D50")) = False Then
Sheets("レポート").Range("D4:D50") = Application.VLookup(Sheets("レポート").Range("A4:A50"), rng2, 3, False)
End If
No.2ベストアンサー
- 回答日時:
こんばんは
何処に原因があるか分かりますでしょうか?
If IsError(Sheets("レポート").Range("D4:D50")) これは、範囲に対して検証しています。
他にも色々やり方が考えられますが、ご質問のロジックで考えるのなら、
Sheets("レポート").Range("D4:D50") = Application.VLookup(Sheets("レポート").Range("A4:A50"), rng1, 6, False)で出力したのち
エラーに対して
’If IsError(Sheets("レポート").Range("D4:D50")) = False Then
・・・・
End If
ではなく
If IsErrorは単セルの結果に対して実行する必要があります
のでループ処理になると思います
For Each r In Sheets("レポート").Range("D4:D10")
If IsError(r) Then r.Value = Application.VLookup(r.Offset(, -3), rng2, 3, False)
Next
Offset(, -3)が分かり難いようでしたら
= Application.VLookup(Range("A" & r.Row).Text, rng2, 3, False)
とかになります。
ありがとうございます。
説明まで補足いただき実行できない理由が納得出来ました。
想定していた結果にもなりました。とても助かりました。
No.3
- 回答日時:
こんにちは
上手くいかない原因については、既出の通りでしょう。
シート関数を利用した計算を行うのなら、中途半端にワークシート関数を利用するよりも、そのまま関数を設定してしまった方が簡単ではないかと思います。
(範囲指定も無用に広いようなので、修正してあります)
Const f = "=IFERROR(VLookup(A4,リスト!A:F,6,0),VLookup(A4,前月レポート!A:C,3,0))"
Set r = Worksheets("レポート").Range("D4:D50")
r.FormulaLocal = f
r.Value = r.Value
みたいな感じでしょうか。
No.1
- 回答日時:
こんばんは。
直接の回答では無いかも知れませんが、
例えば、事前にCountifなどで、"レポート"が1以上かを確認して、あるなら
.VLookup(Sheets("レポート").Range("A4:A50"), rng1, 6, False) を、
なければ、
.VLookup(Sheets("レポート").Range("A4:A50"), rng2, 3, False) を
実施しては?と思いましたが、如何でしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Formulaプロパティーを使ってセルに数式を組んだのですが簡潔にしたい。 3 2022/08/21 20:51
- Visual Basic(VBA) excel vbaでvlooupの変数がわかりません。 7 2022/05/30 09:35
- Visual Basic(VBA) Sheet1のA列にコードB列にメアド、Sheet2のB列にコード一覧とD列にメアド一覧があり、Sh 3 2022/10/19 11:57
- Excel(エクセル) 表示形式、文字列セル(列)に数式を入力するには マクロ 1 2022/09/18 10:53
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Excel(エクセル) VBA でvlookup エラーなどは削除したい 8 2022/12/30 04:03
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
- Visual Basic(VBA) 配列の勉強をしています。使用する変数の意味、検索条件の書き方が難しいです。 2 2022/09/15 14:06
- Visual Basic(VBA) VBA 請求書自動作成 3 2022/04/24 01:58
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
JCLでのプロシージャの変数設定...
-
DataSetの内容がDataGridViewに...
-
アクセス2003 レポートの総ペ...
-
2つのDataTableをJoin
-
二つのデータの波形が似てるか...
-
決定係数がマイナスになる例っ...
-
ある1点で傾きが急激に変化する...
-
切片あり回帰と切片なし回帰
-
相関係数Rの2乗について
-
回帰式と近似式について
-
サンプル数の違うものの比較
-
four-parameter近似式の求め方
-
EXCELで両対数を取った重回帰分...
-
修正済み決定係数(R2乗)がマ...
-
【統計】「相関係数の有意性の...
-
有意に大きい(小さい)とは?
-
エクセルでANOVA
-
回帰水を売ってる会社大丈夫か
-
アンケート分析に方法について
-
原点強制通過させたときの相関係数
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
2つのDataTableをJoin
-
VB.NETでODBC接続のデータベー...
-
JCLのエラーについて
-
TSOのデータセット格納場所の検索
-
DataSetの内容がDataGridViewに...
-
c#でデータセットが使えなくな...
-
アクセス2003 レポートの総ペ...
-
JCLでのプロシージャの変数設定...
-
二つのデータの波形が似てるか...
-
決定係数がマイナスになる例っ...
-
切片あり回帰と切片なし回帰
-
相関係数Rの2乗について
-
回帰式と近似式について
-
サンプル数の違うものの比較
-
ある1点で傾きが急激に変化する...
-
修正済み決定係数(R2乗)がマ...
-
大学のレポート
-
相関の表現について(高い、強い?)
-
変動係数(SD/平均)を有意差検定...
-
SQLの副問い合わせと相関副問い...
おすすめ情報