[[20180516192820]] 『コンボボックスの日付をセルに転記し日付として認』(スマトラ) ページの最後に飛ぶ

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

 

『コンボボックスの日付をセルに転記し日付として認識させる方法。』(スマトラ)

お世話になっております。

下記コードはユーザーフォームにコンボボックスを配置したものに

予め準備された日付リスト(セル形式gee.mm.dd)を読み込み

ユーザーがドロップダウンリストから選択した日付を

指定セル(セル形式gee.mm.dd)に転記させるものです。

質問内容

コンボボックスでドロップダウンリスト選択された日付値を
セルに転記した際に、文字列となっている。

試しに

・転記先セルの書式を「yyyy/m/d」にして

・コンボボックスの内容をそのセルに転記してみると「gee.mm.dd」のまま表示される

・そこで、そのセルをマウスで選択しキーボードのF2を押してみると
 セルの表示設定どおりに「yyyy/m/d」で表示され日付データと認識される。

すみませんが、何卒あどばいすのほどよろしくおねがいします。

(予め準備された日付リスト(セル形式gee.mm.dd)を読み込み)

Private Sub 確定月_年月をコンボボックス格納()

    Dim sh3 As Worksheet: Set sh3 = Worksheets("マスタ")
    With sh3
        Me.ComboBox_基準月.List = .Range("A21:A44").Value    'Data読込
        Me.ComboBox_基準月 = sh3.Range("A1").Text    '初期値設定
    End With
End Sub

(下記のコマンドボタン実行で、コンボボックスの値をセルに転記)

Private Sub 処理月登録_Click()

    Dim s As String
    Dim dt As Date

    With Worksheets("マスタ")
        s = ComboBox_基準月.Text
        dt = CDate(s)    '文字列から日付(Date型)に変換する

        .Range("A1,A11,A13").Value = dt    '再書き出し

        .Range("A3").Value = ""

        '.Range("A11").Value = dt '処理月を初期化するため

        .Range("B4:C9").Value = .Range("B14:C19").Value    '週期間一覧転記
    End With

    Call Module1.マスタSheetに処理基準日設定
    Call UserForm_Initialize
    Call 選択中マークの初期化
End Sub

< 使用 Excel:Excel2010、使用 OS:Windows7 >


すみません(^_^;)

どうしたいのかを書いていませんでした。

コンボボックスの内容を日付データとして、セルに転記させる。

※その転記先のせるには、他のセルから日付を扱う関数の参照先となっています。
(スマトラ) 2018/05/16(水) 19:51


"."を、"/"に置換してみてはどうでしょうか

(マナ) 2018/05/16(水) 20:26


マナさん

"/"で認識しました。ありがとうございます。
コンボボックスの表示を"/"で表示させてそのままdt = CDate(s)でセルに書き出ししましところ認識しました。

ただ、できることなら
コンボボックスの表示を gee.mm.ddで表示させて、セル転記のときに"/"で入力させたいのですが
dt = CDate(s)で変換しても何故か、文字列として認識されます。

(スマトラ) 2018/05/18(金) 10:14


Option Explicit

Dim flg As Boolean

Private Sub ComboBox1_Change()

    If flg Then
        flg = False
        Exit Sub
    End If

    flg = True
    With Me.ComboBox1
        .Value = Format(.Value, "gee.mm.dd")
    End With
End Sub

Private Sub CommandButton1_Click()

    Range("A1").Value = DateValue(Replace(Me.ComboBox1.Value, ".", "/"))
End Sub

Private Sub UserForm_Initialize()

    Me.ComboBox1.RowSource = Range("A21:A40").Address
End Sub

こういうことをやりたいのかなぁ。。。
(まっつわん) 2018/05/18(金) 10:54


まっつわん さん

ありがとうございます。
バッチリでした。日付を扱うのは難しすぎます・・・解決です(^^)
(スマトラ) 2018/05/19(土) 11:25


>バッチリでした。日付を扱うのは難しすぎます・・・解決です(^^)

「希望の結果が得られた。」で終わるから理解が進まず、
「難しすぎます。」となるのでは?
1行1行をちゃんと読んで、解らないところはさらに聞いて、
疑問をどんどん潰していかないと、いつまでたっても「難しい」から抜け出せないと思います。

今回の件の場合、たかが文字列の操作ですやん。

で、日付と読める文字列を日付に変換するのは、
DateValue関数じゃないんですかね?(CDateでも出来るかも知れませんが。)
あと、セルとリンクさせるならRowSourceプロパティで設定かな。

そもそも文字列しか扱えないコンボボックスを使うから、
自分で機能を追加しなければいけないので、「難しい」になるのでは?

シートをユーザーフォームのように扱うようにするのも一案だと思います。
(僕はユーザーフォームに期待しないで、シート上に入力フォームを作ってます。)
(まっつわん) 2018/05/19(土) 16:25


Option Explicit

Private Sub CommandButton1_Click()

    Range("A1").Value = DateValue(Replace(Me.ComboBox1.Value, ".", "/"))
End Sub

Private Sub UserForm_Initialize()

    Dim c As Range

    For Each c In Range("A20:A33")
        Me.ComboBox1.AddItem c.Text
    Next
End Sub

AddItemで選択肢をセットした方がトリッキーなことをしなくてよさそうですね。

(まっつわん) 2018/05/19(土) 16:47


コメント返信:

[ 一覧(最新更新順) ]


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