【今回はレコードの置き換えを行うUpdate関数とUpdateIf関数について解説を行います】
過去に解説したPatch関数と今回解説するUpdate関数とUpdateIf関数を組み合わせて活用できるようになると、レコードの扱い格段に強くなれます
![](https://analytic-vba.com/wp/wp-content/uploads/2023/02/e065a3155328ead2005eda4668ba5783-1.gif)
Update関数
レコードの全体を置き換える関数になります
この全体の意味合いは、特定の列だけ「置き換えないということがない」といことになります
![](https://analytic-vba.com/wp/wp-content/uploads/2023/02/image-72-644x490.png)
今回はデータソース:myCollect*内で価格が100のもののうち、最初のレコードを置き換えます
*myCollectはGalleryのItemsになり、列は価格:myPriceと数量:myQuantityになります
Update関数の文法は次のようになります
Update(データソース,対象レコード,{列1:値1,列2:値2・・・})
価格が100のもののうち、最初のレコードを対象にするにはFilter関数とFirst関数を使用します
First(Filter(myCollect,myPrice=100))
上記の関数を組み合わせると、今回の関数は次のようになります
Update(myCollect,First(Filter(myCollect,myPrice=100)),{myPrice:0,myQuantity:0})
これで価格が100の最初の行が価格も数量も0に置き換えることができました
![](https://analytic-vba.com/wp/wp-content/uploads/2023/02/e065a3155328ead2005eda4668ba5783-1.gif)
UpdateIf関数
UpdateIf関数はエクセルワークシート関数のSumIfs関数と同じように、条件に合うものを一括で処理します
文法は次の通りとなります
UpdateIf(データソース,対象レコード(条件式),{列1:値1,列2:値2・・・})
Update関数とは違い、特定の列だけ置き換えることもできます
今回は価格が100未満のものを一括で0にします
UpdateIf(myCollect,myPrice<100,{myPrice:0,myQuantity:0})
下のGIF画像内で価格が100未満のものが置き換えられています
![](https://analytic-vba.com/wp/wp-content/uploads/2023/02/2c63c216d9fd9bb6666e4dc1d11d1e9c-1.gif)
もちろん、置き換える数量をテキストボックスで指定することもできます
![](https://analytic-vba.com/wp/wp-content/uploads/2023/02/image-73-644x187.png)
テキストボックス:txtModifyを組み入れたUpdateIf関数の式は次の通りとなります
UpdateIf(myCollect,myPrice<100,{myPrice:0,myQuantity:Value(txtModify.Text)})
価格が100未満のデータがテキストボックスの数字で置き換えられます
![](https://analytic-vba.com/wp/wp-content/uploads/2023/02/d3dcac97a92e5ec8c17f53064a16b9c9.gif)
<まとめ>
今回はUpdate関数とUpdateIf関数について解説させて頂きました
Patch関数、Update関数、UpdateIf関数はそれぞれ機能が似ているようでそれぞれ違いがあるので注意が必要です