
マクロのフォームを使ってデータ入力・行の挿入を登録したのですが、
シートに入力した計算式が反映されません。
insertRow = Range("登録品目データ").Rows.Count
Range("登録品目データ").Rows(insertRow).Insert Shift:=xlDown
Range("登録品目データ").Cells(insertRow, 1) = ModelNameBox.Text
Range("登録品目データ").Cells(insertRow, 2) = PartNumberBox.Text
Range("登録品目データ").Cells(insertRow, 3) = PartNameBox.Text
Range("登録品目データ").Cells(insertRow, 4) = StockingPriceBox.Text
Range("登録品目データ").Cells(insertRow, 5) = PackingAmountBox.Text
Sheets("品目一覧").Protect
Unload AddCommodityDlg
End Sub
上記Box5に入力したデータを元に、VLOOKUP関数で別のシートの情報を
反映させる式を入力しているのですが、フォームを使って情報入力し、
最下行に挿入すると計算式が反映されません。
どうすればいいか教えて下さい。
宜しくお願いします。
No.6ベストアンサー
- 回答日時:
こんばんは。
>色々説明不足で申し訳ありません。
いいえ、もう、私は、その状況は把握しているつもりなのですが、こちらでは、もう一度、考え直してみました。
>また、名前-定義を使用せず、下記に変更しても反映されませんでした。
>=IF(F4="","",VLOOKUP(F4,梱包容器一覧!A3:E17,5,FALSE))
上記の書き方なら、名前-定義と同じなのです。なぜかというと、名前の定義の中身が、梱包容器一覧!A3:E17 となっていれば、同じ結果なのです。
私が言ったのは、範囲を列全体にするということです。例:「A:E」
しかし、しばらく考えてみましたが、やはり、マクロ側では、名前定義は、使わなくてもよいような気がします。必然性がありません。そして、その式自体は、間違った解は出ないはずなので、名前-定義の範囲を大きく取ればよいと思うのです。
数式とマクロは別物ですから、マクロ側は、Range("登録品目データ") としなくてもよいと思います。
実際、
A列
1
2
3
4
5
6
7
8
←(B).ここに入れる
たぶん、最終行というのは、この(B)になるのだろうと思います。このマクロには挿入がありませんから、範囲に余裕を持っていれば、まず間違いはないと思います。名前の定義の範囲を1000行程度でも範囲を広げたらどうですか。
ただし、データを入れる最後の行を探す方法は、
With Worksheets("登録品目データ")
i = .Range("A65536").End(xlUp).Offset(1)
.Cells(i, 1).Value = ModelNameBox.Text
.Cells(i, 2).Value = PartNumberBox.Text
.Cells(i, 3).Value = PartNameBox.Text
.Cells(i, 4).Value = StockingPriceBox.Text
.Cells(i, 5).Value = PackingAmountBox.Text
End With
としたらどうでしょうか。
No.5
- 回答日時:
#4の補足
マクロとは別問題の話です。
ものすごく基本的なことですが、可能なら、VLOOKUP側で、名前-定義を使わなければよいのでしょうね。例えば、A:E の広域の範囲にしておけば、問題なく、検索値に反映します。
この回答への補足
ご回答ありがとうございます。
色々説明不足で申し訳ありません。
VLOOKUP関数は下記のように入力しています。
=IF(F4="","",VLOOKUP(F4,登録ケース一覧,5,FALSE))
ご指摘の通り、VLOOKUP関数で名前-定義を使用していますが、上記“登録ケース一覧”もデータを増やしていく為、
名前-定義はできれば使用したいのです。
また、名前-定義を使用せず、下記に変更しても反映されませんでした。
=IF(F4="","",VLOOKUP(F4,梱包容器一覧!A3:E17,5,FALSE))
どうすればいのでしょうか。。。
No.4
- 回答日時:
こんにちは。
質問内容では、推測の範囲は超えないですが、「登録品目データ」名前-定義登録をしているのだと思います。今、見てみましたが、想像する以上にややこしく、難しくなってしまっています。私の推測が正しければ、マクロ1年レベルの人では直せないと思います。こういうときは、自己流でせずに、決まりきったパターンを使えばよかったと思います。
>最下行に挿入すると計算式が反映されません。
今試してみましたが、数回繰り返すと、やはり名前-定義登録は、自動的に変更しないのでうまく反映してくれないようです。マクロでは、名前-定義登録とは相性があまりよくありませんが、数式で使っている以上は使わなくてはなりません。名前の再登録する必要があるようです。
VLOOKUP側で、その名前-定義を使っているようですね。
いろいろやってみましたが、今の状態では、最下行と、名前-定義との関係が、不安定な状態です。
マクロで行の挿入は、一体、どこに入れるのでしょうか?
もともと、データの最下行だったら、挿入は必要ないです。データの最下行の一つ手前なら、挿入が必要です。
A
1
2
3
4
5
6
7
←(A).ここに入れるのですか?
8
←(B).それとも、ここに入れるのですか?(ここは挿入--Insertではありません)
それから、
Range("登録品目データ").Cells(insertRow, 1) = ModelNameBox.Text
これは少し意味が違ってきます。
(B) に入れる場合 (今の所、(A)案は考えられません)
Sub Sample1()
'名前-登録の再定義(最初に、正しければ、この行は不要)
Application.Names("登録品目データ").RefersToLocal = _
"=" & Range("A1").CurrentRegion.Address
insertrow = Range("登録品目データ").Rows.Count
With Range("登録品目データ").Rows(insertrow).Offset(1)
.Cells(1, 1).Value = ModelNameBox.Text
.Cells(1, 2).Value = PartNumberBox.Text
.Cells(1, 3).Value = PartNameBox.Text
.Cells(1, 4).Value = StockingPriceBox.Text
.Cells(1, 5).Value = PackingAmountBox.Text
End With
'名前-登録の再定義
Application.Names("登録品目データ").RefersToLocal = _
"=" & Range("A1:E" & insertrow + 1).Address
''Range("登録品目データ").Select '確認用
End Sub
なお、TextBox のプロパティは、Text で取っても、ワークシートに貼り付けるときには、自動的に、相応しい型にキャストされますので、変換は必要ありません。ただし、入力ミスした場合は除きます。
No.3
- 回答日時:
データ型の問題かもしれません。
テキストボックスで入力した値は文字になります。
Val(PackingAmountBox.Text)などで数値に変換してみてはどうでしょう。
No.2
- 回答日時:
連続ですみません。
複数のセルに数式を反映する場合は
数式セルも含めて該当セル範囲を選択
数式セルで、F2キーを押して編集モードにする
Ctrl+Enter、とキー操作して数式を他のセルにコピー
といった操作を「マクロの記録」してみてください。
この回答への補足
ご回答ありがとうございます。
(1)Ctrl+Dのマクロ
Selection.FillDown
(2)Ctrl+Enterのマクロ
Selection.FormulaR1C1 = "=IF(RC[-1]="""","""",VLOOKUP(RC[-1],登録ケース一覧,5,FALSE))"
上記マクロの頭に
Range("登録品目データ").Cells(insertRow, 6) =
を付けて実行すると、(1)=TURE (2)=FALSE がセルに表示されました。
頭に付けるマクロがおかしいのでしょうか?
初歩的な質問になり申し訳ないのですが、
マクロ経験1ヶ月の新人の為、お許し下さい。
No.1
- 回答日時:
単純に、数式セルをコピーすればどうでしょうか。
あるいは
計算式を反映したいセルを選択して
Ctrl+D
とキー操作すれば、1行上のセルにある計算式がフィルコピーされます。
上記の操作を「マクロの記録」すればどうでしょうか。
参考になるコードが得られると思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Visual Basic(VBA) VBA 重複チェック後に値をワークシートに転記する方法を教えてください。 1 2023/03/19 12:43
- Visual Basic(VBA) Excel VBA マクロ ある列の最終行迄を参照し、別の列の空白セルに値を入力したいです 2 2023/03/05 02:44
- Visual Basic(VBA) Excel VBA ユーザーフォーム1のコンボボックスに別ブックの値を反映させたいです。 6 2023/03/21 16:12
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 2 2022/06/25 22:42
- Windows 7 エクセルで重複データから抽出したい 2 2022/05/18 23:31
- Excel(エクセル) 表示形式、文字列セル(列)に数式を入力するには マクロ 1 2022/09/18 10:53
- Visual Basic(VBA) 【困っています2】VBA 追加処理の記述を教えてください。 2 2022/08/26 11:42
- Access(アクセス) Access 登録ボタンからサブフォームの更新 1 2022/07/22 10:23
このQ&Aを見た人はこんなQ&Aも見ています
-
【エクセル】行挿入で数式もいっしょにコピーしたい
Excel(エクセル)
-
エクセルのVBAで指定した行数の追加と数式のコピー方法をご教示いただけますか?
Visual Basic(VBA)
-
エクセルで行挿入した際、自動的に計算式も入力される方法を教えて下さい。
Excel(エクセル)
-
-
4
マクロ最終行挿入
Excel(エクセル)
-
5
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
6
Excelで計算式がずれるパターンとずれないパターンを教えて下さい(絶対参照の話ではない)
Excel(エクセル)
-
7
数式による空白を無視して最終行を取得するマクロ
Excel(エクセル)
-
8
Excelで、あるセルの値に応じて行を自動挿入したい
Visual Basic(VBA)
-
9
excel VBA 2つのシートの特定の列を比較して同じ値のセルがあったらその行を上書きしたい
Excel(エクセル)
-
10
i=cells(Rows.Count, 1)とi=cells(Rows.Count, 2)の違い
Visual Basic(VBA)
-
11
VBAでの結合セルのコピー&ペースト
Excel(エクセル)
-
12
エクセル マクロの実行について
Excel(エクセル)
-
13
VBAでEmpty値って何ですか?
Excel(エクセル)
-
14
Excelのセルにユーザー名を表示する方法
Excel(エクセル)
-
15
エクセル。行を挿入すると、関数が反映されない
Windows 10
-
16
値を入力後、自動的にアクティブセルが移動するマクロ
Excel(エクセル)
-
17
エクセルVBAで、行コピーを複数行にペーストする方法
Excel(エクセル)
-
18
エクセル マクロで数値が変った時行挿入できますか
Excel(エクセル)
-
19
シート保護の状態で行の追加を行いたい
その他(Microsoft Office)
-
20
エクセルVBA
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで長い行を5行ごとに1...
-
テキストデータのPDFをWordで開...
-
【エクセル】区切り文字が含ま...
-
差し込み印刷で文字列が「0」と...
-
EXCEL WEBSERVIS関数 数百行コ...
-
Excel 条件付き書式で、別シー...
-
COUNTIFS関数で日付データを数...
-
SUMIFS関数の計算結果が違います
-
エクセル 貼り付け時の文字化け
-
エクセルの関数で範囲のある数...
-
マクロ 行挿入で数式も反映す...
-
wordデータを、excelに自動で入...
-
斜めの貼り付け
-
VBAマクロエラー【オーバーフロ...
-
256列以上のデータを作成し、ワ...
-
エクセルのマクロで他のシステ...
-
Excelの連続データがオートフィ...
-
DBで改行が入っているデータをE...
-
【マクロ】転記ツール。転記先...
-
差し込み印刷で、生年月日を昭...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで長い行を5行ごとに1...
-
【エクセル】区切り文字が含ま...
-
差し込み印刷で文字列が「0」と...
-
エクセルの関数で範囲のある数...
-
テキストデータのPDFをWordで開...
-
DBで改行が入っているデータをE...
-
SUMIFS関数の計算結果が違います
-
オブジェクトブラウザでデータ...
-
マクロ 行挿入で数式も反映す...
-
wordデータを、excelに自動で入...
-
エクセルでプルダウン選択され...
-
エクセルで時間の合計ができません
-
エクセルで列にあるユニークな...
-
膨大なデーターの変更点のみ抽...
-
エクセルで「データ」の「区切...
-
エクセルのマクロで他のシステ...
-
COUNTIFS関数で日付データを数...
-
エクセルにおいて、数値が入っ...
-
差し込み印刷で、生年月日を昭...
-
斜めの貼り付け
おすすめ情報