質問内容で理解できないでいるところも多いのですが、ひとまず把握できた範囲で。
問題1
現象再現しました。#N/Aになりますね。
vlookup関数の第2引数(行列)のセル参照(ここではA2:D2)が自動修正されてくれないようです。
どうも…バグっぽいですね(苦笑)。
vlookup関数では起こりますが、他の関数や演算子では起こらなさそうです。
いや…、第2引数以降の参照が自動修正されないのかも知れません。match関数でも似た状況が見られる気がします(2021-09-30 16:22 追記)。
「元データを移動」のやり方にもよるように見えます。
(手元ではカット&ペーストとAlt+ドラッグで確認しています。)
A2:D2を範囲選択して移動するとエラー
2行目を行選択して移動すると問題なさそう
データが行単位で扱える場合に限られますが、2つ目の方法(行選択)で問題を回避できるかも知れません。
Bugzillaにバグ報告が上がってるかどうか、ちゃんとチェックできてません。
チラッと見た感じでは見つけられませんでした。私、情報検索が苦手で…(苦笑)。
報告がないようだと直らないですね…。
2021-09-30 22:20頃 追記
誤った回答をしてしまったようでした。申し訳ありません。
問題1の原因はバグではなく、使い方の間違いと思われます。
「=VLOOKUP(A2,A2:D2,1)」の式を「セル右下のつまみをA4からD4までドラッグ」してはいけません。
それをするには数式内のセル参照の書き方を見直す必要があります(絶対参照の適切な使用)。
その操作をした後、D4セルの数式を確認してみてください。
「=VLOOKUP(D2,D2:G2,1)」となっているのではないかと思います。
第1引数の検索基準は「A2」(「卵1個」)ではなく「D2」(「5」)になり、第2引数の行列も「A2:D2」ではなく「D2:G2」とG列まではみ出してしまっています。
これは「=VLOOKUP(A2,A2:D2,1)」のセル参照が相対参照($を含まない指定方法)となっているためで、正常な動作です。
ここで「A2:D2を範囲選択して移動」すると、vlookupの第2引数である行列「D2:G2」が途中で分断され、E2:G2が取り残されてしまいます。そのため式で指定した行列全体を移動したとは見なせなくなり、仕方がないので行列の指定は元の「D2:G2」のまま変わらない、という動作になっているようです。
更に第1引数(検索基準)の使い方の間違い(続くコメントで4つ目に指摘した件と、ここでも相対参照が関係します)が輪をかけ、結果としてエラーとなってしまっているものと思われます。
問題の解消には表計算ソフトの関数式におけるセル参照の記述方法と、vlookup関数の使い方について学ぶ必要がありそうです。
問題2のサンプルはこの辺り是正した作りにしてあるつもりです。参考にしてください。
問題2
QUERY関数の何たるかを存じ上げない私では力不足につき、ズバリの回答は他の方の登場を待ちたいと思います。
ただ、もしかして問いの主旨が「B4:D4セルは空のまま、A4セルへの数式入力だけでB4:D4セルを書き換えたい」ということなのであれば、(LibreOfficeにそういう関数があるのかどうかも知りませんが、)そういう使い方は個人的にはオススメしかねます。
表計算ソフトの一般論として、関数式はよそのセルを書き換えには行かないのが基本と思えます。同じセルを書き換える数式が複数設定されてしまうと処理が衝突しかねないので。通常の利用ではそのつもりで扱っておくのが無難ではないでしょうか。
習得したいのが汎用な「表計算ソフト」の使い方なのか、特殊機能を含んだ「個別ソフト」(GoogleスプレッドシートやLibreOffice)の使い方なのか、という話かも知れませんね。個別ソフト固有の機能を安易に使ってると、今回のように他ソフトで融通が利かず、逆に不自由するようなことが往々にして起こると思います。
一方で「A4セルの値に応じて結果の変わる数式をB4:D4に入力する」(A4とB4:D4で数式を変える)であれば、やりようはいくらもあると思います。
こんなサンプルを作ってみましたが、参考にならないでしょうか。
サンプルファイル:無題 1.ods (10.8 キロバイト)
B:D列に数式を書く必要はありますが、セル参照をきっちり作り込めばコピー&ペーストで済み、さほど手間にはならないように思えます。
やりたいことと、違ってますかね…? その辺り、質問内容を充分汲めていなくて…(汗)。
ご所望の機能(複数セルへの結果反映)を満足する代替策ではありませんけどね。
データテーブルから値を引っ張ってくる方法の例として。
(ちょっと深入りしすぎましたね…query関数を知らぬ身で。すみません。)