[[20210127151918]] 『CUEシート(テキストファイル)の作成』(動画ファン) >>BOT

[ 初めての方へ | 一覧(最新更新順) |

| 全文検索 | 過去ログ ]

 

『CUEシート(テキストファイル)の作成』(動画ファン)

MP3を分割の為にCUEシート(テキストファイル)を作成する事にしました。

シート1にDATAとして以下は作成済みです。

   (但し1行目は、見出し列となります。)
 B列にTITLE
 C列にINDEX(hh:mm:ssの文字列)

シート2
 A列に下記フォーマット形式に整形して書き出す予定です。

FILE ”ファイル名" MP3  
TRACK 01 AUDIO
TITLE "A"
INDEX 01 00:00:00
TRACK 02 AUDIO
TITLE "B"
INDEX 01 00:05:30
TRACK 03 AUDIO
TITLE "C"
INDEX 01 00:15:30

(TRACK,TITLE,INDEXが1組になります。)


以下のコードを書き始めましたが

 1)FILE "ファイル名" MP3 で
     引用符(”)が記載できない。
   シート2のA1に表示されるはずが、E2それらしきファイル名が表示される

 2)FOR文の2重ループで上手く処理できません。

コードの修正をお願いします。

Sub CUE_LIST()

Dim i As Integer
Dim ii As Integer
Dim LowCount As Integer
Dim SearchPath As String

LowCount = Sheet1.Cells(Rows.Count, 1).End(xlUp).Row

'ターゲットのフォルダー(パス)をダイアログ選択

    If Application.FileDialog(msoFileDialogFolderPicker).Show = True Then
       SearchPath = Application.FileDialog(msoFileDialogFolderPicker).SelectedItems(1)
       Range("e2") = SearchPath
   End If

Sheet2.Range("A1") = "File " & Sheet1.Range("e2") & "MP3"

For i = 1 To LowCount

    For ii = 1 To 3
        Sheet2.Cells(i, "A") = "TRACK 0" & (i) & " AUDIO"
        Sheet2.Cells(i + 1, "A") = "TITLE " & Sheet1.Cells(i, "B")
        Sheet2.Cells(i + 2, "A") = "INDEX 01 " & Sheet1.Cells(i, "C")
    Next ii
Next i
End Sub

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


 参考まで。

 MsgBox "TITLE ""A"""
(OK) 2021/01/27(水) 15:34

 分けて書くとこんな感じです。

 MsgBox "TITLE " & """" & "A" & """"
(OK) 2021/01/27(水) 15:37

回答ではなく、質問文の確認です。

1)前半(引用符が記載できない件)と後半(表示箇所が異なる件)は同一の問題なのですか。別件だと思うのですが、番号をまとめた意図はありますか。


1)前半については既にOKさんが回答なさっていますが、最近ほかの方の質問にて詳細を回答したので、参考までにリンクを記載しておきます。
[[20210125102843]]

(じゃふ) 2021/01/27(水) 15:46


(OK)さん、(じゃぶ)さん 回答ありがとうございます。

番号をまとめた意図はありますか。

ファイル名の表示部分なので1)とまとめただけで深い意味はありません。

以下修正箇所です。

単純ミスでFOR分で上書きの為にファイル名が表示されていませんでした。
以下のように変更してA1への上書きはなくなりファイル名は不完全ながら表示されるようになりました。
 For i = 2 To LowCount

以下のように修正しましたが
Sheet2.Range("A1") = "File " & "" & Sheet1.Range("e2") & """ " & " MP3"

File ファイル名" MP3

  前半の”(引用符)がやはり表示されない形式で書き込まれました
  (後半の”(引用符)は表示されるようになった)

E2になぜだか?ファイル名が表示されるも引用符の問題も解決しません。

(動画ファン) 2021/01/27(水) 16:14


 >& "" &

 ↓を試してみてください。

 MsgBox "A"
 MsgBox ""
(OK) 2021/01/27(水) 16:18

>ファイル名の表示部分なので1)とまとめただけ
了解致しました。
わたしは、前半部分の原因と後半部分の原因は別ものだと思っています。
話が混ざるとわかりづらいと思いますので、前半部分について解決されるまで、いったんROMすることにします。
(じゃふ) 2021/01/27(水) 16:40

わたしは、前半部分の原因と後半部分の原因は別ものだと思っています。

じゃふさん、原因がわかりました。
 (はずかしい思い違いが。。。。)

フォルダーパスを書き出す場所が指定していなかったので
Sheet2を開いた状態でマクロを起動したのでSheet2のE2に表示されていました。

以下のように修正しました。

 Sheet1.Range("e2") = SearchPath

これで1)の後半部である下記の件は解決しました。
 シート2のA1に表示されるはずが、E2それらしきファイル名が表示される


↓を試してみてください。

以下の違いは、実行後の表示がどうなるかは理解できますし
実行後も思ったとうりの表示結果です。

MsgBox "A"

 MsgBox ""

でもまだ引用符のくくり方(個数)の問題はさっぱり理解が進みません。

(動画ファン) 2021/01/27(水) 17:22


 参考HPです。

http://officetanaka.net/excel/vba/tips/tips90.htm
(OK) 2021/01/27(水) 17:35


 >引用符のくくり方

 1.表示したい文字列の両サイドに「"」に付ける

 2.表示したい文字列に「"」が入っている場合は、
   1個に付き2個に増やす

 例 表示したい文字  AA"B"C             "AA""B""C"
                         ↓                   ↓
                    "AA""B""C"       """AA""""B""""C"""

(半平太) 2021/01/27(水) 17:39


半平太さん、解説ありがとうございます。

2.表示したい文字列に「"」が入っている場合は、1個に付き2個に増やす

(試行錯誤して)

解説を参考にして以下のコードで思ったような表示になりました。

Sheet2.Range("A1") = "File " & """" & Sheet1.Range("e2") & """" & " MP3"


後は、FOR文の2重ループの処理が問題なのでここに手を付けます。
(動画ファン) 2021/01/27(水) 18:36

 2重ループ必要無いですよね
 一重のループで3行書き込むってだけで
(とおりすがり) 2021/01/27(水) 18:41

とおりすがりさんのアドバイスありがとうございます。

一重のループで3行書き込むってだけで

テストで単ループにしました。

下記でi=2の1回目までは、上手く書き込みできましたが
iが更新されて3以上になるTRACKが上書きされるたり
  上手く処理できなくなります。

For i = 2 To LowCount

        Sheet2.Cells(i, "A") = "TRACK 0" & (i - 1) & " AUDIO"
        Sheet2.Cells(i + 1, "A") = "TITLE " & Sheet1.Cells(i, "B")
        Sheet2.Cells(i + 2, "A") = "INDEX 01 " & Sheet1.Cells(i, "C")
Next i
(動画ファン) 2021/01/27(水) 19:06

 元の行数の

3倍

 の行数を書き込むんですよ
(とおりすがり) 2021/01/27(水) 19:13

 とおりすがりさんのレスに付け加えると
 こういうことです。

 1つのレコードが3行に渡る場合

 1 1つ目のレコードの1行目
 2 1つ目のレコードの2行目
 3 1つ目のレコードの3行目
 4 2つ目のレコードの1行目
 5 2つ目のレコードの2行目
 6 2つ目のレコードの3行目
 7 3つ目のレコードの1行目
 8 3つ目のレコードの2行目
 9 3つ目のレコードの3行目
(OK) 2021/01/27(水) 19:47

皆さんのアドバイスを受けてFOR文のループ方法を下記のように変更しました。
一応、思ったようにCUEシートを作成できましたが
コードで改善点あればアドバイスお願いします。

Sub CUE_LIST()

Dim i As Integer
Dim LowCount As Integer
Dim SearchPath As String
Dim ii As Long
Dim 最終行 As Long
Dim 最終列 As Long

'ターゲットのフォルダー(パス)をダイアログ選択

 '   If Application.FileDialog(msoFileDialogFolderPicker).Show = True Then
 '     SearchPath = Application.FileDialog(msoFileDialogFolderPicker).SelectedItems(1)
 '      Sheet1.Range("e2") = SearchPath
 '  End If

'CUEシートクリアー(初期化)
Worksheets("Sheet2").Cells.Clear

'CUEシートセル塗り分け解除(初期化)
Worksheets("Sheet2").Cells.Interior.ColorIndex = xlNone

'CUEシート書き出し
LowCount = Sheet1.Cells(Rows.Count, 1).End(xlUp).Row

For i = 0 To LowCount - 1

        Sheet2.Cells(3 * i + 1, "A") = "TRACK 0" & (i + 1) & " AUDIO"
        Sheet2.Cells(3 * i + 2, "A") = "TITLE " & """" & Sheet1.Cells(i + 2, "B") & """"
        Sheet2.Cells(3 * i + 3, "A") = "INDEX 01 " & Sheet1.Cells(i + 2, "C")
Next i

Sheet2.Range("A1").Insert
Sheet2.Range("A1") = "File " & """" & Sheet1.Range("e2") & """" & " MP3"

'CUEシートを見やすくするためセルを塗り分け

   最終行 = Cells(Rows.Count, 1).End(xlUp).Row
   最終列 = Cells(1, Columns.Count).End(xlToLeft).Column
Application.ScreenUpdating = False
  For ii = 2 To 最終行 Step 3
    Sheet2.Range(Cells(ii, 1), Cells(ii, 最終列)).Interior.Color = RGB(192, 192, 192)
  Next ii
Application.ScreenUpdating = True

End Sub

(動画ファン) 2021/01/28(木) 04:04


 正しく動作しているならいいじゃないかと思いますが、
 Sheet1 と Worksheets("Sheet1") の違いを知らずに使っているのか
 解ってて使っているのか判断つかないので、一応

 もしかしてですが、解らずに使っているなら、一度調べてみた方がいいと思います。
(とおりすがり) 2021/01/28(木) 06:45

コードの修正を始めました。

Sheet1のC列の時間表示は文字列なので
これを合計するのにTIMEVALE関数で数値に直して
 D3=TIMEVALUE(C2)
 D4=D3+TIMEVALUE(C3)
 D5以下は、D4のコピペ

これをSheet2に書き出すのに
  Sheet2.Cells(3 * i + 3, "A") = "INDEX 01 " & Sheet1.Cells(i + 2, "C")
を下記のように変更しましたが
  Sheet2.Cells(3 * i + 3, "A") = "INDEX 01 " & Sheet1.Cells(i + 2, "D")
  
INDEX 01 3.76157407407407E-03
  のように時間表示では無いので
もう一度文字列に変換しようと下記式にしましたが
 コンパイルエラー(メソッドまたはデータメンバが見つかりません。)
 となりました。

Sheet2.Cells(3 * i + 3, "A") = "INDEX 01 " & Sheet1.Text(Cells(i + 2, "D"), "hhmmss")

どのように修正すれば良いですか ?

(動画ファン) 2021/01/28(木) 09:27


 ??

 >Sheet1.Text(Cells(i + 2, "D"), "hhmmss") 
(OK) 2021/01/28(木) 10:01

 Format関数をお調べください。

 それと、とおりすがりさんの、
 >Sheet1 と Worksheets("Sheet1") の違いを知らずに使っているのか
 >解ってて使っているのか判断つかないので、一応
 >もしかしてですが、解らずに使っているなら、一度調べてみた方がいいと思います。

 は大丈夫ですか?
 コード修正の前にすべきことだと思いますが。
(OK) 2021/01/28(木) 10:04

 こちらも参考に。

https://www.exvba.com/2183/
(OK) 2021/01/28(木) 10:45


VBAで処理するのは能力不足なので
 ワークシート関数で処理することにしました。

列を追加して
 E2=TEXT(D2,"hh:mm:ss")

以下に修正
Sheet2.Cells(3 * i + 3, "A") = "INDEX 01 " & Sheet1.Cells(i + 2, "E")

(動画ファン) 2021/01/28(木) 11:45


 私のアドバイスは受け入れていただけないようですので、
 ここで降ります。
(OK) 2021/01/28(木) 11:53

コメント返信:

[ 一覧(最新更新順) ]


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