アプリ版:「スタンプのみでお礼する」機能のリリースについて

現在2017/4/1から2018/3/31までの日月の入った表があります。ボタンを押すと1年足されて2018/4/1から2019/3/31になる VBAを教えてください。
よろしくお願いします。

質問者からの補足コメント

  • 皆さん回答ありがとうございます。
    fujillinさんに質問です。
    一つ問題が出まして、2/28から3/1の間が4行空いてます。この様場合どうすれば自動で2/29が入りますか。
    表は一月ごとに区切ってあります。
    よろしくお願いします。

    「現在2017/4/1から2018/3/3」の補足画像1
      補足日時:2017/04/24 15:48

A 回答 (4件)

こんばんは!



具体的な配置が判らないので、A1セル以降A列にシリアル値が入っているとします。

Sub Sample1()
Dim i As Long
For i = 1 To Cells(Rows.Count, "A").End(xlUp).Row
With Cells(i, "A")
.Value = DateAdd("yyyy", 1, .Value)
End With
Next i
End Sub

※ うるう年が絡んでくると厄介ですが、質問の期間はうるう年は関係ないので
こんな感じではどうでしょうか?m(_ _)m
    • good
    • 0
この回答へのお礼

早速の回答ありがとうございます。

もう一つ質問があります。
エクセルの表題a1セルに平成28年度○○○○○とあり日付と同じく1年足されて平成29年度○○○○○にするにはどうすればいいかお願いします。
よろしくお願いします。

お礼日時:2017/04/20 22:04

No.1です。



>エクセルの表題a1セルに平成28年度○○○○○とあり・・・

A列はシリアル値ではなく、文字列になっているというコトでしょうか?
そうであれば単純に「置換」で対応できると思います。

VBAでやれば

Sub Sample2()
Range("A:A").Replace what:="平成28", replacement:="平成29", lookat:=xlPart
End Sub

こんな感じでしょうか。m(_ _)m
    • good
    • 0
この回答へのお礼

早速回答ありがとうございます。

完全自動更新を目指してまして、、、、更新ボタンを押すと日付と表題の年度が変わるように作っております。エクセルの表には一切触れず更新出来れば誰が使用しても失敗が無いかと思い作ってましたが最後に壁にあたりました。

お礼日時:2017/04/20 22:21

こんにちは



ご質問に対する回答は、すでに他の方がなさっていますので、ご質問とは違う回答を・・・


シートの使い方がわかりませんが、年度毎の一覧なので、B列以降に予定とか実績とかが記入されるものではないかと想像しました。

>更新ボタンを押すと日付と表題の年度が変わるように作っております
>誰が使用しても失敗が無いかと思い~~
ボタンが存在することが問題にならないのでしょうか?
使用中(=B列以降に記録ができている状態)で、ボタンを押されたら変なことになりませんか?
さらに、押した人が「あれっ?!」っと思って、慌ててもう一回押しちゃうとか…

想像するところ、「更新」といっても年度に一度の作業だと思いますが、「更新」した時は、B列以降にデータが入った状態なのでしょうか?(次年度用のサラのシートを作成するのではないかと想像しますが…)
多人数に配布して同じフォーマットで使用してもらうためのものであれば、年度初めに新しいブックなりシートを作成して配布すれば済むと思いますし、添付図に示すような仕組みで、年度を変更するのとボタンを押すのとでどれだけの差があるのか不明です。

誤操作を防止できるようにとのご配慮であるなら、操作を簡単にというのは最もですが、誤操作そのものをできなくしておくことが一番の対処ではないかと思います。
例えば、A列は固定にして一切変更できなくしておくとか。(シートの保護で可能)


添付図に示したものは、関数式等で全て自動で表示できるようにしたもので、このような方法であれば、うるう年であっても自動的に対応してくれます。
A1セルに(現状「28」が入っていますが)、年度を入力するとA列(B列)が自動的にその年度の表示に切り替わるようになっています。
(タイトルが和暦でA列が西暦なのも気になりますが、ご質問がそんなふうになっているので、そのままにしてあります。)

ごく簡単に作り方を記すと。
・A1セルは書式設定で、"平成"0#"年度○○○○"としてあり、年度の数値だけを入力します。
(入力規則なども利用すれば、予定外の入力をチェックすることも可能)
・A列の他のセルは、書式設定で日付にしてあります。
 おまけで作成したB列は、ユーザ書式で aaa となっています。(=曜日)
・A2セルに =DATEVALUE("h"&A1&"/4/1") の数式
 A3セル以降は =IF(A2<DATEVALUE("h"&($A$1+1)&"/3/31"),A2+1,"") で366日分オートフィルしています。
 (年度を越えた分のセルは、空白表示になります)
・ついでにB2も同様に =A2 として下方にオートフィル

以上で、A1セルに入力した数値(平成年度)に対応した年度内の日にちが表示されるようになります。
添付図はおまけで、日曜を赤色にしていますが、条件付き書式を全体に設定しておくことで簡単に実現可能です。(年度が替わっても自動的に対応します)

どうしてもボタンでないとお気に召さないのであれば、上記の仕組みの場合でも、ボタン押し下げに応じて、A1の値を増減させるることで同様の結果が得られます。
(おまけで、年度の増減ボタンもつけてみましたが(笑)
例えば「増」の場合は、
 Range("A1").Value = Range("A1").Value + 1
という1行の処理を行えばすみます。
「現在2017/4/1から2018/3/3」の回答画像3
    • good
    • 0
この回答へのお礼

こんばんは。
回答ありがとうございました。
僕が描いていた内容そのものです。
曜日は関数を使い取得すればいいのかと思います。
最終的にはユーザーホーム上ですべてを実行するように作成しておりますか
次年度繰越ボタンを押すとフォルダーをコピーしてディスクトップに貼り付け年度更新的な感じでした。

お礼日時:2017/04/22 20:13

ANo3です。



>この様場合どうすれば自動で2/29が入りますか。
データをシリアル値(=Date型)で持つようにしているなら、うるう年は自動的に2/29日が表示できます。
(前回回答の式の表示調整の仕組みをご覧ください)

それよりも、
>表は一月ごとに区切ってあります。
・・という条件は、ご質問文には記載されていませんでしたので、ANo3で提示した式はA列に一年分がズラ~っと並ぶ前提で作成した式になっています。
(うるう年はきちんと反映されますし、翌年度に当たるセルは空白になる関数式になっています)

ひと月ごとに区切って記載するのであれば話が全然違うので、各月用に式を作成し、その月の分だけ表示できる式にしておく必要がありますね。
(添付写真では部分的にしか見えませんが、小計の行やそれ以外にも異なる種類の行が間に入っているようですので…)

>2/28から3/1の間が4行空いてます
添付の写真では2/28から3/1の間は11行空いているように見えますが…???


>表は一月ごとに区切ってあります。
2月を例に考えれば、通常は28日までで以下は空白、うるう年は29日まで表示して以下は空白になれば良いものと解釈しました。(上記の「4行」云々は意味不明なので無視しています)
そのようにするには「その月の範囲」を条件にして、あとは空白になるようにしておけば良いです。
(ANo3は年度外は空白になるようにしてありますが、それを月単位にすれば良い)

例えば2月の場合の例を挙げるとして、
前回同様に、A1セルに平成年度が数値であるものと仮定すれば・・・
その先頭(2/1)のセルには
 =DATEVALUE("h"&$A$1&"/2/1")
次のセルには
 =IF(前のセル<DATEVALUE("h"&($A$1)&"/3/1")-1,前のセル+1,"")
として31日分フィルコピーすれば、ひと月分が表示されるはずです。
(「前のセル」とあるのは2/1を表示しているセル番地のことです)

上記の式だと12か月分に対して、月の部分を少しずつ変えた式を作成する必要がありますが、セル範囲に規則性があったり、月を示すタイトルがどこかにあるような場合は、それを利用することで全部の月で同じ関数式にすることも可能です。
などと言っているよりも、事前設定の1回こっきりの作業だと思いますので、個別に設定してしまった方が早いですし、2月以外は日数が固定なのでもっと簡単な式にでき、他の月に関しては、
 = 前のセル+1
という式で、必要な範囲にフィルコピーすれば十分なはずです。
    • good
    • 0
この回答へのお礼

迅速な回答ありがとうございました。お陰様で無事99%完成しました。
凄く助かりました。

お礼日時:2017/04/25 21:24

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