質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

2回答

3061閲覧

フォルダ内のファイル名を読み込み2次配列に入れたいが、記述が正しくないのか「InputBox」のある行まで辿り着けない。

Yukiyama7.4

総合スコア20

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2017/01/16 11:43

閲覧頂きありがとうございます。
質問内容はタイトル通りです。

マクロ概要
平仮名、片仮名、アルファベット、数字が混合した.wavファイルが入っているフォルダを読み込み、ファイル名を配列に入れ左端1文字を比較して50音順にソート。左端1文字が平仮名もしくは片仮名でない場合はInputBoxを利用して読み仮名を入力。ソートが完了したらセルに出力して一覧を作成する。

下記のコードで行っている事
A1セルをフォルダパス入力欄とし、入力が完了したらマクロを起動。配列を宣言する為に、フォルダ内に幾つ.wavファイルがあるか調べる為、Dir関数をDo Loopで回す。ループを抜けたらファイル数をカウントしていた変数Countの数値を元に変数Coreを宣言する。配列の準備が整った所で再度Dir関数をDo Loopで回し、配列にファイル名と左端1文字の読み仮名を入れていく。この時左端1文字が平仮名もしくは片仮名以外ならInputBoxを使い読み仮名を入力する。

ソート機能はまだできていない為記載していません。
このコードだけでも正しく動いていれば途中でInputBoxが出て入力待ちになるはずなのですが、出てきません。
ご教授お願いします。

VBA

1Private Sub Worksheet_Change(ByVal Target As Range) 2 3 Const TgCel = "A1" 4 Dim Count As Long: Count = 0 5 Dim LoadFile As String 6 Dim Core() As Variant 7 8 If Not Intersect(Range(TgCel), Target) Is Nothing Then 9 LoadFile = Dir(A1 & ".wav") 10 Do While LoadFile <> "" 11 LoadFile = Dir() 12 Count = Count + 1 13 Loop 14 ReDim Core(Count, 1) As Variant '(ファイル名,ファイル名頭文字) 15 Count = 0 16 LoadFile = Dir(A1 & ".wav") 17 Do While LoadFile <> "" 18 LoadFile = Left(LoadFile, -4) 19 Core(Count, 0) = LoadFile 20 If Right(LoadFile, 1) Like "[あ-ん]" Then 21 Core(Count, 1) = Right(LoadFile, 1) 22 ElseIf Right(LoadFile, 1) Like "[ア-ン]" Then 23 Core(Count, 1) = StrConv(Right(File, 1), vbHiragana) 24 Else 25 Core(Count, 1) = InputBox(LoadFile & "が読めませんでした。" & vbLf & _ 26 "平仮名で最初の読み仮名1文字を入力して下さい。", _ 27 "読み仮名の入力") 28 End If 29 Count = Count + 1 30 Loop 31 End If 32End Sub

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

コード拝見しました。
まず気になったのが2回目のループ処理中にあるLeft関数の使い方です。
単純ミスだとは思いますが、左から**-4文字**は取り出せません。
私の勘ですが、ファイル名の先頭にある「**01 **」といった文字列以降から1文字を取り出したかったのではないでしょうか?
もしそうであれば、下記のようなコードになります。

VBA

1Mid(LoadFile, 4, 1)

また、今のコードでは先頭1文字がアルファベットか数字の場合、毎回読み仮名を入力することになってしまうと思います。その点も改良が必要ですね。

投稿2017/01/16 12:47

編集2017/01/16 12:52
N-u-u

総合スコア113

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Yukiyama7.4

2017/01/23 19:01 編集

回答ありがとうざいます。 質問投稿直後に別のより簡単なコードを思いつき、無事求めていたマクロを開発できました。 ただこちらも記述方法を確かめられた為大変参考になりました。 解答を頂いたお二方ありがとうざいました。
guest

0

こんばんは。実際に動かして確認していませんが、

vba

1LoadFile = Dir(A1 & ".wav")

この部分は、

vba

1LoadFile = Dir(A1 & "*.wav")

ではないでしょうか。

このままだと、フォルダパス.wavというファイルを決め打ちで探すことになると思います。

投稿2017/01/16 12:26

Wolf

総合スコア38

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問