空白でない場合はネットでお見掛けするのですが、逆はどうしたら良いのか独学歴も浅く自力では最早解決出来そうになく、皆様の知恵をお借りしたいです。
表のとある列に空白が所々空いており、それを埋める様な形をFor NextでWorksheetFunction.Vlookup を回して別ブックの表から値を持って来れたらと思っています。
色々ネットを見ながら組んだのですが、最後のWorksheetFunctionの辺りでコードが上手くいきません。
エラー回避を入れると最後までコードは動く様になるのですが、欲しい結果は得られません。
イミディエイトを見ていると何やら転送先ファイルの範囲を上手く選択出来ていない様なのですが、どうしたら良いのか分からず自分ではお手上げです。
どうか、ご教授お願いします。
Dim Nd As String
Nd = Worksheets(“Meinmenu”).Range(“F19”).Value’年の値が入っています
Dim Nd2 As String
Nd2 = Worksheets(“Meinmenu”).Range(“E21”).Value’月の値が入っています
Dim NewFN As String
NewFN = (“転記先” & Nd & “年” & Nd2 & “月.xlsx”)
Call コール用5‘転記先をアクティブ
Worksheets(Nd & “年上期”).Select
Dim i As Long
For i = 13 To Cells(Rows.Count,3).End(xlUp).Row
Dim x As Range
x = Worksheets(Nd & “年上期”).Cells(i,”A”)
If Cells(i,”C”) = “” Then
Cells(i,”C”).Value _
= WorksheetFunction.Vlookup(x,Workbooks (“転記元.xlsm”).Worksheet(“転記用”).Range(“A2: 130”),2,False)
End If
Next i
宜しくお願いします。
No.2ベストアンサー
- 回答日時:
No1です。
No1にも書きましたが、「セル範囲が正しく選別できている」という前提での回答です。
範囲や選別ができていないのであれば、そこから見直してください。
関数そのものに関しては、こちらでは書式程度しか確認できませんので、実質的な内容がご希望と異なっていれば、当然ながら求める結果は得られません。
また、
>エラー回避を入れると最後までコードは動く様になるのですが
とのことなので、基本的にはエラーが発生したままの状態であると推測します。
勝手に想像すると、意図的なエラー回避ではなく、「エラーをなかったことにする」ためだけの回避になっていたりしませんか?
(臭いものに蓋をするだけなので、何も得られない)
一方で、VlookupをWorksheetFunctionで使用する場合、シート関数でエラー値を返すような設定で実行すると、VBAではエラーが発生します。
ちなみに、No1の後半でご紹介した方法であれば、シートには関数式を設定しているだけなので、関数でのエラーはエラー値として表示され、VBAのエラーにはなりません。
※ 実質的な内容がほとんど不明な状態なので、こちらではこれ以上はわかりかねます。
ステップ実行を行ったり、ウォッチウィンドウやイミディエイトウィンドウを利用して変数等の内容を確認するなどして、まずは「何が思っている内容と違うのか」を確認してください。
原因がわかれば、おのずと解決法も見えてくるのではないかと思います。
遅くなりましたが、再びのご回答ありがとうございます。
> Dim i As Long
For i = 13 To Cells(Rows.Count,3).End(xlUp).Row
見直して書き直していた所、此処の指定の仕方を変え、変数NdとNd2の値の指定時にworkbook から指定した結果動く様になりました。
何度も見直す事を勧めて下さったおかげで気付けました。
ありがとうございました。
No.1
- 回答日時:
こんばんは
ブックやシートの構成が不明なので、何がどうなっているのかよくわかりませんけれど・・
>何やら転送先ファイルの範囲を上手く選択出来ていない様なのですが、
>どうしたら良いのか分からず自分ではお手上げです。
処理対象のセルの選別は上手くいっているのなら、値を計算する部分がおかしいということが推測できます。
多分、以下の部分で計算していると想像しますが、2点おかしなところがあります。
>WorksheetFunction.Vlookup(x,Workbooks (“転記元.xlsm”).Worksheet(“転記用”).Range(“A2: 130”),2,False)
1)変数xは検索値に当たるものと思いますが、その前の変数宣言ではRange型に宣言されています。(Variantなどではないでしょうか?)
2)検索範囲として指定されている、「Range(“A2: 130”)」がおかしくありませんか?
少なくとも2列分の範囲になるはずなので、「Range(“A2: B130”)」とかではないのでしょうか?
ちなみに、ご提示のようにループで1セルずつ判断して、値を設定してゆく方法もありますが、別法として対象セルをまとめて処理する方法も考えられます。
(大量にある場合は、個別に処理するよりも速い可能性があります)
With 対象セル範囲.SpecialCells(xlCellTypeBlanks)
.FormulaR1C1 = "Vlookupを用いた計算式" ' セルに計算式を設定
.Value = .Value ' セルの計算式を固定値化(式のままでよければ不要)
End With
※ 上記の方法の場合、実際に対象になるセルの位置が前もってはわからないので、入力する計算式はR1C1形式にしておくのが便利です。
(これによって、同じ式を設定すればよくなる)
検索値のセル値も式の中で参照指定できるので、変数xは不要になります。
遅くなりましたが、回答頂きありがとうございます。
情報の追記はしてみましたが、未だ足りない様でしたら申し訳有りません。
> 1)変数xは検索値に当たるものと思いますが、その前の変数宣言ではRange型に宣言されています。(Variantなどではないでしょうか?)
Variant に変えてみました。
> 2)検索範囲として指定されている、「Range(“A2: 130”)」がおかしくありませんか?
少なくとも2列分の範囲になるはずなので、「Range(“A2: B130”)」とかではないのでしょうか?
こちらはその通りで、直打ちしていたら抜け落ちていた様です。
お手数お掛けしました。
> With 対象セル範囲.SpecialCells(xlCellTypeBlanks)
.FormulaR1C1 = "Vlookupを用いた計算式" ' セルに計算式を設定
.Value = .Value ' セルの計算式を固定値化(式のままでよければ不要)
End With
はまだ試していなかったので試してみたいと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 空のシートに関数を入れたい 2 2021/12/03 15:08
- Visual Basic(VBA) 稀に1円合いません? Sheet1から金額と個数を貼り付ける下記コードで、金額を切り上げるコードを何 3 2022/09/05 15:11
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- Excel(エクセル) VBA Scripting.Dictionary 連想配列 複数参照する方法 2 2021/12/17 01:52
- Visual Basic(VBA) VBA 別ブックからの転記の高速化について VBA 別ブックからの転記の高速化についてご教授下さい。 19 2022/07/26 13:07
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) 別シートのデータを参照して値を入れたい。 まとめデータシートのC列D列の値を商品一覧シートのコードが 7 2022/08/17 13:20
- Visual Basic(VBA) マクロ 関数を使った抽出でエラーになってしまう 1 2022/02/01 14:44
- Visual Basic(VBA) EXCEL VBA シート貼り付け 3 2021/11/15 12:33
- Excel(エクセル) VBA でvlookup エラーなどは削除したい 8 2022/12/30 04:03
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~12/6】 西暦2100年、小学生のなりたい職業ランキング
- ・ちょっと先の未来クイズ第5問
- ・これが怖いの自分だけ?というものありますか?
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語 exitの使い方
-
Excel-vba 文字列と変数を...
-
フリーランタイマーの時間差分...
-
フォームを開くときに、コンボ...
-
足して100になるような乱数のア...
-
VB6.0-整数と余りを求める
-
VBAで配列のNULL判定
-
ラジオボタンの値の取得につい...
-
DataGridView 複数行同時変更...
-
VBAでプロセデュア間で共有でき...
-
VBA コンボボックスの値をスピ...
-
VBAでC列が入力済みならそのま...
-
vbaで極大値を抽出する方法
-
10進数をアスキーコードに変換
-
関数で複数の値を戻り値として...
-
VBAのチェックボックス結果を集...
-
数字の位ごとの値を表示するプ...
-
C言語(arduino)での条件分岐...
-
VBAの定数の使い方で、計算値を...
-
コンボボックスの名前を変数に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語 exitの使い方
-
フォームを開くときに、コンボ...
-
Excel-vba 文字列と変数を...
-
VB6.0-整数と余りを求める
-
数字の位ごとの値を表示するプ...
-
足して100になるような乱数のア...
-
VBAの定数の使い方で、計算値を...
-
C#で動的にコントロールを取得...
-
Nullってどういう意味ですか?
-
1つ前の値を変数に保存する方法
-
VBAで配列のNULL判定
-
DWORDって
-
DataGridView 複数行同時変更...
-
ラジオボタンの値の取得につい...
-
4択問題のプログラムでランダム...
-
フリーランタイマーの時間差分...
-
関数で複数の値を戻り値として...
-
VBA コンボボックスの値をスピ...
-
世界のナベアツ
-
long型のランダムな値を返す方法
おすすめ情報
回答頂きありがとうございます。
転記元はセル値に今日から今年度や今月などの数値が計算されているMeinmenuシートと転記用の値の有る表がある転記用シートが有ります。
転記先には今年度上期のシートが有り、B列に4、5、6、7、8、9月と月が入力されており、A列に店番、C列に月の値を入力する様になっています。
先月のC列は空白で今月も同じく空白ですが、こちらは行ごと非表示になっています。
この先月の空白のC列に転記用シートから店番を元にVlookupして値を埋めたいと思っています。
>2)検索範囲として指定されている、「Range(“A2: 130”)」がおかしくありませんか?
少なくとも2列分の範囲になるはずなので、「Range(“A2: B130”)」とかではないのでしょうか?
これに関しては、その通りです。
直打ちしていたら、確認したつもりですが抜け落ちていた様です。