標記の作業をしておりますが、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エクセルの質問です。例えばA1の数値が7.0%、B2の数値がA1の数値

エクセルの質問です。例えばA1の数値が7.0%、B2の数値がA1の数値+1.3%~-3.0%のにときには○をC1に表示、その数値条件+1.3%~-3.0%以外ならC1に×を表示させたいのです。
教えて下さい。
よろしくお願いします。

Aベストアンサー

C1=IF(AND(B2-A1<=1.3%,B2-A1>=-3%),"○1","×")

QYes・Noで表示するメッセージで、Yesの場合はコードを実行するので

Yes・Noで表示するメッセージで、Yesの場合はコードを実行するのですが、
Noの場合にも「完了」が最後に表示されてしまいます。
Noの場合は何もなく終了したいのですが、どのようにしたらいいでしょうか?


Sub test()

Dim i As Long, r As Long
Dim SH As Worksheet
Dim ans As Integer


Set SH = Sheets("シート")
ans = MsgBox("入力年月日、入力担当は正しいですか?", vbYesNo)
If ans = vbYes Then

実行コードfor ~Next

  End If


MsgBox "完了"

End Sub

Aベストアンサー

MsgBox "完了" をIf文の最後に入れる


If ans = vbYes Then

実行コードfor ~Next

MsgBox "完了"
End If

QExcelで2つ1組の数値の内、1つの数値を別の数値とセットにする方法

①のシートのA列に型番、B列にシリアルが入っており、②のシートのA列に型番のみが入っています。
①と②の型番は完全一致しているものもあれば、型番の末尾が途切れてしまい完全一致しないものもありますし、数文字しか一致しないものもあります。
②の型番の隣に①のシリアルを入れたいのですが、何かうまく関数を使えば簡単にできるでしょうか?

型番をそれぞれ昇順にして貼り付けようとしたのですが、①と②の型番が完全一致ではないため、同じ並びにならず、そのまま貼り付けることができません。
何かいい方法があれば教えて下さい。
宜しくお願い致します。

例】
①シート
A列 B列
ABC 1234
PQR 2345
STU 5678
XYZ 1209
②シート
A列 B列
TU
XYS
PQR
BC

分かりづらかったらすみません。。。
宜しくお願い致します。

Aベストアンサー

部分的に重複しているような型番もあるのでしょうか?
ABCとABDという型番があり、②に欠けたABという型番があった場合、ABCかABDか判断する方法が無いと思います。
また、②のXYSというのはXYZが間違えて?入力されているような場合を想定していると思われますが、それもどの程度の一致で判断するのでしょう?
②にXYSとあって、①にXYZとEYSが存在した場合、どちらと判定すればよいか分からないと思います。

何らかの判断基準を決めたとして、
まずVLOOKUPで完全一致を探し、一致したもののシリアルを取得します。
フィルタを使い、エラー表示のものだけ表示し、式の内容を変更します。

判断基準の優先度が高いものから順に試します。
場合によっては①のA列とB列の間に列を挿入し、判定用の補助セルとして使います。
例えば、前から5文字一致したら同一とみなす。とした場合、
VLOOKUPとLEFTにより、左から5文字抽出したものが一致した場合にシリアルを取得します。
先ほど同様にフィルタでエラーのものだけ表示させ、また別の条件の式を入力します。

例えば今度は右から5文字一致したら、とかでしょうか。
あるいは②の文字が欠けているとして、②の全てを含むセル。という条件もあるでしょう。
この場合SUMPRODUCTやFIND、INDIRECT、ROW等を使い、一致するものがある列の行番号を取得する必要があると思われます。

データの数にもよりますが、残り少なくなれば判定式を考えるより目で見た方が早いかもしれません。

自分が思いついたのはこの程度です。
人間が条件を指定してあげないと機械も判別できないですよ。
もっと上手いやり方もあるかもしれないので、他の回答者に期待。

部分的に重複しているような型番もあるのでしょうか?
ABCとABDという型番があり、②に欠けたABという型番があった場合、ABCかABDか判断する方法が無いと思います。
また、②のXYSというのはXYZが間違えて?入力されているような場合を想定していると思われますが、それもどの程度の一致で判断するのでしょう?
②にXYSとあって、①にXYZとEYSが存在した場合、どちらと判定すればよいか分からないと思います。

何らかの判断基準を決めたとして、
まずVLOOKUPで完全一致を探し、一致したもののシリアルを取得します。
...続きを読む

Qso get at me when you can stay up love to here from you

サイトでメッセージをもらいました。でも意味がわかりません。この方はなんといっているのですか?
i am looking for someone to chatt with i would love to come over there but it would be nice to know someone over there would love to here from you soon if i may ask this of you.so get at me when you can stay up love to here from you

自分なりにやると、私はチャットをやる人を探しています。私は遠いけど・・・・
すみませんが教えてください

Aベストアンサー

これは解読ですね。暗号文みたいですが ちょっと省いた部分を補うとわかりますよ。

i am looking for someone to chatt with (me). i would love to come over there but it would be nice to know someone over there. (I) would love to here(hear) from you soon if i may ask this of you.so get at me when you can stay up. i would love to here(hear) from you.

「私はチャット相手を探しています。近くへ行けたら良いのですが(そちらへ行きたいですが)遠くにいる人と知り合うのも楽しいことです。あなたに(チャットをしてくれと)お願いしたらすぐにお返事をくださると嬉しいです。起きていることが出来る時(時差があるからでしょうか)私に連絡してください。あなたからのお便り(メール)を待っています」

こんなところでしょうか。
「近くに行けたら良いのですが」のところは 考え方によっては「近くにいて会える相手を見つけられたらよいのですが」という意味にもとれますね。

しかし・・・この人とチャットすると タイヘンそうですね。

ご参考までに。

これは解読ですね。暗号文みたいですが ちょっと省いた部分を補うとわかりますよ。

i am looking for someone to chatt with (me). i would love to come over there but it would be nice to know someone over there. (I) would love to here(hear) from you soon if i may ask this of you.so get at me when you can stay up. i would love to here(hear) from you.

「私はチャット相手を探しています。近くへ行けたら良いのですが(そちらへ行きたいですが)遠くにいる人と知り合うのも楽しいことで...続きを読む

Qエクセルで指定した数値より大きい数値のみを表示したいのです。たとへば1

エクセルで指定した数値より大きい数値のみを表示したいのです。たとへば1日の拘束時間を計算して、9時間以上のみを表示。9時間以下の場合は表示されないようにしたいのですが、宜しくお願いします。

Aベストアンサー

一番分かりやすいと思われるのは、
時間を数値に変換せずセルの書式を時間にしておきます。

A1のセルに9:00(指定した数値)
B1のセルに実際の1日の拘束時間

を入力しC1に以下の時間を入れます。
=IF(A1<B1,B1,"")

C1にはB1がA1よりも大きい場合のみ表示されます

Q週の労働時間を計算するエクセル

現在、週あたりの労働時間を計算する表を作ろうとしています。

日曜日を起算日とし、1週間の労働時間を計算しているため
図のように土曜日の横の欄にその週の日曜日~土曜日までの合計の労働時間を表示するようにしています。
1週目と5週目は端数週となるので単純にその週の労働時間を合算しています。
そのため下記計算式を用いています。

V13以降のV列に入力されている式

=IF(B13="土",SUM($U$13:U13),0)


しかしこれでは月によって日数も曜日もちがってくるため、いまの計算式ですと
次の月にはめちゃくちゃになってしまいます。

OFFSET関数などを式に組み込むのではないだろうかということを
ぼんやりと認識してはいるのですが、どのようにすれば
毎月の計算を自動的に行えるようになりますでしょうか。

ご回答の程、よろしくお願いいたします。

Aベストアンサー

本件、土曜日のほかに月末日も週労働時間を表示しますので、
A列の日付が何年何月のものかを知る必要があります。
その為、一か所、月初日をどこかに記述しておきます。(例 2016/8/1)
添付の例では、W12に書きましたので、関数で参照時"$W$12"で参照します。
もし、ほかの箇所に書いた場合は、適宜、変更してください。

日の列はA13へ
=IF(MONTH($W$12)=MONTH($W$12+ROW()-13),DAY($W$12+ROW()-13),"")
と設定します。
更にオートフィルでA43までコピーします。
これで、31日までの日をもたない月の場合、存在しない日付は空白になります。

曜日の列はB13へ
=IF(A13="","",TEXT($W$12+A13-1,"aaa"))
と設定し、更にオートフィルでB43までコピーします。

週労働時間はV13へ
=IF(OR(B13="土",A13=DAY(EOMONTH($W$12,0))),SUM(INDIRECT("U"&(IF(A13<7,0,A13-WEEKDAY($W$12+A13-1))+13)):U13),"")
と設定し、更にオートフィルでV43までコピーします。

これで、完了です。
W12の月初日を変えることにより、適切に変わることを確認してください。

V13の設定の考え方を簡単に補足しますと
表示対象は、土は月末日の為、OR(B13="土",A13=DAY(EOMONTH($W$12,0)))
が真の場合、表示し、偽の場合は空白 となります。
SUMをとる範囲は、XXから該当セルまでとなります。
XXは、7日未満なら1日から(後で13を加算するので0開始とします)
①土曜日なら該当セルの日-7となります。(7はWEEKDAY関数で取得可能)
②月末日なら該当セルのWEEKDAYを該当セルの日から引きます。
従って①②はともに 該当セルの日ーWEEKDAY(該当セルの日付)となります。
該当セルの日付は、$W$12+A13-1で求められます。
従って XX=A13-WEEKDAY($W$12+A13-1)) となります。
結局、集計開始のセルは
"U"+XX+13 で与えられます。この式を直接書くと単なる文字列なので
INDIRECT()で関節参照指定を行い、セルの位置であることを明示します。

本件、土曜日のほかに月末日も週労働時間を表示しますので、
A列の日付が何年何月のものかを知る必要があります。
その為、一か所、月初日をどこかに記述しておきます。(例 2016/8/1)
添付の例では、W12に書きましたので、関数で参照時"$W$12"で参照します。
もし、ほかの箇所に書いた場合は、適宜、変更してください。

日の列はA13へ
=IF(MONTH($W$12)=MONTH($W$12+ROW()-13),DAY($W$12+ROW()-13),"")
と設定します。
更にオートフィルでA43までコピーします。
これで、31日までの日をもたない月の場合、存在...続きを読む

Qエクセル任意の数値に近い数値を表示したいです。 例えば、小数点第一の数値が63.2であれば63.0。

エクセル任意の数値に近い数値を表示したいです。
例えば、小数点第一の数値が63.2であれば63.0。36.4であれば36.5といった具合です。

Aベストアンサー

バージョン問わないで正の数のみ扱いA1セルに元の値があるなら「=INT(A1*2+0.5)/2」でいいかも。

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

エクセルIF関数について

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

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

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

Aベストアンサー

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

Qエクセルで桁数の分からない数値を右から1数値ずつ抜き出したい

エクセルで教えて下さい!!

桁数の分からない数値があります。
12345を他のセルに1数値づつ抜き出したい。
桁数が分かっていれば簡単なのですが…
桁数が分からない為その12345が入っていたセルには123456と6桁入る場合もあります。

RIGHTなら右から2文字とか3文字とか抜き出しますが…1つのセルに1つの数字を抜き出したいのです。
RIGHTなら1番右1文字は抜き出せても12345が入っている場合、2番目の4の数値を1文字だけ抜き出す事って不可能ですよね。(45を1つのセルに抜き出す事になります)

説明下手で申し訳ないですが(~_~;)分かれば教えて下さい宜しくお願いします!!ヽ(^o^)丿

Aベストアンサー

こんにちは~

> 桁数の分からない数値を右から1数値ずつ抜き出したい

「右から」ということは、たとえば A1セルに 123 と入っているとすれば、
B1が 3、C1が 2、D1が 1 となればいいのでしょうか?

そうだとして、A1に元の数値が入っているとすれば、
B1に
=IF(LEN($A1)<COLUMN(A1),"",LEFT(RIGHT($A1,COLUMN(A1)))*1)

または
=IF(LEN($A1)<COLUMN(A1),"",--LEFT(RIGHT($A1,COLUMN(A1))))

と入れて、必要なだけ右にフィルコピーしてください。
A1 に入る数値の最大桁数が 10桁だと思えば、K1セルまでコピー

★ COLUMN(A1) の A1は、元の数値がどのセルかに関係なく、必ず A1にしてください。


人気Q&Aランキング

おすすめ情報