[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『文字型で表示されない(文字型で表示したい)』(動画ファン)
以下のようなコードで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
いえ^^;
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.