vbaで月を進めたいのですが、文字と組み合わせると「型が一致しません」というエラーが出ます。
どうすればよいですか?
下記コードでは、 & s1 という部分がなければvba実行の度に1~12を順番に繰り返します。
しかし、文字と組み合わせるとエラーになります。セルの書式設定と組み合わせればやりたいことは実現できますが、vbaのみで行うには、下記のどこを修正すればよいでしょうか?
よろしくお願いいたします。
Sub 月を進める()
Dim s1 As String
s1 = "月"
Range("A1") = Format(DateAdd("M", 1, Format(Left(Range("A1").Value, 2), "0-00")), "m") & s1
End Sub
No.2ベストアンサー
- 回答日時:
まだ、引きずっていたのでしょうか。
質問内容そのものが変わったようですね。
>vbaで月を進めたいのですが、文字と組み合わせると「型が一致しません」というエラーが出ます。
>どうすればよいですか?
質問を正確に読むと、よく分かりません。
元は、一体どうなっているのでしょうね。
例:
1) 11月
それとも、
2) 2014年11月
Left(Range("A1").Value, 2)
となっているとなれば、1) らしい。
前の内容を引きずっていても、内容が一新されて、その経緯が書かれていませんので、当事者間しか分かりません。
'1) を採用し、「11月」は、文字列とみなした場合の例:
'//
Sub Test1()
Dim myDate As Variant
myDate = Range("A1").Text 'テキスト形式で受け取らないと、実際は分からない
If myDate = "" Then Exit Sub
myDate = Val(myDate) '2014年12月になっていたら取れない。
myDate = DateValue(myDate & "/01")
myDate = DateAdd("m", 1, myDate)
Range("A1").Value = Format(myDate, "M月") '現代では、Format$ は好ましくない
End Sub
'//
'すでに、書式で11月になっていて、中身は日付のシリアル値が入っている場合
'//
Sub Test2()
Dim myDate As Variant
myDate = Range("A1").Value
If IsDate(myDate) = False Then Exit Sub
myDate = DateAdd("m", 1, myDate)
'Range("A1").NumberFormatLocal = "m月" '書式は設定されている場合は不要
Range("A1").Value = myDate
End Sub
'//
注意:「コードのネストは深くしない!」「プロパティの省略はしない」
VBA/VB プログラミングの原則です。
こういう場合、Excelでは、文字列で"11月"とかしないで、表示形式で、11月として、日付のシリアル値をセルに入れれば、もっと簡単にできるでしょうに。
なお、前回の補足だけに書かれても、私は、ここに常駐して覗いているわけでもないので分かりません。それで、前置きもなく、新しい質問にされると、さっぱり事情が分からなくなります。
ベストアンサーが欲しい人は、ポイントの取れるチャンスが増えるから、質問は新しいほうがよいのでしょうが、こちらは、そんなことはどうでもよいことで、分かりやすく書けば、それだけ目的には近いはずです。それに、どの質問も誰が解決しようと、質問者さんが満足できればよいことです。ただ、かつての私がそうだったように、掲示板は学ぶ場であってもほしいと思います。ここでも、半年・一年と徐々に上達していった人もいます。
ただ、最近、一部の質問者も回答者もVBAのコードの荒っぽさが目立ちますね。
どうもありがとうございます。
まだ少し引きずっていました。
まだまだ応用が利かないんで、少しパターンが変わるとすぐいきづまってしまい何日もどつぼにはまります。
あと知識不足もあるんですが質問の内容が片手落ちで2パターンの回答で考えさせて申し訳ございません。
質問的には1の方でしたが、両方試してみました。
両方とも問題なく動作しました。また動き的も思い通りでした。
現実的には表示形式と合わせてすると簡単になると思いましたが、今回は勉強のために質問させていただきました。
学ぶ場であってほしいという心遣い感謝いたします。
VBAのコードの荒っぽさというのが初心者には良く分からないのですが、「コードのネストは深くしない!」「プロパティの省略はしない」ということなんでしょうね。
なかなか初心者には、そこまでの配慮に行く前にコードの意味を理解できて動作すればいい、となってしまいます。すいません。
また今後もしょうもない質問もするかもしれませんが、よろしくお願いいたします。
質問者のためにという心遣いが良く感じられたので、今回ベストアンサーに選ばせてください。
どうもありがとうございました。
No.3
- 回答日時:
>Range("A1") = Format(DateAdd("M", 1, Format(Left(Range("A1").Value, 2), "0-00")), "m") & s1
↓
Range("A1").Value = Format(DateAdd("M", 1, DateValue(Range("A1").Value & "1日")), "m月")
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
既婚で現役のAV女優さんは居ま...
-
VBA ソートすると、1、11、...
-
シンナーの夏型と冬型の違いは?
-
相対参照から絶対参照に変換す...
-
エクセル最終行の下に貼り付け
-
VBAが止まります。
-
大昔から、クンニ、フェラって...
-
Word 黒塗り部分の文字のみ削除...
-
CDレコの曲の消し方を教えてく...
-
射精したあとの匂いって他人に...
-
夫にセックスがないのなら他人...
-
1日3回セックスって多いですか...
-
おっぱいを舐める
-
2人でエッチできる場所を探して...
-
先日彼氏とラブホに行ったら電...
-
彼女をオカズにして抜くのって...
-
彼とのエッチで、彼がイクのが...
-
初めて彼女とカーセックスをし...
-
彼のペニスが挿入時に柔らかく...
-
女性は電マ、ローター、バイブ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
既婚で現役のAV女優さんは居ま...
-
VBA ソートすると、1、11、...
-
CDレコの曲の消し方を教えてく...
-
大昔から、クンニ、フェラって...
-
相対参照から絶対参照に変換す...
-
シンナーの夏型と冬型の違いは?
-
別ブックの空白行に転記
-
VBAが止まります。
-
エクセル最終行の下に貼り付け
-
Galaxy s10とGalaxy A41はどち...
-
データの平均を1分値にまとめる...
-
EXCELで3行を一組にして結合す...
-
Word 黒塗り部分の文字のみ削除...
-
エクセルvbaで月と文字の組み合...
-
最適な組み合わせの自動計算
-
コマンドの内容をお教えください。
-
マクロについて
-
エクセルのマクロの作り方で、...
-
bluetoothのclass1とclass2の互...
-
scilabのエラーに関して
おすすめ情報