プロが教えるわが家の防犯対策術!

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


どのようにマクロを組めばよろしいでしょうか?

A 回答 (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),)))
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/09/27 19:27

◆この例であれば、これでもいいようの思います


=CEILING(FLOOR(A1,0.1),0.2)
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/09/27 19:23

(同じ数値が無い場合は、差が最も小さい数値を選択)。


とは、±で差が少ない値と言う事?
それとも、超えない範囲で一番近い値と言う事?
    • good
    • 0

マクロではありませんが


Sheet2のA列に数字があるならB1に以下を入れてオートフィルしては?
=VLOOKUP(Sheet2!A1+(Sheet1!$A$2-Sheet1!$A$1)/2,Sheet1!$A$1:$A$11,1)
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/09/27 19:20

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!