• ベストアンサー

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 … どのようにマクロを組めばよろしいでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.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),)))

VAN613
質問者

お礼

質問者である私自身が気付いていなかった規則性にまで考慮頂きどうもありがとうございます! はい、確かにsheet(1)に記載されている内容は0.2刻みという規則性はありません。この数式を利用させて頂きます。本当にどうもありがとうございました♪

その他の回答 (3)

  • maron--5
  • ベストアンサー率36% (321/877)
回答No.3

◆この例であれば、これでもいいようの思います =CEILING(FLOOR(A1,0.1),0.2)

VAN613
質問者

お礼

式が少なくて非常に分かりやすいのですが、sheet(1)に記載されている数字は実は0.2刻みという規則性がありません。説明不足で申し訳ございませんでした。でも、こういったExcel関数自体を知りませんでしたので非常に参考になりました♪どうもありがとうございます。

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.2

(同じ数値が無い場合は、差が最も小さい数値を選択)。 とは、±で差が少ない値と言う事? それとも、超えない範囲で一番近い値と言う事?

  • yokomaya
  • ベストアンサー率40% (147/366)
回答No.1

マクロではありませんが Sheet2のA列に数字があるならB1に以下を入れてオートフィルしては? =VLOOKUP(Sheet2!A1+(Sheet1!$A$2-Sheet1!$A$1)/2,Sheet1!$A$1:$A$11,1)

VAN613
質問者

お礼

Excelの関数ってホントいろいろあるんですね~!どうもありがとうございます☆

関連するQ&A