- ベストアンサー
VBAで最も近い数値に置き換えを行う方法
VBAで、sheet(1)に以下のような数値が入力されているとします。 1.0 1.2 1.4 … END ※入力されている数値の数は場合によって変化します ここで、sheet(2)に以下のような数値が入力されていた場合に、マクロ実行後にこれらの数値をsheet(1)に入力されている値に置き換えたいと考えています(同じ数値が無い場合は、差が最も小さい数値を選択)。 1.01 1.03 1.05 1.07 1.09 1.11 … どのようにマクロを組めばよろしいでしょうか?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
質問例では0.2刻みですが、もしそのような規則性がない場合でも対応できるようにします。 sheet(2)のB1に以下の式を入力して下方向にコピーすると、絶対値の差が最小の行の値を表示します。(それが複数行ある場合は下の行が優先) =INDEX(Sheet1!$A:$A,MAX(INDEX((ABS(A1-Sheet1!$A$1:$A$3)=MIN(INDEX(ABS(A1-Sheet1!$A$1:$A$3),)))*ROW(Sheet1!$A$1:$A$3),)))
その他の回答 (3)
- maron--5
- ベストアンサー率36% (321/877)
◆この例であれば、これでもいいようの思います =CEILING(FLOOR(A1,0.1),0.2)
お礼
式が少なくて非常に分かりやすいのですが、sheet(1)に記載されている数字は実は0.2刻みという規則性がありません。説明不足で申し訳ございませんでした。でも、こういったExcel関数自体を知りませんでしたので非常に参考になりました♪どうもありがとうございます。
- n-jun
- ベストアンサー率33% (959/2873)
(同じ数値が無い場合は、差が最も小さい数値を選択)。 とは、±で差が少ない値と言う事? それとも、超えない範囲で一番近い値と言う事?
- yokomaya
- ベストアンサー率40% (147/366)
マクロではありませんが Sheet2のA列に数字があるならB1に以下を入れてオートフィルしては? =VLOOKUP(Sheet2!A1+(Sheet1!$A$2-Sheet1!$A$1)/2,Sheet1!$A$1:$A$11,1)
お礼
Excelの関数ってホントいろいろあるんですね~!どうもありがとうございます☆
お礼
質問者である私自身が気付いていなかった規則性にまで考慮頂きどうもありがとうございます! はい、確かにsheet(1)に記載されている内容は0.2刻みという規則性はありません。この数式を利用させて頂きます。本当にどうもありがとうございました♪