[[20210209170331]] 『文字型で表示されない(文字型で表示したい)』(動画ファン) ページの最後に飛ぶ

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

 

『文字型で表示されない(文字型で表示したい)』(動画ファン)

以下のようなコードでD2以下に文字列(mm:ss:00)を書き出したつもりですが
値は、間違っていないのに文字列では無く数値型で表示されています。

WS_CJmp3.Cells(k, "D") =Application.WorksheetFunction.Text(WS_CJmp3.Cells(k, "C"), "[h]:mm:ss")

(セルの右端に表示されています。
   =ISTEXTでもFALSEと表示されています。)

D2以下の表示されている数値をそのまま文字列に変える方法を教えて下さい。

以下は、コードの全文です。

Sub ?@CJMP3作成()

    Dim WS_CJmp3 As Worksheet
    Set WS_CJmp3 = Sheets("CJmp3")

    '
    'CJMP3シートの初期化
    WS_CJmp3.Range("A:E").Clear

    '見出し行の指定
    WS_CJmp3.Range("A1") = "DATA"
    WS_CJmp3.Range("B1") = "MP3"
    WS_CJmp3.Range("C1") = "TIME"
    WS_CJmp3.Range("D1") = "集計(文字列)"
    WS_CJmp3.Range("E1") = "フルパス"
        With WS_CJmp3.Range("a1:E1")
            .Font.Name = "游ゴシック"
            .Font.Size = 11
            .HorizontalAlignment = xlCenter
            .Font.ColorIndex = 1
            .Font.Bold = True
        End With

'DATAをテキストファイルからA列に読み込む

     Dim txtName As String
    txtName = Application.GetOpenFilename("MP3テキストファイル,*.txt")

    'MsgBox txtName

    If txtName <> "False" Then
        Open txtName For Input As #1
    End If

    Dim r As Long
    r = 2 '2行目から書き出す(1行目は見出し行)

    Do Until EOF(1)

        Dim buf As String
        Line Input #1, buf

        Dim aryLine As Variant '文字列格納用配列変数
        aryLine = Split(buf, vbTab) '読み込んだ行をタブ区切りで配列変数に格納

        Dim P As Single
        For i = LBound(aryLine) To UBound(aryLine)
            'インデックスが0から始まるので列番号に合わせるため+1
            Cells(r, P + 1) = aryLine(P)
        Next

        r = r + 1

    Loop

    Close #1

    'MsgBox "A列にDATAを記入しました。"

    'フルパス名を記入
    WS_CJmp3.Range("E2") = txtName

'B、C列に書き込み

    Dim re As Object
    Set re = CreateObject("VBScript.RegExp")

    With re
        .Global = True
        .IgnoreCase = False
        .Pattern = "[\(\[「]?(\d{1,}[::])?\d{1,}[::]\d{2}[\)\]」]?\s*"
    End With

    Dim k As Long
    Dim firstRow As Long
    Dim lastRow As Long
    Dim strText As String
    Dim s As String
    Dim match As Object
    Dim m As String

    WS_CJmp3.Columns("B:C").NumberFormatLocal = "@"
    WS_CJmp3.Columns("C").HorizontalAlignment = xlRight

    firstRow = 2
    lastRow = WS_CJmp3.Cells(Rows.Count, 1).End(xlUp).Row

    For k = firstRow To lastRow
        s = WS_CJmp3.Cells(k, 1).Text
        Set match = re.Execute(s)
        If match.Count > 0 Then
            m = match(0).Value
            WS_CJmp3.Cells(k, "B").Value = Replace(s, m, "")
            m = Replace(m, "(", "")
            m = Replace(m, ")", "")
            WS_CJmp3.Cells(k, "C").Value = convert(Trim(m))
            WS_CJmp3.Cells(k, "D") = Application.WorksheetFunction.Text(WS_CJmp3.Cells(k, "C"), "[h]:mm:ss")
        Else
            WS_CJmp3.Cells(k, "B").Value = s
            WS_CJmp3.Cells(k, "D") = Application.WorksheetFunction.Text(WS_CJmp3.Cells(k, "C"), "[h]:mm:ss")
        End If
    Next
End Sub

Function convert(s As String) As String

    Dim v As Double
    If Len(s) <= 5 Then
        convert = s
    Else
        v = TimeValue(s)
        convert = Application.Text(v, "[mm]:ss")
    End If
End Function

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


 こんにちは ^^
ちょい見なので、外していましたらお許しを
エクセルさまが自動変換してしまうのではないでしょうか
直接、書込んだセルの書式をテキストに設定するとテキス
トになった気が致します。
WS_CJmp3.Cells(k, "D").NumberFormatLOcal="@"
とか。。。でもエラーコメントが出る可能性もあるので
こちらも要対策だったような記憶が。。。m(_ _)m
(隠居じーさん) 2021/02/09(火) 17:15

直接、書込んだセルの書式をテキストに設定するとテキストになった気が致します。 WS_CJmp3.Cells(k, "D").NumberFormatLOcal="@"

アドバイス感謝します。

最後のEnd Subの前に
  上記のコード(セルの書式を設定)を追加するとの理解で良いでしょうか ?
(間違っていたらごめんなさい。)

コードを追加してみましたが
  やはり、結果は数値型で変化はありませんでした。

他に修正すべき点ありますか ?
又、解決になるような調査事項あればアドバイスください。
(動画ファン) 2021/02/09(火) 18:27


 え!そぉなのですね。。。^^
確かに、書式次第では見た目、変わらないかもしれませんが。。
。左寄せになっていません?
当方ではなっていますけど。。。
他に何か要因が有るのかもしれませんね。残念ですが私の見識を
超えているようですので。他の方のアドバイス、回答を引き続き
お待ちくださいませ。お力になれず済みませんでした。m(__)m
(隠居じーさん) 2021/02/09(火) 19:02

>>最後のEnd Subの前に
>>  上記のコード(セルの書式を設定)を追加するとの理解で良いでしょうか ?
 いえ^^; 

 WS_CJmp3.Cells(k, "C").Value = convert(Trim(m))
 ここ
 WS_CJmp3.Cells(k, "D") = Application.WorksheetFunction.Text(WS_CJmp3.Cells(k, "C"), "[h]:mm:ss")

 WS_CJmp3.Cells(k, "B").Value = s
ここ
WS_CJmp3.Cells(k, "D") = Application.WorksheetFunction.Text(WS_CJmp3.Cells(k, "C"), "[h]:mm:ss")

 でもだでしょうか??;。。。m(__)m
(隠居じーさん) 2021/02/09(火) 19:08

アドバイス頂いた場所(ここ)にコードを挿入して
 ズバッと文字列に変換されました。

お礼申し上げます。

解決しました !!

(動画ファン) 2021/02/09(火) 19:50


そのコードはあなたが書いたコードなんですか?

WS_CJmp3.Columns("B:C").NumberFormatLocal = "@"

WS_CJmp3.Columns("B:D").NumberFormatLocal = "@"
とするだけじゃないかと思うけど。

>D2以下に文字列(mm:ss:00)を書き出したつもり
というのが実現されているんですかね。
(γ) 2021/02/09(火) 20:20


 こんばんは ^^
確かに、よく、落ち着いて拝見しますと、ご指摘の通りか
と、既に記述されていましたですね。
正規表現の使い方とか、扱っておられるファイルを見ると。
かなり、専門知識をご習得の方のコードみたいですね。
有難うございました。m(_ _)m
(隠居じーさん) 2021/02/09(火) 21:02

コメント返信:

[ 一覧(最新更新順) ]


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