プロが教える店舗&オフィスのセキュリティ対策術

エクセルユーザーフォームの日付操作を教えてください。
テキストボックスにスピンボタンで日付を入力し、ワークシートに転記するとシリアル値ではなくテキストで転記されます。ワークシートの日付処理に反映されませんので良い方法があれば教えてください。(mm/ddの入力でも良いですスピンボタンにこだわりません)

A 回答 (5件)

No3です。



イベント処理はちょっと置いておいて…
>Range("Database").Cells(insertRow, 11) = 依頼月日
         ↓
Range("Database").Cells(insertRow, 11) = Format(Date + フォーム名.依頼月日Spin.Value, "yyyy/mm/dd")
の直接入力ではうまくいかないのでしょうか?
(フォーム名は入力用フォームのオブジェクト名です)

補足ですがNo3で
>モジュールレベルで(グローバルに)定義すれば…
と書きましたが、フォームと本体は別モジュールになっている可能性が高そうなので、「モジュールレベルでグローバル」ではなく「プロジェクトレベルでグローバル」にしないとうまくいかないかも。
    • good
    • 0
この回答へのお礼

ご指示の方法で進めましたところエラーでした。
また、単純に「Format(date,"yyyy/mm/dd")」だと今日の日付が入ります。
いろいろ試行錯誤して結局変数を修正して何とかなりました。
 Dim irai As Date
 irai = 依頼月日.Value
 Range("Database").Cells(insertRow, 11) = irai
で日付として張り付きました。書式通りに入りました。
fujillin様、感謝・感謝です。
さらに勉強します。
ありがとうございました。

お礼日時:2009/04/21 15:37

難しい話になってきているようですが、とりあえず


ActiveCell.NumberFormatLocal = "yyyy/m/d"
ActiveCell.FormulaR1C1 = "2007/11/1"
これでよいのではないでしょうか?
    • good
    • 0
この回答へのお礼

ご心配ありがとうございました。
何とか変数の修正でシリアル値として認識してくれました。
これからもよろしくお願いします。

お礼日時:2009/04/21 15:39

No2です。


補足を見ると、

変数「依頼月日」は別のプロシージャーで値を代入しても、それぞれで区別される(別変数扱い)ために、元の「依頼月日」の値は0のままです。
それなので、No2の日にちを代入した時と同じこと(23の代わりに0日)が起きて「1900/01/00」と記されているのでしょう。

変数のスコープについて、確認してください。
 http://homepage2.nifty.com/kasayan/vba/vba1.htm
 http://pc.nikkeibp.co.jp/pc21/special/2007_gosa/ …

修正するには、変数をモジュールレベルで(グローバルに)定義すれば、スコープの問題は解決しますが、…
補足部分を見ると、
>Private Sub 依頼月日Spin_Change()
>依頼月日.Text = Format(Date + 依頼月日Spin.Value, "yyyy/mm/dd")
>End Sub
の部分って実際に実行されていますか?
どうもこのままだと、実行するとエラーになりそうな気がするのですが…

ところで、変更されるごとに値を取得しようとしているようですが、補足を見る限りでは変数に値を入れているだけなので、イベント処理は必要ないように思われます。
実際にセル(Range)に値を記入する時に、Formの内容を(1度だけ)読んで代入すればよいのではないでしょうか?
そうすればプロシージャー間で変数を受け渡す必要もなくなるので、スコープの問題もなくなるはずです。
    • good
    • 0
この回答へのお礼

ありがとうございます。いろいろ試しましたがうまくいきません。
やはり変数の問題のようです。グローバルタイプにすると「コンパイルエラー」「このメンバ識別子はオブジェクトモジュールの中に存在しています。」となります。他にフォーム内では使用していませんが他のオブジェクトでの使用をREMにしても同じです。
新しく単純なフォームから転記すると入力がm/dでもシリアル値で入り、書式どおりyyyy/mm/ddで表示されます。シートの日数カウントも問題ありません。
Private Sub CommandButton1_Click()
Range("K375").Value = TextBox1.Value
End Sub
新規レコードの挿入時の変数のスコープをもう少し勉強します。

お礼日時:2009/04/20 17:20

月日だけでもいけます。


Sub test()
 dt = "5/23"
 Cells(1, 6).Value = dt
End Sub
だと、2009/5/23に

日付けだけだと・・・
Sub test()
 dt = "23"
 Cells(1, 6).Value = dt
End Sub
さすがにこれは1900/1/23となってしまいますが、
Dateシリアルで解釈されていることには変わりありません。

対象セルの書式設定を日付け型になさっていますか?
    • good
    • 0
この回答へのお礼

ご教授ありがとうございます。ご指示の部分をRUNさせると問題なく日付で認識されますが、やはり「ユーザーフォームのテキストボックスの日付」転記する形にするとうまくいきません。ちなみに下記はフォームのコードです。
'データをセルに入力
Dim Datarec As Integer
'Dim EndDay As Date
 Dim 依頼月日 As Date '→これだと「1900/01/00」が転記される。セル書式通りだが・・・
~~~~
Datarec = Range("Database").CurrentRegion.Rows.Count - 4

Range("Database").Cells(insertRow, 1) = Datarec
Range("Database").Cells(insertRow, 2) = ファイル
If 関西.Value = True Then
Range("Database").Cells(insertRow, 3) = "関"
End If

Range("Database").Cells(insertRow, 4) = EndDay
Range("Database").Cells(insertRow, 5) = ***
Range("Database").Cells(insertRow, 6) = ***
Range("Database").Cells(insertRow, 7) = ***
Range("Database").Cells(insertRow, 8) = ***
Range("Database").Cells(insertRow, 9) = Formkind
Range("Database").Cells(insertRow, 10) = ***
Range("Database").Cells(insertRow, 11) = 依頼月日
~~~~
Private Sub 依頼月日Spin_Change()
依頼月日.Text = Format(Date + 依頼月日Spin.Value, "yyyy/mm/dd")
End Sub
こんな感じで転記してますが・・・

お礼日時:2009/04/17 14:42

Sub try()


Dim st As String
st = "2009/04/17"

Range("A1").Value = st
MsgBox TypeName(Range("A1").Value)
End Sub

これでも日付型となりますが、もしかして月日しか与えていないとか?
年月日にしてみては。
    • good
    • 0

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