【最大10000ポイント】当たる!!質問投稿キャンペーン!

A1   B1
7/31  8/29

↑このようにA1に月末日付をいれると、翌月の最終営業日(土日休みなので)を表示させたいです。
関数で可能でしょうか?
おわかりの方教えてくださーい!

A 回答 (4件)

=IF(MOD(EOMONTH(A1,1),7)>1,EOMONTH(A1,1),IF(MOD(EOMONTH(A1,1),7)=1,EOMONTH(A1,1)-2,EOMONTH(A1,1)-1))


ちなみに、セル A1 は「月末日付」である必要はなく、何日でも構いません。2008/7/1 であっても、上式は 2008/8/29 を返します。
    • good
    • 0
この回答へのお礼

ご親切にありがとうございました。

お礼日時:2008/07/24 14:23

ユーザー関数を作ると


標準モジュールに
Function matu(m)
For i = DateSerial(2008, m + 1, 1) - 1 To DateSerial(2008, m, 1) Step -1
If Not (Weekday(i) = 1 Or Weekday(i) = 7) Then
matu = i
Exit Function
End If
Next i
End Function
ーーーー
例データ
A列は当月月数を入れる場合
A列   B列
12008/1/31
22008/2/29
32008/3/31
42008/4/30
52008/5/30
62008/6/30
72008/7/31
82008/8/29
92008/9/30
102008/10/31
112008/11/28
122008/12/31
B1には=matu(A1)
と入れて下方向に式を複写。
ーーー
前月中の日付を入れるなら
A列    B列
2008/1/23 2008/2/29
2008/2/24 2008/3/31
2008/3/25 2008/4/30
2008/4/26 2008/5/30
2008/5/27 2008/6/30
2008/6/28 2008/7/31
2008/7/29 2008/8/29
B列は=matu2(A1)
標準モジュールのコードは
Function matu2(d)
m = Month(d)
m = m + 1
For i = DateSerial(2008, m + 1, 1) - 1 To DateSerial(2008, m, 1) Step -1
If Not (Weekday(i) = 1 Or Weekday(i) = 7) Then
matu2 = i
Exit Function
End If
Next i
End Function
に変える。
    • good
    • 0
この回答へのお礼

ご親切にありがとうございました。

お礼日時:2008/07/24 14:22

翌月の月末日付は


=DATE(YEAR(A1),MONTH(A1)+2,0)
で土、日の場合ずらすとなると
=DATE(YEAR(A1),MONTH(A1)+2,0)-MAX(WEEKDAY(DATE(YEAR(A1),MONTH(A1)+2,0),2)-5,0)
※現状では26日以降の休日は無いのでこれで対応できます。
または
=WORKDAY(DATE(YEAR(A1),MONTH(A1)+2,1),-1,休日の一覧)
※「ツール」「アドイン」「分析ツール」にチェックが必要です。
    • good
    • 0
この回答へのお礼

ご親切にありがとうございました。

お礼日時:2008/07/24 14:24

A1   B1


8/31  8/29
で?
=IF(WEEKDAY(A1)=1,A1-2,IF(WEEKDAY(A1)=7,A1-1,A1))
    • good
    • 1
この回答へのお礼

ご親切にありがとうございました。

お礼日時:2008/07/24 14:24

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

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

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

Qエクセル 関数 当月月末の直前営業日を日付で表示

関連の関数で下記までは調べられました。

月末の日付を表示  =EOMONTH(TODAY(),0)
土日祝を除く直前の営業日を表示 =WORKDAY(today(),+1,$D$1:$D$18)

当月月末で直前営業日を日付で表示したい場合の方法
どうぞよろしくお願いします。

Aベストアンサー

興味がある内容でしたので既に回答されているお二方の意見を参考に色々と確かめていておかしな点を発見しましたのでご報告まで。
(ひょっとしたら当然の内容なのかもしれませんが)

「直前営業日」を額面どおり月末日より前(月末日は含まない)営業日と捉えるのか、最終営業日と捉えるのかで式が変わってきてしまう。

ANo2さんの情報をもとに =WORKDAY(EOMONTH(TODAY(), 0), -1, $D$1:$D$18)
とすると、ANo2さんの回答どおり6/27が返る。

ここで、ANo1さんの言われている月末日も含めた「最終営業日」を求めようと
=WORKDAY(EOMONTH(TODAY(), 0), 0, $D$1:$D$18)
とすると6/30が返る。

これは一見正しいのだが、テストとして$D$1:$D$18の祭日リストに6/30を入れても、祝日をカウントせず6/30を返してしまう。
そこで =WORKDAY(EOMONTH(TODAY(), 0) + 1, -1, $D$1:$D$18) とすると
きちんと6/27日を返すようになる。

どうもWORKDAY関数は開始日当日を含める場合は日数に0を指定するのではなく、翌日から1日前(もしくは前日から1日後)としなければいけないようです。

興味がある内容でしたので既に回答されているお二方の意見を参考に色々と確かめていておかしな点を発見しましたのでご報告まで。
(ひょっとしたら当然の内容なのかもしれませんが)

「直前営業日」を額面どおり月末日より前(月末日は含まない)営業日と捉えるのか、最終営業日と捉えるのかで式が変わってきてしまう。

ANo2さんの情報をもとに =WORKDAY(EOMONTH(TODAY(), 0), -1, $D$1:$D$18)
とすると、ANo2さんの回答どおり6/27が返る。

ここで、ANo1さんの言われている月末日も含めた「最終営業日...続きを読む

Qエクセルで日付の入力で、土日祝を自動的に抜いて、営業日だけ表示したい

 経理の仕事で、営業日だけの入力を一括で表示できる方法はないでしょうか?
こんな感じです......。
 1月5日
 1月6日
 1月7日
 1月11日
つまり、土日と祭日を抜いた表示を自動一括表示したいのです。わざわざカレンダーとにらめっこしなくても、エクセルはおりこうさんだから、できてもいいのではないか?と思うのですが、ヘルプで質問しても、満足のいく回答がなかったので、何卒よろしくお願いいたします。 

Aベストアンサー

No.2です。

ちょっと補足。
祝日一覧には、本当の祝祭日に限らず営業日から省きたい任意の日付を入れても構いません。
(会社の創立記念日や夏季・冬季休暇など)
逆に振替休日などはちゃんと入れておく必要があります。

QエクセルのIF関数で、文字が入力されていたならば~

エクセルのIF関数で文字が入力されていたならば~、という論理式を組み立てたいと思っています。

=IF(A1="『どんな文字でも』","",+B1-C1)

A1セルに『どんな文字でも』入っていたならば、空白に。
文字が入っていなければB1セルからC1セルを引く、という状態です。

この『どんな文字でも』の部分に何を入れればいいのか教えてください。

またIF関数以外でも同様のことができれば構いません。

宜しくお願いします。

Aベストアンサー

=IF(ISTEXT(A1),"",B1-C1)

でどうでしょうか?

QExcel関数で指定した年月の月初と月末を表示させたい

いつもお世話になります。

表題の件ですが、下記例のように表示させたいと考えています。

例:2009/03/09 ← 指定
 ・月初:2009/03/01  ← 表示
 ・月末:2009/03/31  ← 表示

仮に指定した日付をA1として、どのような関数構成を
組み立てたらいいか、ご教授の程宜しくお願い致します。

Aベストアンサー

例えばA1に日付が入っているとして
月初であれば
=DATE(YEAR(A1),MONTH(A1),1)
月末であれば
=DATE(YEAR(A1),MONTH(A1)+1,1)-1
でどうでしょうか。

Qエクセルで特定の列にある日付データの中から、指定した日付範囲を抽出する方法を教えてください

例えばこんなデータなのですが、

2002/07/01 99 25 36
2002/07/05 55 33 25
2002/08/01 80 20 51

日付の入っている列を検索して、2002/07/01から2002/07/31
の範囲ならば、その行のデータを別のシートに抽出したいのですが、
日付の範囲は関数でどうすればよいのか分かりません。ACCESSなら
between 9999/99/99 and 9999/99/99って感じで簡単にできるの
ですが。。。エクセルの関数だとIF関数の論理式にAND関数を使って
>=2002/07/01
<=2002/07/31
と入力したので、2002/07/05ならば、いずれもTRUEなので、値を返して
くれると考えたのですが、なぜかダメでした。
(↓こういう入力をしました)
=IF(AND(Sheet2!A1>=2002/7/1,Sheet2!A1<=2002/7/31),Sheet2!A1,"該当月ありません")

Aベストアンサー

こんばんは!

=IF(AND(Sheet2!A1>=2002/7/1,Sheet2!A1<=2002/7/31),Sheet2!A1,"該当月ありません")

おしいですね(^^;
日付をそのまま入力してしまうと数式上では
 2002/7/31 → 2002÷7÷31 になってしまいます。
ダブルクォーテーションで括って(文字列)入力して
それを数値化しましょう!

=IF(AND(Sheet2!A1>="2002/7/1"*1,Sheet2!A1<="2002/7/31"*1),Sheet2!A1,"該当月ありません")

文字列 ="10" に対して 乗算 *1 としても数式が
なり立ち文字列の数字が数値化されます。="10"*1

------------余談--------------------------
ご質問の条件例の場合特例で 2002/7でればOKなので

=IF(TEXT(Sheet2!A1,"yyyym")="20027",Sheet2!A1,"該当月ありません")

でも可能ですね!

こんばんは!

=IF(AND(Sheet2!A1>=2002/7/1,Sheet2!A1<=2002/7/31),Sheet2!A1,"該当月ありません")

おしいですね(^^;
日付をそのまま入力してしまうと数式上では
 2002/7/31 → 2002÷7÷31 になってしまいます。
ダブルクォーテーションで括って(文字列)入力して
それを数値化しましょう!

=IF(AND(Sheet2!A1>="2002/7/1"*1,Sheet2!A1<="2002/7/31"*1),Sheet2!A1,"該当月ありません")

文字列 ="10" に対して 乗算 *1 としても数式が
なり立ち文字列の数字が数値化されます。="10"*1

--...続きを読む

QEXCEL VBAでWORKDAY関数を使用したい

こんにちは。

タイトルの通りなのですが
シート関数でのWORKDAY関数はうまく使用できるのですが
VBAで同じような処理をするにはどうすればいいでしょうか?

例えば、開始日→A1、日数→A2、休日→F1:F10の場合
A3にその値を表示させたい場合

Range("A3")=workday(A1,A2,F1:F10)

ではうまく行きません。


[ツール]-[アドイン]の分析ツールと分析ツール-VBAの
チェックは付いています。


宜しくお願いします。

Aベストアンサー

始めまして。回答いたします。

今回の関数(WorkDay)は、アドインの関数であるため以下のような方法で呼び出します。

Range("A3").Value = Application.Run("ATPVBAEN.XLA!WorkDay" , Range("A1").Value , Range("A2").Value , Range("F10").Value)

この方法は、VBAを実行するブック以外のブックに定義してあるマクロ(VBA)を呼び出すのと同じ方法です。

例:
FileA.xls 内に
Public Function Test(byref strValue as String) As String
という定義の関数があったとします。
それを
FileB.xls内で使用したいときには
strGet = Application.Run("FileA.xls!Test","strValue に与える値")
として実行すると「strGet」に関数「Test」の結果が戻ってきます。

※注意としては、FileA.xlsが同一のExcel内に開かれている必要があります。

つまり「WorkDay関数はアドインの『分析ツール-VBA』=『ATPVBAEN.XLA』内で定義してある関数」という捕らえ方で実行してやれば問題ありません。

始めまして。回答いたします。

今回の関数(WorkDay)は、アドインの関数であるため以下のような方法で呼び出します。

Range("A3").Value = Application.Run("ATPVBAEN.XLA!WorkDay" , Range("A1").Value , Range("A2").Value , Range("F10").Value)

この方法は、VBAを実行するブック以外のブックに定義してあるマクロ(VBA)を呼び出すのと同じ方法です。

例:
FileA.xls 内に
Public Function Test(byref strValue as String) As String
という定義の関数があったとします。
それを
FileB.xls...続きを読む

Qエクセルで、条件に一致した行を別のセルに抜き出す方法

エクセルで、指定した条件に一致するセルを含む行をすべて抜き出す方法が知りたいです。

たとえば、

<A列> <B列> <C列>
7/1 りんご 100円
7/2 ぶどう 200円
7/2 すいか 300円
7/3 みかん 100円

このような表があって、100円を含む行をそのままの形で、
別のセル(同じシート内)に抜き出したいのですが。

7/1 りんご 100円
7/3 みかん 100円

抽出するだけならオートフィルターでもできますが、
抽出結果を自動的に、別の場所に、常に表示させておきたいのです。

初歩的な質問だと思いますが、検索しても分からなかったので、よろしくお願いします。

Aベストアンサー

同じ質問が結構よく出てますが、そんなに初歩的でもありません
別シートのA1セルに「100円」と入力し、そのシートの任意のセルに以下の式を貼り付けて下さい。後は、下方向、右方向にコピー。
日付のセル書式は「日付」形式に再設定してください

=IF(COUNTIF(Sheet1!$C:$C,$A$1)>=ROW(A1),INDEX(Sheet1!A:A,LARGE(INDEX((Sheet1!$C$1:$C$500=$A$1)*ROW(Sheet1!$C$1:$C$500),),COUNTIF(Sheet1!$C:$C,$A$1)-ROW(A1)+1)),"")

データ範囲は500行までとしていますが、必要に応じて変更して下さい

QExcelによる土日と祝祭日の算出関数

役所でExcelを人並みに使っていると思いますが,最近になって色々と関数を駆使しようと思いついたのが,Excelによる土日と祝祭日の算出関数です。色々と試みてみたのですが,全く×です。セルに対してどのようにすればいいのかヨロシクご教授ください。

Aベストアンサー

>Excelによる土日と祝祭日の算出関数です
質問の意味が2つに取れる(算出?)
(1)ある日を考えて土か日か祝日か判定する場合
   =WEEKDAY("2004/12/15")か=WEEKDAY(A1)のように
  聞いて
   土  7
   日  1
  かどうかで判る。コードの表現種類に他2種類ありま  す。
  祝日は各国固有で日本は年により移動するので、関数
  がなく、関数では判定できない。ユーザー関数を作る
  よりほかない。万年向けのものは難しそう。
(2)ある期間を考えて、土日祝日を除いて、それ以外が
  何日あるかを算出する関数
   NETWORKDAYS関数があります。
   NET(正味の)のWORKDAYの意味でNET   WORKのDAYではない。最後のSを落とさない   ように。
  ただし祝祭日は関数内に手入力で指定する。
  例えば=NETWORKDAYS("2004/12/15","2004/12/25",{"2004/12/23"})で7と出ました。
土日と祝祭日と重なっていてもOK。
「アドイン」関数なので、エラーが出る場合は組みこむ必要があります。
あとWORKDAY、DATEDIFを使えれば、日付関係はほぼ全てでしょう。

  
  

>Excelによる土日と祝祭日の算出関数です
質問の意味が2つに取れる(算出?)
(1)ある日を考えて土か日か祝日か判定する場合
   =WEEKDAY("2004/12/15")か=WEEKDAY(A1)のように
  聞いて
   土  7
   日  1
  かどうかで判る。コードの表現種類に他2種類ありま  す。
  祝日は各国固有で日本は年により移動するので、関数
  がなく、関数では判定できない。ユーザー関数を作る
  よりほかない。万年向けのものは難しそう。
(2)ある期間を考えて、土日祝日を除いて...続きを読む

QEXCEL VBA で現在開いているブックのファイル名を取得する方法

EXCEL2003 VBAで業務を簡素化するために、現在開いているブックのファイル名を取得する方法が分かりません。
作業手順をマクロを使って処理していますが、オリジナルのワークブックをファイル名を変えて保存し、以後、このワークブックを読み込んで使用しています。
このときのVBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり、以後の業務に使用できません。
常にファイル名を取得出来るVBAをどなたか、教えて下さい。

Aベストアンサー

>現在開いているブックのファイル名
 ちょっと曖昧な表現かなぁという気もいたしますが、VBAが書いてあるブックのブック名は
ThisWorkbook.Name
で、現在 "アクティブにして" 操作対象になっているブックの名前は
ActiveWorkbook.Name
ですね。

 しかし、
>VBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり
というような文脈からすると、
ThisWorkbook.Name
の方ですかね。

QEXCELで日付と時刻が入ったセルを日付だけ取り出したい

(例)

 2005/9/10 13:10:23

が入ったセルが有ります、使いたいのは日付だけ
 なんですが、どうすればできるのか?

 ※結果は別のセルに成っても良いし、元のセルでも可

 宜しくご教授お願いします。

Aベストアンサー

私も単に書式を変えるだけでいいと思いますが、
時間部分のデータを削除したいということであれば、
時間部分は、小数データ部分なので、
=INT(A1)
とかしてやれば時間データをクリアすることができます。
その後書式の設定をしてやって下さい。


人気Q&Aランキング