出産前後の痔にはご注意!

(現在 TODAY() から見て、) 先月の年と月をそれぞれ関数で表すにはどうすればいいでしょうか。最終的には、2006-6という形にしたいのです。

もちろん、単純に1を引けば、2007年1月の前の月で問題が出ますし、30 (or 31) 日を引けば、2007年3月1日の前の月が2007年1月になってしまったりします。お願いします。

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

A 回答 (10件)

#01です。

無理矢理でいいなら

=TEXT(DATE(YEAR(TODAY()),MONTH(TODAY()),1)-1,"yyyy") & "-" & TEXT(DATE(YEAR(TODAY()),MONTH(TODAY()),1)-1,"m")
    • good
    • 1
この回答へのお礼

できました。(^^)
ありがとうございました。

お礼日時:2006/07/11 09:12

>単純に1を引けば、2007年1月の前の月で問題が出ますし、30 (or 31) 日を引けば、2007年3月1日の前の月が2007年1月になってしまったりします。


そうですかね。
2007/7/12007/6/12007-6
2007/7/212007/6/12007-6
2007/12/232007/11/12007-11
2007/1/212006/12/12006-12
2007/3/12007/2/12007-2
2007/2/282007/1/12007-1
2007/4/12007/3/12007-3
B列は
=DATE(YEAR(A1),MONTH(A1)-1,1)
C列は
=TEXT(B1,"yyyy-m")
もちろんB列とC列の関数式を組み合わせることはできます。
>書式ではなく、データを2006-6という形にはできないものでしょうか
値を自分自身のセルに複写すればどうでしょう。
それ以上ならさっき別の質問にもあったが、VBAを使うことになりそう。
    • good
    • 0
この回答へのお礼

いろいろと勉強になりました。
ありがとうございました。(^^)

お礼日時:2006/07/11 09:44

=TODAY()-DAY(TODAY())


書式「yyyy-m」
    • good
    • 4
この回答へのお礼

簡単な式で表現できますね。
ありがとうございました。(^^)

お礼日時:2006/07/11 09:39

today()がA1に有るとして、


=TEXT(EDATE(A1,-1),"yyyy-m")
で、OK
    • good
    • 3
この回答へのお礼

EDATEなんて関数、知りませんでした。
勉強になりました。
ありがとうございました。

お礼日時:2006/07/11 09:38

zap35 さんの答えを応用すればどうでしょう?



1.Year()関数を使用して一月前の年を出す。
2.Month()関数を使用して一月前の月を出す。
3.それを「=Year(一月前を求める処理)&"-"&Month(一月前を求める処理)」の様にして引っ付ける。

これで文字列とマッチングしたら大丈夫だと思われます。
# ありゃ、入れ違いになった。
    • good
    • 0
この回答へのお礼

これでできました。
ありがとうございました。(^^)

お礼日時:2006/07/11 09:38

=today()のセルをa1として


=date(year(a1),month(a1)-1,1)で
このセルの書式をユーザー定義でyyyy"-"mと指定して下さい
これで如何でしょうか?
    • good
    • 0
この回答へのお礼

実にシンプルにできますね。
ありがとうございました。(^^)

お礼日時:2006/07/11 09:37

次の方法は如何でしょうか。


=TEXT(DATE(TODAY(),MONTH(TODAY(),-1),"yyyy-m")
    • good
    • 0
この回答へのお礼

残念ながら、エラーが出てしまいました。
でもありがとうございました。

お礼日時:2006/07/11 09:13

=TEXT(TODAY()-DAY(TODAY()),"yyyy-m")


では如何でしょうか?
=TODAY()-DAY(TODAY())
で前月の末日になります。上記はそれを書式付文字列として変換するものです。
    • good
    • 2
この回答へのお礼

こういう発想もあるのですね。ありがとうございました。

お礼日時:2006/07/11 09:09

ヘルプから「日付を加算する 」を確認ください。


それを参考に先月を求めます。

その後書式設定にて「2006-6」のような形へ変更すればよろしいのではないでしょうか。
    • good
    • 0
この回答へのお礼

ヘルプにも詳しく書かれていますね。ありがとうございました。

お礼日時:2006/07/11 09:05

=DATE(YEAR(TODAY()),MONTH(TODAY()),1)-1


(当月の一日から1を引くと、前月の末尾)

この書式を yyyy-m にするととりあえずできます
 
    • good
    • 0
この回答へのお礼

ありがとうございます。
書式ではなく、データを2006-6という形にはできないものでしょうか。
このデータを他のデータとMATCHさせたいのですが、書式だけそうなっていてもMATCHしてくれません。。。

お礼日時:2006/07/10 16:46

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

このQ&Aを見た人はこんなQ&Aも見ています

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

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

QVBAで先月、先々月を求める方法

Excel マクロで 先月、先々月を求め

「3月」「4月」(今月は5月)

と表示させたいのですが、どのようにして
求めたらよいのでしょうか?

Aベストアンサー

Sub test01()
sg = DateSerial(Year(Date), Month(Date), 0)
ssg = DateSerial(Year(Date), Month(Date) - 1, 0)
MsgBox "先月は" & Month(sg) & "月、先々月は" & Month(ssg) & "月"
End Sub

では?

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エクセルのIF関数で、文字が入力されていたならば~

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

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

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

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

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

宜しくお願いします。

Aベストアンサー

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

でどうでしょうか?

Q各セルに、翌月、前月、翌々月・・・当月を表示したい。

質問 です
セルE3に翌月を表示し、F3に前月を表示し、セルG3に翌々月を表示し、セルH3以降はO3まで一月ずつ加算し、セルP3は当月を表示する方法を教えてください。(セルE3からP3までのセルの表示を「日付」にし、それぞれに関数を入れれば済みますか。そうでしたら、その関数を教えてください。VBAが必要でしたら、その部分を教えてください。)
月が替わる都度、自動で各セルも繰り上がるようにしたいのです。

例 です
今月が8月ですので、セルE3には『9月』と表示し(『』は表示しません)、セルF3には『7月』と表示し、G3には『10月』、H3には『11月』・・・O3には『6月』と表示し、P3には『8月』と表示させたいのです。
そして、日数が過ぎて9月に入った場合は、自動でセルE3には『10月』と表示させ、以降のセルも計算により繰り上がった月表示させたいのです。


状況と理由 です
エクセル2002を使用しています。
[データ]-[入力規則]-[リスト]を使用して、セルに簡単に入力できるようにしています。
そのセル(セルA3)に入るのは、月です。
リストはセルE3、F3、G3、H3・・・P3に入力しています。
現在は手入力でテキスト形式で入力しています。
頻繁に使うのは翌月と前月です。
リストを使うと、候補の一番上はセルE3に表示されているもので、その下にはセルF3に表示しているものが来ます。
そこで、常に自動で並べかえられるならば、便利だと思ったのです。


よろしくお願いします。

質問 です
セルE3に翌月を表示し、F3に前月を表示し、セルG3に翌々月を表示し、セルH3以降はO3まで一月ずつ加算し、セルP3は当月を表示する方法を教えてください。(セルE3からP3までのセルの表示を「日付」にし、それぞれに関数を入れれば済みますか。そうでしたら、その関数を教えてください。VBAが必要でしたら、その部分を教えてください。)
月が替わる都度、自動で各セルも繰り上がるようにしたいのです。

例 です
今月が8月ですので、セルE3には『9月』と表示し(『』は表示しません)、セルF3...続きを読む

Aベストアンサー

>そのセル(セルA3)に入るのは、月です。

 A  B  C  D  E   F  G  H ・・・O  P
8月         9月 7月 10月 11月  6月 8月
E3 =TEXT(DATE(YEAR(TODAY()),MONTH(TODAY())+1,1),"m月")
F3 =TEXT(DATE(YEAR(TODAY()),MONTH(TODAY())-1,1),"m月")
G3 =TEXT(DATE(YEAR(TODAY()),MONTH(TODAY())+COLUMN(B1),1),"m月")
O3まで右へコピィ
P3 =TEXT(DATE(YEAR(TODAY()),MONTH(TODAY()),1),"m月")

ででると思いますが
>頻繁に使うのは翌月と前月です。
なので複雑な順番にしていると思いますが、人が使うには順に並んでいるほうが良くないですか?
E3 =TEXT(DATE(YEAR(TODAY()),MONTH(TODAY())+COLUMN(A1)-2,1),"m月")
でPまで右へコピィで、先月から順になりますが。

>そのセル(セルA3)に入るのは、月です。

 A  B  C  D  E   F  G  H ・・・O  P
8月         9月 7月 10月 11月  6月 8月
E3 =TEXT(DATE(YEAR(TODAY()),MONTH(TODAY())+1,1),"m月")
F3 =TEXT(DATE(YEAR(TODAY()),MONTH(TODAY())-1,1),"m月")
G3 =TEXT(DATE(YEAR(TODAY()),MONTH(TODAY())+COLUMN(B1),1),"m月")
O3まで右へコピィ
P3 =TEXT(DATE(YEAR(TODAY()),MONTH(TODAY()),1),"m月")

ででると思いますが
>頻繁に使うのは翌月と前月です。
なので複雑な順番...続きを読む

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

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

Aベストアンサー

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

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

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行までとしていますが、必要に応じて変更して下さい

QExel VBA 別ブックから該当データを検索し、必要なデータを取得する方法について

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数ではなく、マクロで処理を希望します。

自分では、部品表の商品番号をコピーして、コード一覧表で検索し、検索結果の右隣のセル(B列のコード)の値を部品表のC列に貼り付ければよいかと思い、書いてみたんですが…

Sub 別ブックから貼り付ける()
  Dim 検索する As Long
Windows("部品表.xls").Activate
検索する = cells(i,2).Value
Windows("コード一覧表.xls").Activate
ActiveWindow.SmallScroll Down:=-3
Selection.AutoFilter Field:=3, Criteria1:="=検索する", Operator:= xlAnd

と、してみたものの、検索しても、その検索結果の隣のセルのコードをどうやって取得すればいいのかが、わかりませんでした。

基本事項は本で学びましたが、呪文のようなコードはよく理解できません。懸命にネットで検索して、訳して理解する努力をしてはいますが。

どうぞよろしくお願いします。

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数...続きを読む

Aベストアンサー

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks.Open("C:\★★\コード一覧表.xls") '★要変更★
 I = 2
 Do While Range("A" & I).Value <> ""
  ThisWorkbook.Worksheets("Sheet1").Range("C" & I).Value = Application.VLookup(ThisWorkbook.Worksheets("Sheet1").Range("B" & I).Value, xlBook.Worksheets("Sheet1").Range("A2:B65535"), 2, 0)
  I = I + 1
 Loop
 xlBook.Close
 Application.ScreenUpdating = True
 MsgBox ("完了")
End Sub

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks....続きを読む

Qある範囲のセルから任意の値を検索して、その隣のセルの値を取得するという関数はありますか?

Excelの関数について質問します。
ある範囲のせるを検索して、その隣のセルの値を取得するという関数を探しています。
なければユーザー定義で作りたいと思っています。
VLOOKUP関数では一番左端が検索されますが、
それをある範囲まで拡張して、
その右隣の値を取得できるようにしたいのです。
どうかお知恵をお貸しください。

Aベストアンサー

●X1セルの値を範囲A1:F200の中から探して、その右隣のセルの値を返す

 =OFFSET(A1,SUMPRODUCT(ROW(A1:F200)*(A1:F200=X1))-1,SUMPRODUCT(COLUMN(A1:F200)*(A1:F200=X1)))

※最初のA1はワークシートの左上隅を示すものなので、検索範囲に関わらずA1固定
※SUMPRODUCT(ROW(A1:F200)*(A1:F200=X1)) ⇒ A1:F200で値がX1と一致するセルの行番号

>その「ある範囲」の中には検索したい値が入っているセルは1つしかありません。
というのが前提です。複数のセルがHITすると関係ないセルの値が返るので、
場合によっては、IFをかぶせてCOUNTIFで確認した方が良いかもしれません。
 ex. =IF(COUNTIF(A1:F200,X1)=1,【上記数式】,"えらー")

ちなみに、VBAでやるならこんな感じになるかと。

動作の概要
 【検査範囲】から【検査値】を探し、
 最初にHITしたセルについて、右隣のセルの値を返す。
 ex. =Sample(X1,A1:F200)

'--------------------------↓ココカラ↓--------------------------
Function Sample(ByVal 検査値 As Variant,ByVal 検査範囲 As Range)
 For Each セル In 検査範囲
  If セル = 検査値 Then Exit For
 Next セル
 Sample = セル.Offset(0, 1)
End Function
'--------------------------↑ココマデ↑--------------------------

いずれもExcel2003で動作確認済。
以上ご参考まで。

●X1セルの値を範囲A1:F200の中から探して、その右隣のセルの値を返す

 =OFFSET(A1,SUMPRODUCT(ROW(A1:F200)*(A1:F200=X1))-1,SUMPRODUCT(COLUMN(A1:F200)*(A1:F200=X1)))

※最初のA1はワークシートの左上隅を示すものなので、検索範囲に関わらずA1固定
※SUMPRODUCT(ROW(A1:F200)*(A1:F200=X1)) ⇒ A1:F200で値がX1と一致するセルの行番号

>その「ある範囲」の中には検索したい値が入っているセルは1つしかありません。
というのが前提です。複数のセルがHITすると関係ないセルの値が返るので、
場...続きを読む

Qエクセルで条件に一致したセルの隣のセルを取得したい

下のような「得点」という名前のシートがあります。
(「田中」のセルがA1です。)

 [ 田中 ][ 10 ][ 200 ]
 [ 山田 ][ 21 ][ 150 ]
 [ 佐藤 ][ 76 ][ 250 ]
 [ 鈴木 ][ 53 ][ 350 ]

別のシートのA1セルに、「佐藤」と入力すると、

 [ 佐藤 ]

「得点」シートから「佐藤」の列を見つけて、B1、C1に

 [ 佐藤 ][ 76 ][ 250 ]

のように表示させたいのですが、B1、C1にはどのような式を書けば良いのでしょうか。
「得点」シートでは氏名が重複する事はありません。
IF文を使うと思うのですが、いまいち良く分かりませんでした。

よろしくおねがい致します。

Aベストアンサー

こんにちは!
VLOOKUP関数で対応できます。
IF関数と併用すればエラー処理が可能です。

Excel2007以降のバージョンであれば
B1セルに
=IFERROR(VLOOKUP($A1,得点!$A:$C,COLUMN(B1),0),"")
としてC1セルまでオートフィルでコピー!
そのまま下へコピーすると行が2行目以降でも対応できます。

Excel2003までの場合は
=IF($A1="","",VLOOKUP($A1,得点!$A:$C,COLUMN(B1),0))

としてみてください、m(_ _)m

QSUMIFS関数でOR条件を使いたい場合の関数

Excel2010を使用しています。
家計簿を作成しているのですが、SUMIFS関数でOR条件を使用したい場合どのように書けばよいでしょうか。

図は、明細と合計欄です。
ピンクのセルが円、それ以外はドルです。
合計欄のように、円とドルをそれぞれ分けて項目毎の合計額を出したいです。
セルE21のように、円の場合は「MUFJ」「ゆうちょ」ですので、MUFJとゆうちょのSUMIFS関数合計値を足しています。
これを、1行にまとめたいのですが、適切な関数はないでしょうか?
SUMIFSではOR条件が使えないようですので・・・・・・

明細行に円・ドルの列を追加すれば簡単なのですが、明細行の列はこれ以上増やしたくないので、できれば数式のほうで処理できればと思っています。

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

Aベストアンサー

例示のデータなら以下のような数式になります。

=SUM(SUMIFS($C$2:$C$14,$D$2:$D$14,{"MUFJ","ゆうちょ"},$B$2:$B$14,B21))


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング