[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『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)前半(引用符が記載できない件)と後半(表示箇所が異なる件)は同一の問題なのですか。別件だと思うのですが、番号をまとめた意図はありますか。
(じゃふ) 2021/01/27(水) 15:46
番号をまとめた意図はありますか。
ファイル名の表示部分なので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
わたしは、前半部分の原因と後半部分の原因は別ものだと思っています。
じゃふさん、原因がわかりました。
(はずかしい思い違いが。。。。)
フォルダーパスを書き出す場所が指定していなかったので
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"
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
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
列を追加して
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.