空白でない場合はネットでお見掛けするのですが、逆はどうしたら良いのか独学歴も浅く自力では最早解決出来そうになく、皆様の知恵をお借りしたいです。
表のとある列に空白が所々空いており、それを埋める様な形を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を見た人はこんなQ&Aも見ています
-
「環境が人を育てる」って本当?環境によって人格や生き方は本当に変わるのか
環境が人生に与える影響は実際どれほどのものなのか、専門家の田宮由美さんに伺った。
-
環境依存文字?をEnumで定義したい
Visual Basic(VBA)
-
VBAのコードを教えてください
Visual Basic(VBA)
-
エクセル VBAでの転記の方法について
Visual Basic(VBA)
-
-
4
Excel 数行分セル結合したあと、結合した一番下の行を非表示にしたら、罫線が印刷されません。
Excel(エクセル)
-
5
Range.RemoveDuplicates メソッド
Visual Basic(VBA)
-
6
Excel 書式のクリア・値貼付けをしても書式が変わらない
Excel(エクセル)
-
7
Excelセルに入力された文字の色を変える方法を教えてください
Visual Basic(VBA)
-
8
ExcelのVBAのことで質問です。 以下のコードを入れ、ボタンを押せば作動させると写真のように画面
Visual Basic(VBA)
-
9
excelのVBAについて、以下のコードに追加をお願いいたします。
Visual Basic(VBA)
-
10
エクセルVBAでデータ転記
Visual Basic(VBA)
-
11
Cellsのコードが打てません
Visual Basic(VBA)
-
12
Outlookの「受信日時」「件名」「本文」などをVBAを使ってExcelに転記したい
Visual Basic(VBA)
-
13
VBA 何かしら文字が入っていたら
Visual Basic(VBA)
-
14
エクセル 条件付き書式設定
Excel(エクセル)
-
15
エクセルの数式で教えてください。
Excel(エクセル)
-
16
エクセルのマクロについて教えてください。 マクロを実行すると コピー先のフォルダ名を検索して、条件に
Excel(エクセル)
-
17
Excelのデータの入力規則が薄くなって クリック出来ません。 なぜでしょうか?
Excel(エクセル)
-
18
Excelの行をコピーして貼り付けても、 ドロップダウンが反映されません。 なぜでしょうか? シート
Excel(エクセル)
-
19
リストボックス複数選択抽出方法
Visual Basic(VBA)
-
20
エクセル 数値の10を10月と認識するにはどうすればいいですが?
Excel(エクセル)
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語 exitの使い方
-
エクセルのマクロについて教え...
-
コンボボックスの名前を変数に...
-
VBA コンボボックスの値をスピ...
-
UWSCのcallについて
-
足して100になるような乱数のア...
-
関数で複数の値を戻り値として...
-
VBAのチェックボックス結果を集...
-
フォームを開くときに、コンボ...
-
VB6.0-整数と余りを求める
-
4択問題のプログラムでランダム...
-
LOG(10)2の意味は?
-
intB = 1 + (intA <= 3) ??
-
C#の問題で2つの整数a,bの...
-
1つ前の値を変数に保存する方法
-
ラジオボタンの値の取得につい...
-
VBAでダブルコーテーション入り...
-
配列の値を置換するにはどうす...
-
vbsでテキストファイル内の文字...
-
VBSで特定の文字列が含まれる場...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語 exitの使い方
-
フォームを開くときに、コンボ...
-
Excel-vba 文字列と変数を...
-
足して100になるような乱数のア...
-
数字の位ごとの値を表示するプ...
-
VB6.0-整数と余りを求める
-
VBAで配列のNULL判定
-
1つ前の値を変数に保存する方法
-
Access2003 オートナンバーの現...
-
UWSCのcallについて
-
C#で動的にコントロールを取得...
-
ラジオボタンの値の取得につい...
-
VBAの定数の使い方で、計算値を...
-
相関係数p値の出し方
-
DWORDって
-
世界のナベアツ
-
DataGridView 複数行同時変更...
-
10進数をアスキーコードに変換
-
c言語で乱数を扱うときの
-
VBAのチェックボックス結果を集...
おすすめ情報
回答頂きありがとうございます。
転記元はセル値に今日から今年度や今月などの数値が計算されているMeinmenuシートと転記用の値の有る表がある転記用シートが有ります。
転記先には今年度上期のシートが有り、B列に4、5、6、7、8、9月と月が入力されており、A列に店番、C列に月の値を入力する様になっています。
先月のC列は空白で今月も同じく空白ですが、こちらは行ごと非表示になっています。
この先月の空白のC列に転記用シートから店番を元にVlookupして値を埋めたいと思っています。
>2)検索範囲として指定されている、「Range(“A2: 130”)」がおかしくありませんか?
少なくとも2列分の範囲になるはずなので、「Range(“A2: B130”)」とかではないのでしょうか?
これに関しては、その通りです。
直打ちしていたら、確認したつもりですが抜け落ちていた様です。