
お世話になっております。
このたびVBAを使用してWBSを作成しようと考えております。
そこで、以下のような日付取得のロジックを考えました。
・A1セルからA100セルまで一行ずつ下へforでまわす
・日付はYYYYとMMとDDに分割したい
---------------------------------------
For I = 0 To 99
セルに入力された値 = Range("A1").Offset(I).Value
MsgBox セルに入力された値 '(1)2009/11/16とでます。
年だけ = Year(セルに入力された値)
MsgBox 年だけ '(2)1905/03/13とでます。
NEXT
・
・
--------------------------------------
(2)は(1)の値を変えてみても1905/03/13とでます..
(2)はなぜ2009を拾ってくれないのでしょうか。。。
ご教授ください。
宜しくお願いいたします。
No.7ベストアンサー
- 回答日時:
> 2009が正常に返ってきます。
> これはOffsetが悪そうですね。
> しかしOffsetしたいのです・・・。
Offsetではなくて
Cells(I, 1).Value
とかでも変数が使えますよ
( I は 1 から始まらないとエラーになります)
> Value2にしたら2009が返ってきました!
なんかおかしいですね。もしかしてファイルが壊れているかもしれませんので
別の新しいファイルでテストしたらどうなるでしょうか。
たくさんのアドバイスありがとうございます!
IやJなど配列にする変数(?)って決まりがあったんですね。
ご教授くださいましてありがとうございます。
とりあえず、IはMにしてみました。※なんとなくです
ファイルが壊れているかもしれないということで
試してみたところ同じ結果でした。
うーん。
一応値が入ったので良しとします・・。
ありがとうございました。
お礼を投稿させていただきます。
No.6
- 回答日時:
(1)クセルでは日付セルは、日付シリアル値という正整数(1900年1月1日からの経過に数)を持っている。
それは標準では2009/11/16などの入力をしたとき自動で変換されてセルに日付シリアル値がセットされる
文字列で日付をいれて要る場合があるので注意
(2)日付に関するVBAの関数などはセルにヒヅケシリアル値が入っていることが条件で、正常な働きをする。Year、Month、Dayもこの類だ。
表示形式の適用も同じ。
ーー
VB他の言語の熟達者であっても、エクセルVBAをやる前には、エクセル特有の必要知識を得て(またはエクセルの操作や機能など)、VBAをやるべきで、そうしないから、問答がこんなに長引く。この質問など、普通は質問にならない問題だと思うが。
ーー
エクセルVBAの場合変に変数の方定義いなくても適当にやってくれるのでy=Year(Range(a1))でよかろう。
Sub test02()
MsgBox Year(Range("A1"))
End Sub
行く行くは、変数の型などもしっかり勉強すべき時が来ると思うが。
ーー
関数の結果を入れる変数を、Dateで定義すると、例2009と出た値を、日付けシリアル値と自動解釈して、2009を1900年1月1日からの経過日数の日付としてしまうと思う。
丁寧に教えてくださってありがとうございます。
>(2)日付に関するVBAの関数などはセルに日付シリアル値が入っていることが条件で、正常な働きをする。Year、Month、Dayもこの類だ。
表示形式の適用も同じ。
:
>関数の結果を入れる変数を、Dateで定義すると、例2009と出た値を、日付けシリアル値と自動解釈して、2009を1900年1月1日からの経過日数の日付としてしまうと思う。
大分理解してきましたが、まだまだトンチンカンなのでシリアル値、
関数など勉強してみます。
ありがとうございました。
No.4
- 回答日時:
> 次にVariantにしたところ1899が返ってきました。
> integer にしてみたところオーバーフローになってしまいました。
こちらで試したら正常な値(2009)が表示されるのですが…
オーバーフローもおかしいですね。
ループを外して
セルに入力された値 = Range("A1").Value
にして試してみたらどうなりますか?
ちなみに
A1のValueが2009/11/16で表示されてもテキスト型ということは
ありませんので念のため(日付型でもValueは2009/11/16です)
シリアル値を期待するなら.Value2です。
この回答への補足
>ループを外して
>セルに入力された値 = Range("A1").Value
>にして試してみたらどうなりますか?
2009が正常に返ってきます。
これはOffsetが悪そうですね。
しかしOffsetしたいのです・・・。
あ!
Value2にしたら2009が返ってきました!
ありがとうございます!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excleマクロ セル値の代入と文字列の結合について 3 2022/10/05 16:47
- Excel(エクセル) 【マクロ】ボタンを押すごとに、A1セル、A2セル、A3セルに日付を入力 3 2023/01/25 00:12
- Visual Basic(VBA) VBAで自動集計(特定セルコピー月ごとに値貼り付け)したい。 6 2023/06/25 11:37
- Excel(エクセル) 並べ替え、ソートの構文がわからない。 お世話になります。VBA超初心者です。 エクセルでワークシート 2 2023/06/28 21:00
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 2 2022/06/25 22:42
- Excel(エクセル) VBAのoffsetの動き方について教えてください 3 2022/11/25 23:36
- Excel(エクセル) シート参照を含む数式を連続コピー 3 2022/12/10 11:42
- Excel(エクセル) エクセルVBAでセルに表示されているとおりの数値を取得したい(時間の計算結果) 1 2022/03/30 17:52
- Excel(エクセル) DATEVALUE関数がエラーになる 2 2022/07/12 19:30
- Visual Basic(VBA) 複数シート一括作成後に、特定範囲の数式は値で貼り付けしたい 3 2022/10/07 11:18
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ExcelVBAを使って、値...
-
VBA実行後に元のセルに戻りたい
-
Application.Matchで特定行の検索
-
エクセルvbaで、別シートの最下...
-
VBAで自動集計(特定セルコピー...
-
Excel VBAで、 ヘッダーへのセ...
-
Excel2003 複数セル1列の入力済...
-
EXCELで変数をペーストしたい
-
”戻り値”が変化したときに、マ...
-
VBAでセルをクリックする回...
-
Google Apps Script:Googleスプ...
-
i=cells(Rows.Count, 1)とi=cel...
-
vb.netによるEXCEL値取得
-
セル色なしの行一括削除
-
指定した条件で行セルを非表示...
-
連続する複数のセル値がすべて0...
-
特定のセルが空白だったら、そ...
-
【Excel VBA】指定行以降をクリ...
-
値の比較方法
-
特定の文字を条件に行挿入とそ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ExcelVBAを使って、値...
-
i=cells(Rows.Count, 1)とi=cel...
-
Excelで指定した日付から過去の...
-
エクセルvbaで、別シートの最下...
-
特定のセルが空白だったら、そ...
-
VBA実行後に元のセルに戻りたい
-
【Excel VBA】指定行以降をクリ...
-
任意フォルダから画像をすべて...
-
【Excel】指定したセルの名前で...
-
VBAでセルをクリックする回...
-
【VBA】シート上の複数のチェッ...
-
EXCELのVBA-フィルタ抽出後の...
-
Excelのプルダウンで2列分の情...
-
Excel vbaで特定の文字以外が入...
-
TODAY()で設定したセルの日付...
-
”戻り値”が変化したときに、マ...
-
ExcelのVBAで数字と文字列をマ...
-
VBA ユーザーフォーム ボタンク...
-
Excel VBA マクロ ある列の最終...
-
Excel VBA、 別ブックの最終行...
おすすめ情報