標記の作業をしておりますが、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ヶ所を入れ替え
なくてはならず、この作業を繰り返すのは気が遠くなります。

もっと簡単に作業ができる方法や数式をご存知でしたら、
教えていただけるようお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (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)

多分うまくいくと思います。失礼しました。
    • good
    • 0
この回答へのお礼

nishi6様

ご指導ありがとうございました。
完璧に私がほしい正確な数値を得ることができました。

私は、補完やINDIRECT、MIN、ROW 等の意味も分からずですが
教えていただいた数式を用いて作業をはじめられます。
(落ち着いてから言葉の意味を理解します)

大変貴重なお時間をとらせ、まことにありがとうございました。
追伸;フロッピーに厳重保管しました。貴重品とします。

お礼日時:2002/04/07 02:54

算式は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つ前までの計算には影響していないでしょう)
    • good
    • 0

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)内輪の値での検索がヒットしない時は"×"をセット

以上で入力シートにデータを入れることで、
表示シートに自動的に値がセットされます
    • good
    • 0
この回答へのお礼

xxsadayanxx様

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

お礼日時:2002/04/07 02:14

補完しているわけですね。

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列に出ます。

ご参考に。

この回答への補足

nishi6様

教えていただきありがとうございます。
早速指示どおりに、セルに数式をインプットしました。
D10~H10に、nishi6様の回答ページの数式をコピーして各セルに貼り付けました。ただし、E10とG10は Ctrl+Shift+Enter で登録したつもりです。

1行下にでる数値は以下のとおりです。
301009220 となり、H列がゼロとなりました。
なお、(セル;E11)と(セル;G11)のセル左上にエラーマークが付いて(XPですので)、内容は、『数式は隣接したセルを使用しません』と出ています。

私のセルへの貼り付け、または登録ミスでしょうか?

確認事項;A10=9,C10=30;A23=22,C23=100です。
A列は上から750までの数値が入っており、A751=750、C751には3000と数値を
入れてあります。

お忙しいと思いますが、よろしくご指導ください。

補足日時:2002/04/06 16:54
    • good
    • 0

たとえば、


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

この回答への補足

madman さま

教えていただいたmadmanさまの方法(D10に計算式を書いてから
各セルにコピーをする方が楽でした。

しかし、区間の幅が毎回同一でないため(S1とS2の幅とS2とS3の幅が異なる)
頭が痛いのです。

補足日時:2002/04/06 14:45
    • good
    • 0

この説明から何をしたいのかがまったく見えてきません。


結局どうなれば良いのでしょうね?

でも、あるセルに式を入れて、それを別のセルにコピーした時に、計算式中にある計算対象のセル番号を修正するということであれば、コピーすれば自動的に変わりますけど?
でも、そんな式をいれているのですは?
なぜ名前を使わないのですか?
セルに範囲で名前をつけて、それで計算したほうが楽ではないですか?
例えば、
=($C$23-$C$10)/($A$23-$A$10)+C10
ならば、
=(データ列1-データ列2)/(データ列3-データ列4)+補間値

などとすれば式自体もわかりやすくなると思いますけど?
でも、何をしたいのかわかりませんので、まったく的外れかもしれませんね。
質問のポイントが分からないんですよ。
何を計算したいのか(それは文字で説明されても知らない人には理解できない)ではなく、質問のポイントを書かれた方が良いですよ。

この回答への補足

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行が必要な時には、どの様にするのでしょうか?
お時間が許せば教えてください。

補足日時:2002/04/06 14:59
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QエクセルではIF関数なのにアクセスではIIF関数?

なぜエクセルではIF関数なのにアクセスではIIF関数?

IF関数はアクセスではIIF関数になりますが、
なぜ「I」が増えるのでしょうか?

またIF関数はイフ関数と読みますが
IIF関数は「イイフ」関数と読めばいいのでしょうか?

よろしくお願い致します。

Aベストアンサー

>エクセルではIF関数なのにアクセスではIIF
アクセスでも、形だけについて言えば(関数とステートメントの違いはあるが形だけで言うと)
・クエリのグリッドで使う場合と
・VBAのモジュールで使う場合と
・アクセスのSQL文でどうか
あります。
アクセスでもVBAではIFは使えます。
クエリのグリッドではIFは使えないようだ(「式に未定義関数Ifがあります」、のエラー)。
SQLではIF,IIFは使えません。
http://bbs.wankuma.com/index.cgi?mode=al2&namber=14014&KLOG=29
エクセル関数にも、IIF関数が増えたかと思ったが、まだ増えてないようだ。
エクセルでもVBAではIifが使えます。
伝統的にIIFがアクセスの方で設けられている。理由は聞いても誰にもわからないのではないか。
ーー
読み方は、ここに質問するより、Googleなどで照会するのが良い。
(こういう一般的な質問は、ここよりGoogleなどの照会のほうが良い。)
「iif 読み方」で照会。
「アイイフ」が多いようだ。
http://barbwire.blog49.fc2.com/blog-entry-43.html ほか

>エクセルではIF関数なのにアクセスではIIF
アクセスでも、形だけについて言えば(関数とステートメントの違いはあるが形だけで言うと)
・クエリのグリッドで使う場合と
・VBAのモジュールで使う場合と
・アクセスのSQL文でどうか
あります。
アクセスでもVBAではIFは使えます。
クエリのグリッドではIFは使えないようだ(「式に未定義関数Ifがあります」、のエラー)。
SQLではIF,IIFは使えません。
http://bbs.wankuma.com/index.cgi?mode=al2&namber=14014&KLOG=29
エクセル関数に...続きを読む

Q作業列なしで各行のA列とB列の数値の小さい方に、C列の数値をかけた値の和を求めたい

エクセルで、A列B列C列の1行目から100行目まで、それぞれ数値が入っているとします。
各行のA列とB列の数値の小さい方に、C列の数値をかけた値の和を求めたいです。
D列を作業列にするなら、D1に「=MIN(A1,B1)*C1」として、これをD100までコピーして、「=SUM(D1:D100)」で得られる数値を求めたいのですが、元となるデータが頻繁に追加されることも有り、作業列の追加が難しい状況です。
SUMPRODUCT関数を使おうにも、「=SUMPRODUCT(MIN(A1:A100,B1:B100),C1:C100)」では、A1からB100までの200セルのうちの最小値に、C1からC100の数値をそれぞれかけた値の和が返されてしまいます。
なにかよい方法があれば、お知恵を拝借できないでしょうか。

Aベストアンサー

こんにちは!

範囲を最初から多目にしておいてはダメですか?
SUMPRODUCT関数はどこかの列が空白の場合は「0」とみなされ合計しても結果に変化はないはずですので・・・

どうしても作業列を使用したくない場合の一例です。
表示したいセルに
=SUMPRODUCT(IF(A1:A1000<=B1:B1000,A1:A1000,B1:B1000),C1:C1000)

配列数式になりますので、Ctrl+Shift+Enterで確定!
この画面からコピー&ペーストする場合は上記数式をドラッグ&コピー! → 表示したいセルを選択 → 数式バー内に貼り付け  → そのまま(編集可能なまま)
Ctrl+Shiftキーを押しながらEnterキーで確定します。
数式の前後に{ }マークが入り配列数式になります。

※ SUMPRODUCT関数自体が配列数式になりますが、
配列数式内に配列数式を入れた感じになります。m(_ _)m

QエクセルIF関数について

エクセルIF関数について

お世話になっております。エクセルのIF関数について教えてください。

例えばA1に任意で入力する数字があるとします。
このA1の数字が4以下なら○、10以上なら×、5-9の間なら何も表示しないというような関数を組みたいのですが、どなたか教えていただけないでしょうか?

たぶん、IF関数だと思いますが、もし違うならその関数を教えてください。
よろしくお願いします。

Aベストアンサー

=IF(A1<=4,"○",IF(A1>=10,"×",""))

QSUMPRODUCT($A$1:$A$10,$B$1:$B$10)とSUMPRODUCT($A$1:$A$10*$B$1:$B$10)

エクセルのSUMPRODUCT関数についてお尋ねします。

=SUMPRODUCT($A$1:$A$10,$B$1:$B$10)

=SUMPRODUCT($A$1:$A$10*$B$1:$B$10)
の違いは何でしょうか?
両者とも同じ答えを返しますが、いろいろ試したところ、前者は範囲内に文字列があってもそれを無視して計算し、後者は文字列があればエラーになるようですが、その理解で正しいでしょうか?
正しいとすれば、なぜでしょうか?

Aベストアンサー

こんばんは。

配列計算をしているのは言うまでもありませんが、この、SUMPRODUCT は、必ず、内部のひとまとまりから計算するという性質を持っています。ただ、VBAのように左から時系列かどうかは、言語が違いますから、分かりません。しかし、この引数は、パラメータ配列になっています。そして、その引数それぞれの有効値を調べて、それを演算出来る値かどうか調べます。

文字列を入れてもエラーにならないのは、元々、そこに注釈などを入れるために考えられたものです。値を文字列か数値かを精査して演算するように出来ています。最初、SUM関数に対し、そのように作られました。プログラムとしては、初歩的なものですが、そのアイデアは、今日まで、踏襲しているようです。このオリジナルの仕組みを考えたのは、VisiCalc の開発者、ブルックリン氏です。昔々、本で読んだことがあります。 PRODUCT関数とも共通です。3つの関数は、同じような仕様を持っています。

こちらが、本来の使い方です。

=SUMPRODUCT($A$1:$A$10,$B$1:$B$10)

つまり、
$A$1:$A$10 と $B$1:$B$10 の値を別々に取得しています。

では、
=SUMPRODUCT($A$1:$A$10,$B$1:$B$11)

とすると、なぜ、エラーが出るかというと、$B$11 に対応する数値が、NULL値(有効な値がない)だからです。それは、全体に反映させてしまいます。(理由は分かると思いますが、プログラムが途中で、エラーで止まってしまうからです)

ところが、こちらは、

=SUMPRODUCT($A$1:$A$10*$B$1:$B$10)

$A$1:$A$10*$B$1:$B$10 は、分割出来ません。したがって、この数式の中でのエラーは、そのまま、元の数式に反映されます。

ご自分で、ユーザー定義関数を作ってみれば分かります。VBAでも、同じように作ることが可能です。一度、試してみるとよいです。

こんばんは。

配列計算をしているのは言うまでもありませんが、この、SUMPRODUCT は、必ず、内部のひとまとまりから計算するという性質を持っています。ただ、VBAのように左から時系列かどうかは、言語が違いますから、分かりません。しかし、この引数は、パラメータ配列になっています。そして、その引数それぞれの有効値を調べて、それを演算出来る値かどうか調べます。

文字列を入れてもエラーにならないのは、元々、そこに注釈などを入れるために考えられたものです。値を文字列か数値かを精査して演算...続きを読む

QエクセルのIF関数について

エクセルのIF関数について

お世話になっております。
エクセルのIF関数について教えてください。
あるセルの値がエラーなら0、数値が入っているなら、その数値をそのまま表示するという
関数を作りたいのですが、どのようにすればよろしいでしょうか?

Aベストアンサー

A1セルが空の場合には空で、エラーや数値でなければ0、数値であればその値を表示するとのことでしたら次のような式にないますね。

=IF(A1="","",IF(ISNUMBER(A1),A1,0))

Q=IF(ISNA(VLOOKUP($A1,sheet2!$A$1:$B$12,2,FALSE)),"",VLOOKUP($A1,sheet2!$A$1:$B $

いつもお世話になってます。
以下の関数式について、お時間がありましたらどうぞご教示ください。

=IF(ISNA(VLOOKUP($A1,sheet2!$A$1:$B$12,2,FALSE)),"",VLOOKUP($A1,sheet2!$A$1:$B $12,2,FALSE))

「シート2の範囲指定した表にA1セルの値と同じ値の右隣になる値を返せ。ただし該当なき場合は空白とせよ。」

純粋になんでこのような構文になるのかが解りません。

1.ISNAってそもそもなんでしょう?
2.同じ式を繰り返すのはなぜ?
(模範式で、このように同じ式を繰り返す構文があまり無いように思えたのです。)

・参考となる他所のページがあれば教えて下さい。
・素人です。お手柔らかにお願いします。

(エクセル2003)

Aベストアンサー

1.ISNAってそもそもなんでしょう?
ISで始まる情報関数の一つで、#N/A!エラーのみを判定する関数
結果はTRUE(真),FALSE(偽)のいずれかになります。
エラー判定のIS関数には他に
ISERR:#N/A!を除くすべてのエラーを判定する関数
ISERROR:すべてのエラーを判定する関数
があります。

2.同じ式を繰り返すのはなぜ?
ISNAの判定する値がセルでなく数式の結果だからです。
A2=VLOOKUP($A1,sheet2!$A$1:$B$12,2,FALSE)
なら
A3=IF(ISNA(A2),"",A2)
ということになります。A2のように計算の為のセルを省略する為に
=IF(ISNA(数式),"",数式)のように同じ数式を2回繰り返しになってます。

QエクセルIF関数について

エクセルIF関数について

A2セルにA1セルが空白なら空白。8:00ならば、8:00。8:00>ならA3セルに(そのままの値を)表示せよ。
という関数を入れたいのですが、どの関数をどのように定義すれば良いのかわかりません。

IF関数かな?と思ったのですが、IF関数で偽のときは、「別のセルに入力せよ」などというような定義って出来るのでしょうか?

どなたか教えてください。

Aベストアンサー

関数では別のセルに値を代入する事はできませんので以下の方法になりますが如何でしょうか。
A2に=IF(A1="8:00"*1,A1,"")
A3に=IF(A1>"8:00"*1,A1,"")
因みにA2:A3は、セルの書式設定→表示形式で「時刻」から選択して下さい。

Q"$B$32:$H$32,$K$32:$N$32,$P$32:$AH$32" を変数に置き換えたい

こんにちは。よろしくお願いします。いつもgooの皆さんには大変お世話になっています。
エクセルは2013です。どなたか教えてください。

質問内容
Wクリックの範囲指定が現状はこのようになっています
If Not Intersect(Target, Range("$B$32:$H$32,$K$32:$N$32,$P$32:$AH$32")) Is Nothing Then

行を指定する32を
Dim shg as long
shg=32
とした場合、上記の範囲指定を & と変数 shg でつなげていくと、あまりにも長くなってしまいます
もっとスマートな書き方はないでしょうか

Aベストアンサー

If Not Intersect(Target, Rows(shg), Range("$B:$H, $K:$N, $P:$AH")) Is Nothing Then

Qエクセル IF関数で質問です。

エクセル IF関数で質問です。

教えてください。下記の式はどういう意味ですか?
=IF(I38=0,"",SUM(C38:I38)/$B$38)

なかなかIF関数が覚えられません。簡単に理解できる方法はありませんか?

IFを入力するときにみなさんはどうイメージしてますか?

アドバイスください。

Aベストアンサー

>なかなかIF関数が覚えられません。

恐らく、IF 関数だけの問題ではありません。一つひとつの基礎知識の積み重ねです。この回答文を最後まで読んでみてください。

>簡単に理解できる方法はありませんか?

簡単な数式から超難解なものまで、様々なレベルがあります。お示しの数式は 2 つの関数を入れ子にしているので、最も単純な IF の使い方と比べれば、少しだけ難しくなっています。

>IFを入力するときにみなさんはどうイメージしてますか?

パソコンに最初に触れた頃は、どうだったでしょうね。今となっては、無意識です。

たまに複雑な数式を入力するときは、括弧の数が分かりづらいとかで、迷うというか時間がかかることもなくはないですが。難しくしようと思えば、幾らでも難しくなります。

基本的に私の場合は、Excel の「数式パレット」(fx ボタン)は使わずに数式をタイプすることを人にお勧めしています。数式パレットでは、数式が複雑になるほど入力しづらく、数式そのものに関する理解も進みにくいと考えているからです。「数式バー」などに直接タイプして入力していても、ヒントが適当にポップアップしてきたりします。インターネット上には、関数についての無数の情報もあります。いきなり難しい数式はムリでしょうが、だんだん色々なものを覚えていけばよいでしょう。


1.
セルに「数式」を入力するとき、先頭の「=」(今回の場合は IF の直前の「=」)は、「これから数式を記述しますよ」という Excel へのお知らせをしているのですが、それより後ろに「=」が出てくると、別な意味になります。「I38=0」のような等式あるいは不等式を「論理式」と呼んでいます。条件によっては、「I38>0」、「I38>=0」、「I38<0」、「I38<=0」、「I38<>0」が出てくることもあります。「>=」は「≧」の意味、「<>」は「≠」の意味です。

2.
論理式は、「論理値」を返します。Excel では「TRUE」、「FALSE」という 2 種類の論理値があります。I38 セルに 0 が入力されているか空白のとき、「I38=0」は TRUE に変化します。それ以外の場合は、FALSE になります。

3.
「"エクセル"」は、「エクセル」という「文字列」を数式中に混ぜるときの記述の仕方です。「""」は、「長さ 0 の文字列」です。これがセルに入力されていると、何も表示されないので見かけが空白のように見えます。私は空文字列と呼んでいることが多いのですが、最善の短い呼称は未だに分かりません。空白の文字列と言う人もいますが、厳密には空白ではないので、各種分析において「""」の存在がデメリットになるケースもあります。

4.
「C38:I38」は、「C38 セルを左上の頂点とし、I38 を右下の頂点とする長方形の『セル範囲』への『参照』」を意味する記号です。つまり C38~I38 という 1 行 7 列の範囲を参照します。

5.
SUM は、合計する関数です。その「引数」(ひきすう)にセル参照を書くと、範囲内にある「数値」を全て合計します。上の範囲であれば、「C38 の値 + D38 の値 + … + I38 の値」という計算結果の値を返します。なお、(参照で登場する場合の)文字列は「0」として合計します。SUM に限ったことではありませんが、関数が返す値(SUM であれば合計)を数式の途中に引用する場合は、その直前に「=」を付けません。しかし IF などを絡めず単にセルに合計を表示させたい場合は、「=sum(c38:i38)」と入力します。大文字/小文字の別は、多くの場合、混ぜこぜに書いても大丈夫。

6.
「/」は、数学における分数であり、「÷」でもあります。Excel ではいつも「/」と書きます。「*」は、「×」(掛け算)の意味です。「10^6」は、「10 の 6 乗」の意味です。

7.
「$B$38」は「絶対参照」、「B38」だと「相対参照」です。この違いは、参照が使われている数式(ご質問の IF の数式など)が入力されているセルを別の場所にコピペしてみるとよく分かります。貼り付けたセルの数式を見ると、相対参照では、「B」という「列番号」と「38」という「行番号」が別のものに書き換わっています。別のものというのは、参照元と参照先の相対的な位置関係を保持した番号になるということ。つまり、2 行下で 3 列右などといった、元の位置関係のことです。絶対参照では番号が書き換わらず、「$B$38」のまま固定されています。「B$38」とすると「$38」の部分のみ固定、「$B38」とすると「$B」の部分のみ固定となり、残りは書き換わります。ですから「$」は、数式をコピーするときに必要となる記号と考えればよいでしょう。コピーの中には、「オートフィル」も含まれますね。ドラッグやダブルクリックで多数のセルを埋める、あの機能です。

8.
IF は、二者択一の場合分けをする関数。第 1 引数が TRUE または非ゼロの数値であれば、第 2 引数を返します。第 1 引数が FALSE またはゼロという数値であれば、第 3 引数を返します。第 1 引数が文字列であれば、「#VALUE!」という「エラー値」を返します。

以下は、例を示します。各数式を Excel の数式バーに貼り付けるか、セルをダブルクリックして貼り付けて、結果を確かめてみてください。二つに一つの結果を選んでいるだけのことなので、実は簡単ですね?

=if(false,"エクセル","ワード")
=if(-1.2,"エクセル","ワード")
=if(0,"エクセル","ワード")
=if(,"エクセル","ワード")  ……「0」の省略

A1、B1 セルに入力されている値によって結果が変わる
=if(a1-b1,"エクセル","ワード")
=if(a1-b1>0,"エクセル","ワード")
=if(a1-b1>0,12,-0.3)
=if(a1-b1>0,a1-b1,a1)
=if(a1-b1>0,sum(a1:b1),sum(a1:b1)^2)
=a1+if(b1>0,b1,0)

>なかなかIF関数が覚えられません。

恐らく、IF 関数だけの問題ではありません。一つひとつの基礎知識の積み重ねです。この回答文を最後まで読んでみてください。

>簡単に理解できる方法はありませんか?

簡単な数式から超難解なものまで、様々なレベルがあります。お示しの数式は 2 つの関数を入れ子にしているので、最も単純な IF の使い方と比べれば、少しだけ難しくなっています。

>IFを入力するときにみなさんはどうイメージしてますか?

パソコンに最初に触れた頃は、どうだったでしょうね。今となっ...続きを読む

QエクセルでA列の数値にB列以降の列の数値を乗じて各列の最終行に合計を出したい

エクセルで集計をしたいのです。
うまく説明できませんが教えてください。
列数が100列以上ある集計表です

A列の1~20行の固定した数値にB列~100列以上の1~20行の各列の数値を乗じてそれぞれの列の合計をそれぞれの列の21行目に出したいのですがどうしたらいいか教えてください。

Aベストアンサー

B21に
=SUMPRODUCT($A$1:$A$20,B1:B20)
とします。後は横にコピーします。


人気Q&Aランキング

おすすめ情報