
空白でない場合はネットでお見掛けするのですが、逆はどうしたら良いのか独学歴も浅く自力では最早解決出来そうになく、皆様の知恵をお借りしたいです。
表のとある列に空白が所々空いており、それを埋める様な形を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で質問しましょう!
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
隣の枝がはみ出してきたら切ってもいい?最もやってはいけないことは?
「隣の木が越境してきて困るが、勝手に切ってはいけないと聞くし…」そう思っている方も多いだろう。実は、2023年4月1日に民法が改正され、この「越境枝」のルールが大きく変わった。 教えて!gooでも「境界から出て...
-
弁護士が解説!あなたの声を行政に届ける「パブリックコメント」制度のすべて
社会に対する意見や不満、疑問。それを発信する場所は、SNSやブログ、そしてニュースサイトのコメント欄など多岐にわたる。教えて!gooでも「ヤフコメ民について」というタイトルのトピックがあり、この投稿の通り、...
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA コンボボックスの値をスピ...
-
データ構造のmapとは?
-
VB6.0-整数と余りを求める
-
VBAで72時間タイマーがオーバー...
-
フォームを開くときに、コンボ...
-
コンボボックスの名前を変数に...
-
相関係数p値の出し方
-
GPIBの応答について
-
VBAで配列のNULL判定
-
C言語 exitの使い方
-
1つ前の値を変数に保存する方法
-
VBAの定数の使い方で、計算値を...
-
世界のナベアツ
-
バイナリーBCD変換アプリAN526...
-
Rubyで1ミリ秒のsleepできない...
-
バッチファイルで正規表現を使...
-
Nullってどういう意味ですか?
-
300、350、258、の中から最大値...
-
VisualStudio2022でC言語プログ...
-
VBAでダブルコーテーション入り...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語 exitの使い方
-
Excel-vba 文字列と変数を...
-
フォームを開くときに、コンボ...
-
VB6.0-整数と余りを求める
-
VBAで配列のNULL判定
-
数字の位ごとの値を表示するプ...
-
フリーランタイマーの時間差分...
-
VBAの定数の使い方で、計算値を...
-
足して100になるような乱数のア...
-
Access2003 オートナンバーの現...
-
DWORDって
-
Xorshiftの値を絞り込む方法を...
-
ラジオボタンの値の取得につい...
-
C#で動的にコントロールを取得...
-
DataGridView 複数行同時変更...
-
VBA コンボボックスの値をスピ...
-
vbaで極大値を抽出する方法
-
コンボボックスの名前を変数に...
-
Nullってどういう意味ですか?
-
データ構造のmapとは?
おすすめ情報
回答頂きありがとうございます。
転記元はセル値に今日から今年度や今月などの数値が計算されているMeinmenuシートと転記用の値の有る表がある転記用シートが有ります。
転記先には今年度上期のシートが有り、B列に4、5、6、7、8、9月と月が入力されており、A列に店番、C列に月の値を入力する様になっています。
先月のC列は空白で今月も同じく空白ですが、こちらは行ごと非表示になっています。
この先月の空白のC列に転記用シートから店番を元にVlookupして値を埋めたいと思っています。
>2)検索範囲として指定されている、「Range(“A2: 130”)」がおかしくありませんか?
少なくとも2列分の範囲になるはずなので、「Range(“A2: B130”)」とかではないのでしょうか?
これに関しては、その通りです。
直打ちしていたら、確認したつもりですが抜け落ちていた様です。