• ベストアンサー

ExcelVBAで201411表示を1月ずつ増加

A1セルに「ああああ201411」と入力してあるとします。これをVBAを実行すると「ああああ201412」、「ああああ201501」と1月ごとに増えるようにしていきたいのですが、シリアル値になってしまったりしてなんかうまくいきません。 どうすればよいでしょうか?VBAのみでなく、セルの書式設定も必要があれば合わせて設定するやり方でも大丈夫です。 また、変数の型は文字が混じっているので日付型(Date)でなくString型でよいですか?

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.1

シリアル値を取り出して日付加算していきます。 sub macro1() dim s0 as string s0 = "ああああ" ’文字列が可変ならA1の値から取り出す事 range("A1") = s0 & format(dateadd("M", 1, format(right(range("A1").value, 6),"0-00")), "yyyymm") end sub みたいな。

hinoki24
質問者

お礼

どうもありがとうございます。お手数をおかけしました。

hinoki24
質問者

補足

思った通りの動作をしました。ありがとうございます。 ちなみに、年を増やそうとMをYに変えてみたのですが動作しませんでした。年を増やすのはまたやり方が微妙にちがうのでしょうか? また、0-00というのがありますがこれは何を表わすのでしょうか?適当に変えると動作しませんでした。 すいません、お願いします。

すると、全ての回答が全文表示されます。

その他の回答 (5)

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.6

ん? まだ続いてたんですか。 >年加算 sub macro2()  dim s0 as string  s0 = "ああああ" ’文字列が可変ならA1の値から取り出す事  range("A1") = s0 & format(dateadd("yyyy", 1, format(right(range("A1").value, 6),"0-00")), "yyyymm") end sub みたいな。 #ついでで追加質問するのは止めてください。元のご相談に回答してるのですから、それが解決したらそこで一回終えて、次の質問は次の新しいご相談として投稿してください。

hinoki24
質問者

お礼

ついつい疑問に思い追加質問お手数をおかけしてすいません、以後気をつけます。 今回もばっちりでした。単純にyyyyとする必要があっただけですね。 どうもありがとうございました。

すると、全ての回答が全文表示されます。
  • Chiquilin
  • ベストアンサー率30% (94/306)
回答No.5

> ブック名は「いいいい2014-11月.xlsm」とします。ここから、「ああああ201411」に > 変えることは可能でしょうか?無理ならやはりVBAかもしくはブック名を変えること > も検討します。 ="ああああ"&TEXT(REPLACE(LEFT(CELL("filename",G1),FIND("]",CELL("filename",G1))-7),1,FIND("[",CELL("filename",G1))+4,""),"yyyymm") これでどうでしょうか。 > 今の形でやるにしても 先に書いた数式の「+ROW(A1)-1」のところを > 「+1」にしてマクロに組み込めば 年越しにも対応しますよ。 については数式をそのまま使えばいいのではないかという意味です。 Range("A1") = "=""ああああ""&TEXT(DATE(2014,11+1,1),""yyyymm"")" Range("A1") = Range("A1") 例えばですけど。

hinoki24
質問者

お礼

関数の方はばっちりでした。どうもありがとうございます。 マクロの方は参考になりました。ありがとうございます。

すると、全ての回答が全文表示されます。
  • Chiquilin
  • ベストアンサー率30% (94/306)
回答No.4

> 翌月のファイルをボタンを押すと自動作成するようにつくっています。 その時 シート名に年月は入らないのですか? それなら シート名から拾えばそれも数式で済みますけど。 今の形でやるにしても 先に書いた数式の「+ROW(A1)-1」のところを 「+1」にしてマクロに組み込めば 年越しにも対応しますよ。

hinoki24
質問者

補足

シート名にはないですが、ブック名に年月があります。関数でする考えはありませんでした。そちらの方法で少しやってみたのですが、微妙に違っていて以下の関数でああああ2014-11というところまでは取得できましたが、ああああ201411にもっていくことができません。ブック名は「いいいい2014-11月.xlsm」とします。ここから、「ああああ201411」に変えることは可能でしょうか?無理ならやはりVBAかもしくはブック名を変えることも検討します。 ="ああああ"&MID(CELL("filename",G1),FIND("[",CELL("filename",G1))+5,FIND("]",CELL("filename",G1))-FIND("[",CELL("filename",G1))-11) あと、 > 今の形でやるにしても 先に書いた数式の「+ROW(A1)-1」のところを > 「+1」にしてマクロに組み込めば 年越しにも対応しますよ。 が理解が足りなくよく分かりませんでした。色々したのですが、構文エラーとかで駄目でした。私が勘違いしているんだと思います。例えば、TEXTはVBAではだめかなとか思いFormatにしたり、例えば、 Range("A1").Value = "ああああ"& Format(DATE(2014,11+ROW(A1)+1,1),"yyyymm") とか。まったく変な事をしているんだと思いますが、どういう事をおっしゃりたかったのでしょうか? 理解が浅くてたびたびお手数をかけすいません。

すると、全ての回答が全文表示されます。
回答No.3

こんにちは。 1回きりなら、このようにします。 ただし、1回きりなら関数式で十分でしょう。 '// Sub Test1() Dim r As Range Dim myDate0 As Variant Dim myDate As Variant With ActiveSheet  Set r = .Cells(Rows.Count, 1).End(xlUp) 'A列の最後尾   myDate0 = Right(r.Value, 6)   If myDate0 Like "######" Then    myDate = myDate0 & "01"    myDate = Format(myDate, "00/00/00") '日付形式に変更させる    If IsDate(myDate) Then '←日付かどうか調べる     myDate = CDate(myDate) + 31 '月なら31日を足す, 年なら365日を足す     r.Offset(1).Value = Replace(r.Value, myDate0, "") & Format$(myDate, "yyyyMM")     'その場のセルを換えるなら、r.Valueになります。    End If   End If End With  Set r = Nothing End Sub '// >日付型(Date)でなくString型 今回は、Date 型にはしません。Date型を扱う時は、最初からDate型にきまっている時だけです。 VBAでは、Date型は、予想もしない年月日になっていることがあります。 今回は、変数の型が変わりますから、Variant 型がよいのではないかと思います。 そして、処理できない時のことを考えて、IsDate(myDate) でチェックします。 #1の補足に関しては、私が言う筋合いではないかもしれませんが、 DateAdd に関しては、ヘルプで調べてください。 私は、この関数はあまり使いません。パラメータに文字型(M, yなど)を使うからです。 0-00に関しては、それぞれの人のやり方があるだけで、いわば裏ワザです。 オーソードックスに、Left, Mid で、それぞれ、年月を抜き出しても良いです。 だいぶ、VBAは遠ざかってしまいましたが、私なら、こんな風にします。 なお、プログラミングでは、ネストは深くしないことが基本です。

hinoki24
質問者

補足

どうもありがとうございます。 ただ、よく分からないのですが質問の内容を誤解されているのかもしれません。書き方が悪くてすいません。 A1セルの内容である「ああああ201411」を実行する度に「ああああ201412」、「ああああ201501」とあくまでもA1セルの日付をそのまま進めていきたいと思っています。 一応教えていただいたものを試してみましたがエラーにもなりませんでしたが、IFの If myDate0 Like "######" Thenの所で終了してしまい特に変化しませんでした。

すると、全ての回答が全文表示されます。
  • Chiquilin
  • ベストアンサー率30% (94/306)
回答No.2

というかなんで VBAでないとダメなのですか? ="ああああ"&TEXT(DATE(2014,11+ROW(A1)-1,1),"yyyymm") みたいにして 年・月・日の追加したいところに「+ROW(A1)-1」を 入れてコピーすればいいと思います。 というかむしろ「ああああ」は表示形式にして A1セルに「2014/11」と入力 表示形式をユーザー定義で「"ああああ"yyyymm」に設定 A2セルに「=EDATE(A1,1)」と入れて下方向にコピー でいいのでは?

hinoki24
質問者

補足

すいません、実際の使用では月が変わったら翌月のファイルをボタンを押すと自動作成するようにつくっています。 そのときシートに入力してある月も翌月に自動で進むようにしたかったのです。そのためvbaの方がよかったのです。下にコピーしたかったわけではないです。 ありがとうございます。

すると、全ての回答が全文表示されます。

関連するQ&A