[[20190625134948]] 『特定のセルの値が増えたときに別のセルの値も増や』(ララダス) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『特定のセルの値が増えたときに別のセルの値も増やしたい』(ララダス)

表題の通りですが、特定のセルの値が1増加したときに別のセルの値を1増やしたいという事です。
具体的には12月31日から1月1日に変わったときに1年増やしたいという事です。
平成時代には良かったのですが元号が令和に代わり難儀しています。
Officeのバージョンを上げて令和対応させれば簡単なのでしょうが個人個人のパソコン全てをバージョンアップさせる訳にもいかず苦労しています。

純粋にセルの数値を増加させる方法で構いませんのでどなたかご教示お願いします。

< 使用 Excel:Excel2003、使用 OS:Windows10 >


実際にセルに入力されているのは、月日だけなのでしょうか? Excelは日付っぽい値なら、勝手に年月日としてシリアル値に変えているかと思いますが、セルをクリックした際に入力欄に表示されているのは何でしょう?

そして、セルの値に連動させるのは、+1 ではなくとも、YEAR(A1) のように、YEAR関数で年を得れば良いのでは? 年ではなく年度にしたいのだ、という場合、年から固定値を引けば良いだけですし。 これなら数式だけでできますが、そうでないなら、マクロを使う事になるでしょうね。(しかも、月日が小さくなったら加算、とかすると、日付を打ち間違えたから入力し直し…、という場合も+1してしまいそう)
(???) 2019/06/25(火) 14:31


実際の処理は"追加"というマクロボタンで和暦年|月|日|曜日 |累計 (全て別のセル)
さらに月/日 名の新規シート作成という一連の作業をやってます。
平成の時はこれでよかったけど内部に令和のデータを持ってないExcel2003ではどうしようもないのです。
+1というのは"年"のデータで純粋に1(令和)+30<>(仮にY1セルとします) と =TEXT(DATESTRING(BA1),"e")を数値化した物を(仮にZ1セルとします)比較してY1<Z1になった時に和暦年のセルに1を加えたいのです。
(ララダス) 2019/06/25(火) 15:13

=if AW1=AX2 then Z2=Z2+1
これをセルに入れてみたけど#NAME?となります。

(ララダス) 2019/06/25(火) 15:21


=if AW1<AX2 Then Z2=Z2+1
の間違いでした。

(ララダス) 2019/06/25(火) 15:52


月日いっしょのセルではないのですね。 セルがばらばらで、レイアウトがさっぱり判らないのですが、inputとoutputを整理してください。
 Y1: 令和年? 例えば1?
 Z1: 「=TEXT(DATESTRING(BA1),"e")」が入ってる? 指数? 平成年が返っているようですが…?
 Z2: ここが出力先? どうなればいい? シリアル値? 文字列?
 AW1: 平成年または令和年?
 AX1: 月?
 AY1: 日?
 AZ1: 曜日も手入力?(年月日から数式で代入できそうですが…)
 AX2: 何?
 BA1: 何?

Z1セルの計算に妙な方法を使っているようなので、これを素直な年計算にすれば解決しそうに思えます。
そして、マクロボタンはシートに貼っているのですか? それともユーザーフォームですか?
(???) 2019/06/25(火) 16:11


どうも言っている意味が理解してもらえないようですが、すべて文字列ではなく純粋に数値の計算として考えてください。
単純な足し算を教えてください。

Z2: 年(和暦)数値
AB2: 月 数値
AD2: 日 数値
AG2: 曜日 セルの中身(=--CONCATENATE(Z2+1988,"/",AB2,"/",AD2))

AX1: =TEXT(DATESTRING(BA1),"e")
AY1: =MONTH(BA1)
AZ1: =DAY(BA1)
BA1: =AG2+1
BB1: =IF($AV$3="",0,VALUE(AS3&AT3&AU3&AV3))

コマンドボタン"追加"の中身
Sub ページ追加()

        i = Worksheets.Count
        Worksheets(i).Select
        連番 = Range("BB1").Value
        年 = Range("AX1").Value
        月 = Range("AY1").Value
        日 = Range("AZ1").Value
        シート名 = 月 & "月" & 日 & "日"
        Sheets(i).Copy After:=Sheets(i)
        i = i + 1
        連番 = 連番 + 1
        Sheets(i).Name = シート名
        Range("Z2").Value = 年
        Range("AB2").Value = 月
        Range("AD2").Value = 日
        Range("AS3").Value = Left(Right(" " & 連番, 4), 1)
        Range("AT3").Value = Left(Right(" " & 連番, 3), 1)
        Range("AU3").Value = Left(Right(" " & 連番, 2), 1)
        Range("AV3").Value = Left(Right(" " & 連番, 1), 1)
End Sub

(ララダス) 2019/06/25(火) 16:35


 こんばんは!

 再現しようと頑張ったけど、、よくわからないので、、取り敢えず
 ↓これは、、
 (=--CONCATENATE(Z2+1988,"/",AB2,"/",AD2))

 ↓これじゃないのかな?と思うのと
 =DATE(Z2+1988,AB2,AD2)

 ↓これは、、
 シート名 = 月 & "月" & 日 & "日"

 ↓みたいなことじゃないのかなと思います。
 シート名 = Format(Date, "yyyy年mm月dd日")

 なんかシリアル値と文字を連結するだけのところがごっちゃになっているような気がします。 

 他にも元のコード内では変数もちゃんと宣言しているんだと思いますが、
 ここにアップする時もちゃんと明示した方がいいと思います。

 宣言の仕方によっても多少は変わってくると思いますので、、、

 こんな時は書き手がどんな思いで変数を使っているのかがすごく大事だと思います。

 それと、、

 >Range("Z2").Value = 年

 なんかは、、
 With を使って
 .Range("Z2").Value = 年

 明示する、、もしくは、、Set する、、

 とかしないと、、何がなんだか全然分からない様な気がしますけど、、どうでしょう????
(SoulMan) 2019/06/25(火) 21:26

 書き忘れです。

 なぜ?明示しないといけないのか?それは、、明示しないとDebug出来ないでしょ??

 画面を見ながらStep実行するのに、、表示されている画面によってころころと内容が変わるようじゃ、するたびに内容が変わる??

 それじゃ、、Debug出来ないでしょ?となりません???

 まぁ、、Debug出来ていれば、、何でもないことなんでしょうけど、、、
(SoulMan) 2019/06/25(火) 21:43

自己解決しました。
マクロコードをいじったらできました。
最後まで求める答えではなかったけどありがとうございました。

皆さんお騒がせしました。
(ララダス) 2019/06/25(火) 22:02


>マクロコードをいじったらできました。
本当にそうなんですかね。?

() 2019/06/26(水) 18:48


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.