• ベストアンサー

エクセルを使って数値を整理していますが、もっと簡単な方法がありますか?

標記の作業をしておりますが、1年間に 1000回以上数式を入替えなければならないため、 賢いエクセルなら別な方法があるのかな?と お尋ねします。 作業の内容; 1)ある時点;S1(○月○日○時)の数値が決定されてます。 2)その時点以降の時点;S2の数値があります。 3)S1とS2間の各時点(空白セル)に等しい差となる数値を入れ込み   1年間数値が連続している表をつくりたい。   私が作った関数の方法(原始的ですが) A列に数値の1~750程度(1ヶ月×24時間分)を表示させる。 B列に年月日と時間を表す:(○月○日○時) C列が決まっている数値が入る欄で、 例として、S1:1月10日9:00時の数値が30とする。 S2が:1月日22:00時の数値が100とする。 その間の12の空白セルに、数値を入れるため、 10時のセル(C11)に以下の式を作った。 =($C$23-$C$10)/($A$23-$A$10)+C10 で35.38を得、次セルは、40.77と差が5.38づつの数値。 これをC22までコピーして完成する。 さて、次の箇所(S2とS3間)では、 数式の中の$記号がある4ヶ所を入れ替え なくてはならず、この作業を繰り返すのは気が遠くなります。 もっと簡単に作業ができる方法や数式をご存知でしたら、 教えていただけるようお願いします。

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

  • ベストアンサー
  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.6

補足欄を注意してみていませんでした。A列には連続数値が入っているんですね。 D、F、H列を変更して下さい。判定をC列に変えています。 D10 =IF(C9<>0,C9,D9) E10 =INDIRECT("C"&MIN(IF(C10:$C$751<>"",ROW(C10:$C$751)))) F10 =IF(C9<>0,A9,F9) G10 =INDIRECT("A"&MIN(IF($C10:C$751<>"",ROW($C10:C$751)))) H10 =IF(C10<>0,C10,(E10-D10)/(G10-F10)+H9) 多分うまくいくと思います。失礼しました。

abouka
質問者

お礼

nishi6様 ご指導ありがとうございました。 完璧に私がほしい正確な数値を得ることができました。 私は、補完やINDIRECT、MIN、ROW 等の意味も分からずですが 教えていただいた数式を用いて作業をはじめられます。 (落ち着いてから言葉の意味を理解します) 大変貴重なお時間をとらせ、まことにありがとうございました。 追伸;フロッピーに厳重保管しました。貴重品とします。

その他の回答 (5)

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.5

算式は5種類しかありません。 補足によると、その内、E10、G10がうまくいっていないかもしれません。(当方、Excel2000です) 回答をコピーして貼り付けたのなら、  E10を選択してファンクションキーF2を押して編集モードにしてCtrl+Shift+Enterとします。  G10についても同じようにします。 思惑通り実行できていれば、  D10からH10は 0 30 0 9 30 です。 E、G列の算式は配列数式なので算式の窓で、{ }で囲まれて見えるはずです。 D10からH10をコピーしてD11に貼り付ければ、(以下同様にして)  D11からH11は 30 100 9 22 35.38 <H11は =IF(A11<>0,C11,(E11-D11)/(G11-F11)+H10)  D12からH12は 30 100 9 22 40.77 <H12は =IF(A12<>0,C12,(E12-D12)/(G12-F12)+H11)  D13からH13は 30 100 9 22 46.15 <H13は =IF(A13<>0,C13,(E13-D13)/(G13-F13)+H12) 実際使っている補完式を少しアレンジしただけなので動くはずなのですが・・・ 算式は5種類ですので確認してください。 Excelのバージョンが違うようですが、計算には関係してこないと思います。 最終行はA751のようなのでE10、G10の750を751にして下さい。修正しても登録はCtrl+Shift+Enterとします。 (最後のデータより1つ前までの計算には影響していないでしょう)

noname#1523
noname#1523
回答No.4

S1・S2の部分がどのように入力されているのか理解できないのですが・・・ 要はA列に1年時刻が1時間単位で入力されており、 任意の時刻と数値を入力したら、その間の時刻に 数値を按分して増加させた値を求める方法と理解しました。 【入力用シート】シート名:Sheet1 ___ A列______ B列 C列 D列 1行目 時刻______ 空白 値 2行目 2002/01/10 09:00 式2 30 3行目 2002/01/10 22:00 式2 100 4行目 2002/01/15 01:00 式2 200 ・・・ n行目 2002/01/22 02:00 式2 300    ★B列は式をセット後非表示にする 【表示用シート】シート名:Sheet2 ___ A列______ B列 __1行目 時刻______ 値 __2行目 2002/01/01 00:00 x  <==データなしのためXを表示 __3行目 2002/01/01 01:00 x ・・・ 227行目 2002/01/10 09:00 30 228行目 2002/01/10 10:00 35.38461538 229行目 2002/01/10 11:00 40.76923077 ・・・・・(5.38461538づつ増加) 239行目 2002/01/10 21:00 94.61538462 240行目 2002/01/10 22:00 100 241行目 2002/01/10 23:00 101.010101 242行目 2002/01/11 00:00 102.020202 ・・・・・(1.01010101づつ増加) 338行目 2002/01/15 00:00 198.989899 339行目 2002/01/15 01:00 200 340行目 2002/01/15 02:00 ×  <==データなしのためXを表示 (以下750行目までデータなしで×をセット) 【設定】 ●データ入力:Sheet2 1)1行目にタイトルを適宜入力 2)A列に 2002/1/10 9:00 の様に年月日、時刻を入力 3)B2セルに以下の式を入力してB3~Bnにコピー    =IF(A2="","",VALUE(TEXT(A2,"yyyy/mm/dd hh:mm")))     表示形式は任意設定してください     EXCELの場合時刻値は手入力で入力した場合と     数式などで計算した場合、表示上は同じでも     日付値(時刻値)として微妙な誤差が発生し     検索や比較でマッチしなくなる為に     A1の入力値から年月日・時間と取り出して再セットします ●表示シート:Sheet1 1)参照範囲の特定   A1セルに『検索範囲』と文言を入力   B1セルに="Sheet2!B2:B"&COUNT(Sheet2!B:B)+1 と入力       Sheet2のB列の日付けデータ入力範囲を自動的にセットします   これは、後述の計算式のMATCH関数で検索する範囲を示します   MATCH関数で範囲をSheet2!$B:$Bと指定する事もできますが   処理負荷が増大しますので、この方法をとります 2)最大日付の特定   A1セルに『最大日付』と文言を入力   B1セルに =MAX(Sheet2!A:A) と入力       これも、後述の計算式で個々に指定した場合の処理負荷を軽減する為です 3)年月日・時刻の入力   a)A3セルに 2002/1/1 0:00 と最初の時刻を入力します   b)A4セルに以下の式を入力してA5~Anにコピーします     =DATE(YEAR(A3),MONTH(A3),IF(HOUR(A3)=23,DAY(A3)+1,DAY(A3)))+TIME(HOUR(A3)+1,MINUTE(A3),0)           A3に2002/1/1 0:00、A4に2002/1/10 1:00と入力して      オートフィルを行うと2002/12/31 23:59の様に誤差が発生します 4)計算式の登録    計算式を簡略にする為に、以下の名前の定義を行います     a)名前:検索0  参照範囲:=MATCH(Sheet1!$A4,INDIRECT(Sheet1!$B$1),0)       **A列の日付けを入力シートの日付けと"同一値"で検索する式です     a)名前:検索1  参照範囲:=MATCH(Sheet1!$A4,INDIRECT(Sheet1!$B$1),1)       **A列の日付けを入力シートの日付けと"同一か内輪の値"で検索する式です 5)数値の計算    B3セルに以下の式を入力して、B4~Bnにコピーします    =IF(A3>$B$1,"×",IF(NOT(ISERROR(検索0)),OFFSET(Sheet2!$A$1,検索0,2,1,1),IF(NOT(ISERROR(検索1)),OFFSET(Sheet2!$A$1,検索1,2,1,1)+(OFFSET(Sheet2!$A$1,検索1+1,2,1,1)-OFFSET(Sheet2!$A$1,検索1,2,1,1))/((OFFSET(Sheet2!$A$1,検索1+1,1,1,1)-OFFSET(Sheet2!$A$1,検索1,1,1,1))*24)*((A3-OFFSET(Sheet2!$A$1,検索1,1,1,1))*24),"×")))      a)A列の日付けがB1の最大値より大きければ計算せず"×"をセット      b)同一値で検索しエラーが無い時『NOT(ISERROR(検索0))』には       OFFSET関数で該当の値を取り出します      c)同一値がエラーの時は、内輪の値の有無をチェック『NOT(ISERROR(検索1))』し       エラーでなければOFFSET関数で必要な数値を取り出して計算します        開始値+(増分*開始時刻からの経過時間)       =開始値+((終了値-開始値)/((終了時刻-開始時刻)*24)*((A列時刻-開始時刻)*24)          ・開始値 :OFFSET(Sheet2!$A$1,検索1,2,1,1)          ・終了値 :OFFSET(Sheet2!$A$1,検索1+1,2,1,1)          ・開始時刻:OFFSET(Sheet2!$A$1,検索1,1,1,1)          ・終了時刻:OFFSET(Sheet2!$A$1,検索1+1,1,1,1)      d)内輪の値での検索がヒットしない時は"×"をセット 以上で入力シートにデータを入れることで、 表示シートに自動的に値がセットされます

abouka
質問者

お礼

xxsadayanxx様 私にとっては、夢のような方法を教えていただきありがとうございます。 (この作業を15年分するので、気が狂いそうでした) 今から、先に教えていただきました方(nishi6様)の方法で 実際の数値を入れてテストします。 今は夜2:00過ぎですので、明日といっても今日ですが、 xxsadayanxx様の方法でもテストさせていただきます。 このため、今夜は、御礼のみで失礼します。 ありがとうございます。

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.3

補完しているわけですね。A列は1飛びが条件の算式ですね。(確認です) マクロで計算した方が簡単かもしれませんが、今回は算式で計算してみました。 最初に算式を書くだけで、後での変更は多分不要(余りない)でしょう。 捕外が必要かもしれませんが、要件がはっきりしていないので考慮していません。 捕外などがあればマクロのほうが対応しやすいと思います。 A10= 9、C10= 30 A23=22、C23=100 とあり、以下A、C列に飛び飛びの入力があるとします。 最後にデータが入力されている行を例として750行目とします。10行目から750目までが計算可能になります。 算式はこの最終行が変更になれば、修正する必要があります。(その時は2箇所修正して下にコピーです) D10 に =IF(A9<>0,C9,D9) E10 に =INDIRECT("C"&MIN(IF(C10:$C$750<>"",ROW(C10:$C$750))))       これは配列数式なので、Ctrl+Shift+Enterで登録します。 F10 に =IF(A9<>0,A9,F9) G10 に =INDIRECT("A"&MIN(IF($C10:C$750<>"",ROW($C10:C$750))))       これは配列数式なので、Ctrl+Shift+Enterで登録します。 H10 に =IF(A10<>0,C10,(E10-D10)/(G10-F10)+H9) D10:H10 をコピーして、D11:D750 に貼り付けます。 これでA、C列に入力があれば計算されます。A、C列に入力すれば再計算されます。 算式は少なくできると思いますが、ますます分かりづらくなるので分割しています。 見苦しければ、D~G列を非表示にしてしまいます。補完結果はH列に出ます。 ご参考に。

abouka
質問者

補足

nishi6様 教えていただきありがとうございます。 早速指示どおりに、セルに数式をインプットしました。 D10~H10に、nishi6様の回答ページの数式をコピーして各セルに貼り付けました。ただし、E10とG10は Ctrl+Shift+Enter で登録したつもりです。 1行下にでる数値は以下のとおりです。 30 100 9 22 0 となり、H列がゼロとなりました。 なお、(セル;E11)と(セル;G11)のセル左上にエラーマークが付いて(XPですので)、内容は、『数式は隣接したセルを使用しません』と出ています。 私のセルへの貼り付け、または登録ミスでしょうか? 確認事項;A10=9,C10=30;A23=22,C23=100です。 A列は上から750までの数値が入っており、A751=750、C751には3000と数値を 入れてあります。 お忙しいと思いますが、よろしくご指導ください。

  • madman
  • ベストアンサー率24% (612/2465)
回答No.2

たとえば、 D10に=(C23-C10)/(A23-A10)と記述し、 各セルに=C10+D$10と書いて各セルにコピーすればいかがですか? D列に計算させる式もコピーすれば変更はいらないでしょう。(ただし、区間の幅(S1とS2の幅とS2とS3の幅が異なる場合は修正がいりますが。) S2からS3の作業時も、S2の次のデータ位置に=C24+D$24と記述してからコピーしましょう。

abouka
質問者

補足

madman さま 教えていただいたmadmanさまの方法(D10に計算式を書いてから 各セルにコピーをする方が楽でした。 しかし、区間の幅が毎回同一でないため(S1とS2の幅とS2とS3の幅が異なる) 頭が痛いのです。

  • Spur
  • ベストアンサー率25% (453/1783)
回答No.1

この説明から何をしたいのかがまったく見えてきません。 結局どうなれば良いのでしょうね? でも、あるセルに式を入れて、それを別のセルにコピーした時に、計算式中にある計算対象のセル番号を修正するということであれば、コピーすれば自動的に変わりますけど? でも、そんな式をいれているのですは? なぜ名前を使わないのですか? セルに範囲で名前をつけて、それで計算したほうが楽ではないですか? 例えば、 =($C$23-$C$10)/($A$23-$A$10)+C10 ならば、 =(データ列1-データ列2)/(データ列3-データ列4)+補間値 などとすれば式自体もわかりやすくなると思いますけど? でも、何をしたいのかわかりませんので、まったく的外れかもしれませんね。 質問のポイントが分からないんですよ。 何を計算したいのか(それは文字で説明されても知らない人には理解できない)ではなく、質問のポイントを書かれた方が良いですよ。

abouka
質問者

補足

Spur様 ご連絡とご指摘ありがとうございます。 私の説明が十分でなく、質問のポイントがご理解できないとのことで すみませんでした。具体的には以下のようなことです。 1月1日の9:00に数値『30』が確認できてます。 次に確認できたのは1月1日の22:00で『100』でした。 そこで、当日の10時から21時までの各時間毎の数値を、等しい間隔(差)で 埋める。という作業です。 差:100-30=70、70を13時間(22時-9時)で割った5.38を時間ごとに加えながら、 10時のセルは35.38、11時のセルは40.77、、、、21時のセルは94.62としたいのです。 データは一定の時間間隔ではなく、3時間経過後に確認されたものもあり、100時間以上経過後確認された場合もあります。 ところで、 セルに範囲で名前をつけて、それで計算したほうが楽ではないですか? =(データ列1-データ列2)/(データ列3-データ列4)+補間値 今回の作業で以上の2行が必要な時には、どの様にするのでしょうか? お時間が許せば教えてください。

関連するQ&A

  • Excel 数値比較について

    A列に基準値、B列に結果の数値、C列にその差異の数値を表示したい場合は、どんな数式?関数?を利用すればいいですか。 例えば, セルA1に10、B1に8の場合、C1に2という数値を表したい。 セルA1に5、B1に10の場合、C1に-5という数値を表したい。 お願いします。

  • エクセル 数式に強制的に数値をいれたものだけ取り出す

    A列に数式を入れて計算していますが、微調整のため強制的に入れた数値のみ入れている箇所があります。 数式を変更したいのですが、強制的に入れた数値は残すため別の列に一時的にコピーしたいのです。 行が2000くらいあるので、セル毎に式か数値かを確認するのは、時間的に無理です。 見た目分からないので、良い方法があれば教えてください。

  • Excelでグループ化し、グループ名を数値で返すには?

    Excelで次の解を求める時、いいアイディアはないでしょうか。 1) セルをグループ化します。 2) 次にグループ化したまとまりごとに、 左列に数値を順に返します。 つまり以下のようなセルがあるとき : A B 1 : 空白 442565 2 : 空白 442565 3 : 空白 332211 4 : 空白 332211 5 : 空白 332211 ↓ : A B 1 : 1 442565 2 : 1 442565 3 : 2 332211 4 : 2 332211 5 : 2 332211 つまりBが同じ数値である セル同士をワングループとして、 そのグループを順列に数値でA列に 区分したいのです。 A列が何セルでグループ化されるかは ランダムです。B列において2つのセルが 同じ数値を共有している場合もありますし、 100のセルが同じ数値を共有しているもあります。 データ総数はおよそ9000列ほどになります。 集計機能を用いた方がよいでしょうか。 関数の他にアイディアがあれば、教えて 頂けるととても助かります。 宜しくお願い致します。

  • EXCELで式での空白セルの挿入方法

    A列は空白行で、B列は数値が入っていたり空白だったりする行で構成されています。 またC列からD列までの全ての行には数値が入っています。 この時A列に条件付き数式を入力して、B列が空白でなければB列に空白セルを挿入して現B列からD列を右にシフトさせたいのですが、数式で可能でしょうか? 数式で可能ならばA列に入力する式を、不可能なら参考のためVBAでの記述をお教え頂けると嬉しいです。(VBAはあまり理解しておりませんが。) 例 【処理前】 A列 B列 C列 D列 E列     22   33  44          55  66     77   88  99         100  101 【処理後】 A列 B列 C列 D列 E列 式       22  33  44 式       55  66 式       77  88  99 式      100  101 2万行の処理を1回のみしたいです。 宜しくお願いします。

  • エクセル関数で・・・

    A列の1行目から45行目までに、”1”か”×”を入力するか、空白があります。 B列の1行目から45行目までに、様々な数値、若しくは空白が入ります。 この時、A列が”×”の行でB列が空白でないセルをカウントする数式を教えて下さい。   A  B 1 ×  20 2 × 3 1  30 4 ×  5 1  20 6 7 1  30 8 ×  10・・・・ こんな感じで、A列が”×”でB列が空白でないセルは『2』と導きたいのです。 分かりにくい説明で申し訳ありませんが、宜しくお願いいたします。

  • エクセルの使用方法

    エクセルの使用方法で質問があります。 1.あるA列10行に数式が入力されています。その数式はA列9行+B列10行の値です。B列10行に数値を入力する時、C列10行には日付を入力しています。このままだと、B列、C列に何も入力されていない行でも、A列だけは、延々と数値が表示されてしいます。できれば、B or C列に入力していない時は、A列の表示を空白にすることはできないでしょうか? 2.上記のようにA列には、数値が入っており、何行目まで数値があるのかは、B列、C列次第です。この状態で、A列の一番下の行のセルの数値を、固定したセルに表示させる方法はないでしょうか? ただこのシートは複数個作成し、あるシートでは、10行目が一番下だったり、あるシートでは25行目が一番下だったりする条件になります。 またB列にはマイナスの数値も入るので必ずしも行が増える程、A列の値が大きいわけではありません。 3.C列の日付ですが、たとえば「2009/8/8」と入力したら、「2008.8.8」と半角で表示するようにしてるのですが、これを「2008.08.08」と半角で表示する方法はないでしょうか? 4.エクセルで時々、あるセルの左上端が緑色になり<!>と表示されています。この<!>を押すと、いろいろコメントがでてくるのですが、エラーを無視するを選ぶと、消えます。一体これは何なんでしょうか? 出ないようにする方法はないでしょうか? 以上の件、どれでもよいのでご回答くださいますようお願います。

  • Excelの入力式について

    Excelの入力式について教えてください。 たとえば、A1セル~F1セルに数値が入っていて、G1セルA1+B1の値、H列にC1+D1の値 I列にE1+F1の値としたい場合、 G1セルに数式を入れてH列にコピーするとB1+C1になってしまいます。 上手くやる方法はないのでしょうか。 1列ずつわざわざ空白列を作るのは嫌ですし、たくさんあったら数式を打ち込むのも大変です。。。

  • エクセルCOUNT関数について

    こんばんは、COUNT関数についてお伺いします。 たとえばA列に関数(SUMなど)の数式が入っています。そのA列を範囲指定してCOUNT関数をしたところ、数値が現れているセルのみをカウントしたいのですが、空白の数式が入っているセルもカウントしてしまいます。数値を示しているセルのみをカウントしたいのですが、うまく行きません。 どうすれば解決できますか、教えていただけないでしょうか。

  • Excelで数値の引用?の方法がわかりません

    エクセルでの数値の引用をしたいのですができません。 具体例をあげますと、 まずA1のセルには乱数を発生させる数式を書きます。(例えば1~3の数値がでる) そしてB1のセルに「りんご」B2に「みかん」B3に「ぶどう」と入力します。 このとき、C1のセルにA1で1がでたら「りんご」を、3がでたら「ぶどう」と表示されるようにしたいです。 数式でC1のセルに「=B?」と入力し、この?の部分をA1のセルの計算結果と対応させることが出来れば出来るんじゃないかと考えたのですが、その肝心の対応させる方法がわかりません。 初歩的な質問で申し訳ありませんが、どなたかやり方がわかる方がいましたらご教授お願いします。

  • エクセル(2003)で、空白(数値が0)のセルがある場合、そのセルを除

    エクセル(2003)で、空白(数値が0)のセルがある場合、そのセルを除外して計算結果をだしたいのですが、うまくいきません。今入っている数式は次のようなものです。=ROUND(D25*F25*H25,0) この数式で空白が生まれる可能性があるのはD列です。何かいい方法はないでしょうか。

専門家に質問してみよう