Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


10552 / 13644 ツリー ←次へ | 前へ→

【21101】助けてください… ヒロ 05/1/11(火) 22:54 質問[未読]
【21104】Re:助けてください… ちゃっぴ 05/1/11(火) 23:47 回答[未読]
【21106】ありがとうございます!! ヒロ 05/1/12(水) 0:40 お礼[未読]
【21105】Re:コンボボックスで選択したフォルダのフ... かみちゃん 05/1/12(水) 0:06 回答[未読]
【21107】ありがとうございます!! ヒロ 05/1/12(水) 0:46 お礼[未読]
【21140】もう1度教えてください… ヒロ 05/1/12(水) 23:51 質問[未読]
【21143】Re:コンボボックスで選択したフォルダのフ... かみちゃん 05/1/13(木) 6:28 回答[未読]
【21170】ありがとうございました!!! ヒロ 05/1/13(木) 18:56 お礼[未読]

【21101】助けてください…
質問  ヒロ E-MAIL  - 05/1/11(火) 22:54 -

引用なし
パスワード
   VBA初心者です。よろしくお願いします。
質問
・ コンボボックスで条件を選択して、その条件にあったフォルダからフォルダ内 にあるCSVファイルのデータを集計する。

条件… 
・ フォルダの数は50前後
・ それぞれのフォルダに同じ名前のCSVファイルが入っている。(データの値は違う。)
・ 集計するシートは1つで、選択された条件でそのシートにデータを表示して集計する。

      例 フォルダ名→ 千葉市、横浜市
        ファイル名→ A200404_200404.csv、B200501_200501.csv
            (このファイル名がそれぞれのフォルダに入っている。)

 このような内容です。
 マクロの記述で、選択されたフォルダからその中のファイルを開き、データを集計シートにコピーするというものですが、それぞれのフォルダ名をマクロに記述したのでは重くなりすぎますし、新しく条件が追加されたときにマクロも追加しなければなりません。できればそれは避けたいので是非記述の仕方を教えてください。
 因みに1週間悩んでいます。
 よろしくお願い致します。

【21104】Re:助けてください…
回答  ちゃっぴ  - 05/1/11(火) 23:47 -

引用なし
パスワード
   一箇所のFolderに集めておいて、FolderのPathを取得すれば
いいのではないでしょうか?

FileのPath取得についてはこちらに書いておいたので参考にしてください。

http://www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=74;id=FAQ

Folderもちょこっといじれば出来ます。

【21105】Re:コンボボックスで選択したフォルダの...
回答  かみちゃん  - 05/1/12(水) 0:06 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>・ コンボボックスで条件を選択して、その条件にあったフォルダからフォルダ内 にあるCSVファイルのデータを集計する。

以下のコードは、フォーム表示時に、フォルダ一覧ょコンボボックスに取得します。
次にコンボボックスから値を選択し、コマンドボタンをクリックすることにより、
コンボボックスで選択したフォルダ内にあるCSVファイルのファイル名を表示します。
ただし、サブフォルダには対応していません。

Option Explicit

Private strStartPathName As String

Private Sub UserForm_Initialize()
 Dim strPathName As String

 'コンボボックスに表示したいフォルダの親フォルダを指定します。
 '(例)マクロのあるブックのパスの場合
 strStartPathName = ThisWorkbook.Path & "\"
 '最初のフォルダ名を取得
 strPathName = Dir(strStartPathName, vbDirectory)

 Do While strPathName <> ""  ' ループを開始します。
  ' 現在のフォルダと親フォルダは無視します。
  If strPathName <> "." And strPathName <> ".." Then
   ' ビット単位の比較を行い、strPathName がフォルダかどうかを調べます。
   If (GetAttr(strStartPathName & strPathName) And vbDirectory) = vbDirectory Then
    Me.ComboBox1.AddItem strPathName    ' フォルダであれば、それを表示します。
   End If
  End If
  strPathName = Dir          ' 次のフォルダ名を返します。
 Loop
End Sub

Private Sub CommandButton1_Click()
 Dim strFileName As String
 
 strFileName = Dir(strStartPathName & Me.ComboBox1.Value & "\*.csv")
 Do While strFileName <> ""  ' ループを開始します。
  'CSVファイル名を表示します。
  MsgBox strStartPathName & Me.ComboBox1.Value & "\" & strFileName
  strFileName = Dir          ' 次のフォルダ名を返します。
 Loop
End Sub

【21106】ありがとうございます!!
お礼  ヒロ E-MAIL  - 05/1/12(水) 0:40 -

引用なし
パスワード
   大変参考になりました。
初心者なものですから、記述された内容がわからないところも多々ありますが、自力で解析してみます。
貴重なご回答に感謝致します。


▼ちゃっぴ さん:
>一箇所のFolderに集めておいて、FolderのPathを取得すれば
>いいのではないでしょうか?
>
>FileのPath取得についてはこちらに書いておいたので参考にしてください。
>
>http://www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=74;id=FAQ
>
>Folderもちょこっといじれば出来ます。

【21107】ありがとうございます!!
お礼  ヒロ E-MAIL  - 05/1/12(水) 0:46 -

引用なし
パスワード
   大変参考になりました。
初心者なものですから、記述でわからないところも多々ありますが、自力で解析してみます。
貴重なご回答をありがとうございました。


▼かみちゃん さん:
>こんにちは。かみちゃん です。
>
>>・ コンボボックスで条件を選択して、その条件にあったフォルダからフォルダ内 にあるCSVファイルのデータを集計する。
>
>以下のコードは、フォーム表示時に、フォルダ一覧ょコンボボックスに取得します。
>次にコンボボックスから値を選択し、コマンドボタンをクリックすることにより、
>コンボボックスで選択したフォルダ内にあるCSVファイルのファイル名を表示します。
>ただし、サブフォルダには対応していません。
>
>Option Explicit
>
>Private strStartPathName As String
>
>Private Sub UserForm_Initialize()
> Dim strPathName As String
>
> 'コンボボックスに表示したいフォルダの親フォルダを指定します。
> '(例)マクロのあるブックのパスの場合
> strStartPathName = ThisWorkbook.Path & "\"
> '最初のフォルダ名を取得
> strPathName = Dir(strStartPathName, vbDirectory)
>
> Do While strPathName <> ""  ' ループを開始します。
>  ' 現在のフォルダと親フォルダは無視します。
>  If strPathName <> "." And strPathName <> ".." Then
>   ' ビット単位の比較を行い、strPathName がフォルダかどうかを調べます。
>   If (GetAttr(strStartPathName & strPathName) And vbDirectory) = vbDirectory Then
>    Me.ComboBox1.AddItem strPathName    ' フォルダであれば、それを表示します。
>   End If
>  End If
>  strPathName = Dir          ' 次のフォルダ名を返します。
> Loop
>End Sub
>
>Private Sub CommandButton1_Click()
> Dim strFileName As String
> 
> strFileName = Dir(strStartPathName & Me.ComboBox1.Value & "\*.csv")
> Do While strFileName <> ""  ' ループを開始します。
>  'CSVファイル名を表示します。
>  MsgBox strStartPathName & Me.ComboBox1.Value & "\" & strFileName
>  strFileName = Dir          ' 次のフォルダ名を返します。
> Loop
>End Sub

【21140】もう1度教えてください…
質問  ヒロ E-MAIL  - 05/1/12(水) 23:51 -

引用なし
パスワード
   昨日質問させていただいたヒロです。
折角ご教授頂いたのですが、どうもうまくいきません。
マクロ自体もうまく解読出来ませんでした。申し訳ありません。
私の質問の仕方が悪かったんだと思いますので、再度教えてください。
質問の内容は昨日と同じです。
例を挙げて状況を説明させて頂きます。

例えば… 
千葉市、横浜市、仙台市…というフォルダがあるとします。
そのそれぞれのフォルダの中にA200404_200404.csv、A200405_200405.csv…
B200404_200404.csv、B200405_200405.csv…という頭がA、B2種類の月別のファイルが入っています。
そのファイルを集計したいのですが、ファイルの中身が、
頭がAのファイル
   A      B      C     D    E  F  G
1      人口男  人口女  世帯数 
2 200404   50000   51000  62000
3
4
となっているとします。(Bのファイルも項目が違うだけで同じような内容です。)
そして集計シートが
  A      B    C     D     E      F     G
          4月        5月          6月   … 
1      人数  前月比  人数  前月比  人数  前月比
2 人口男 50000 
2 人口女 51000
3 世帯数 62000
4
となるようにしたいのです。
集計するシートはA、Bそれぞれ1枚ずつで、フォルダ名=都市名とし、都市名を選択するとそれぞれの都市の月別の集計結果が見られるようにしたいのですが…。
本当に素人で申し訳ありません。
昨日ご回答頂いた内容も上記のことができるようになっていたのかもしれませんが、うまく組めませんでした。
よろしくお願い致します。
長くなって申し訳ありません。

ヒロ


▼ヒロ さん:
>大変参考になりました。
>初心者なものですから、記述でわからないところも多々ありますが、自力で解析してみます。
>貴重なご回答をありがとうございました。
>
>
>▼かみちゃん さん:
>>こんにちは。かみちゃん です。
>>
>>>・ コンボボックスで条件を選択して、その条件にあったフォルダからフォルダ内 にあるCSVファイルのデータを集計する。
>>
>>以下のコードは、フォーム表示時に、フォルダ一覧ょコンボボックスに取得します。
>>次にコンボボックスから値を選択し、コマンドボタンをクリックすることにより、
>>コンボボックスで選択したフォルダ内にあるCSVファイルのファイル名を表示します。
>>ただし、サブフォルダには対応していません。
>>
>>Option Explicit
>>
>>Private strStartPathName As String
>>
>>Private Sub UserForm_Initialize()
>> Dim strPathName As String
>>
>> 'コンボボックスに表示したいフォルダの親フォルダを指定します。
>> '(例)マクロのあるブックのパスの場合
>> strStartPathName = ThisWorkbook.Path & "\"
>> '最初のフォルダ名を取得
>> strPathName = Dir(strStartPathName, vbDirectory)
>>
>> Do While strPathName <> ""  ' ループを開始します。
>>  ' 現在のフォルダと親フォルダは無視します。
>>  If strPathName <> "." And strPathName <> ".." Then
>>   ' ビット単位の比較を行い、strPathName がフォルダかどうかを調べます。
>>   If (GetAttr(strStartPathName & strPathName) And vbDirectory) = vbDirectory Then
>>    Me.ComboBox1.AddItem strPathName    ' フォルダであれば、それを表示します。
>>   End If
>>  End If
>>  strPathName = Dir          ' 次のフォルダ名を返します。
>> Loop
>>End Sub
>>
>>Private Sub CommandButton1_Click()
>> Dim strFileName As String
>> 
>> strFileName = Dir(strStartPathName & Me.ComboBox1.Value & "\*.csv")
>> Do While strFileName <> ""  ' ループを開始します。
>>  'CSVファイル名を表示します。
>>  MsgBox strStartPathName & Me.ComboBox1.Value & "\" & strFileName
>>  strFileName = Dir          ' 次のフォルダ名を返します。
>> Loop
>>End Sub

【21143】Re:コンボボックスで選択したフォルダの...
回答  かみちゃん  - 05/1/13(木) 6:28 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>どうもうまくいきません。
>マクロ自体もうまく解読出来ませんでした。申し訳ありません。

どこがどううまくできなかったのでしょうか?
ユーザーフォーム上に、コンボボックスとコマンドボタンを1個ずつ配置して、マ
クロを実行(ユーザーフォームを表示)すると、マクロを書いたブックの配下にあ
るフォルダ一覧をコンボボックスに取得します。
次にコンボボックスからフォルダを選択して、コマンドボタンをクリックすると、
選択したフォルダ内のCSVファイルをメッセージボックスに表示していきます。

ここまではできているのでしょうか?

>集計するシートはA、Bそれぞれ1枚ずつで、フォルダ名=都市名とし、都市名を選択するとそれぞれの都市の月別の集計結果が見られるようにしたいのですが…。

たとえば、マクロではなく、手動でひとつずつファイルを開いて、ひとつのシート
にまとめて、期待する表に集計することはできるのでしょうか?

前半のファイル名を取得するマクロと後半の集計するマクロとは、別に考えたほう
がいいと思います。
前回のコメントは、ファイル名を取得する方法がわからないということだと思いま
したので、コードを提示させていただきました。
後半の部分は、手動でできるのならば、まずは、マクロの記録を試してみたらいか
がでしょうか?
そして、その中に読み込むファイル名が記述されているので、そこを前半のファイ
ル名を取得するコードで取得したファイル名に置き換えるようにすればいいので。

※タイトルは、内容を示す具体的な内容にしてください。
 引用は、最低限なものでいいです。(掲示板がスレッド表示できるので)

【21170】ありがとうございました!!!
お礼  ヒロ E-MAIL  - 05/1/13(木) 18:56 -

引用なし
パスワード
   こんにちは。

大変参考になりました。
おっしゃるとおり最初からやり直してみたらうまく動作しました。
それを参考にして組み込んでみたら、望んでいたとおりの動きをしてくれました。
感謝です!!1週間分の疲れが吹っ飛びました。
ありがとうございました。
因みに動かなかった原因として、手入力で記述したための入力ミスがありました。
申し訳ありませんでした。
また何かありましたらよろしくお願い致します。

 ヒロ


▼かみちゃん さん:
>こんにちは。かみちゃん です。
>
>>どうもうまくいきません。
>>マクロ自体もうまく解読出来ませんでした。申し訳ありません。
>
>どこがどううまくできなかったのでしょうか?
>ユーザーフォーム上に、コンボボックスとコマンドボタンを1個ずつ配置して、マ
>クロを実行(ユーザーフォームを表示)すると、マクロを書いたブックの配下にあ
>るフォルダ一覧をコンボボックスに取得します。
>次にコンボボックスからフォルダを選択して、コマンドボタンをクリックすると、
>選択したフォルダ内のCSVファイルをメッセージボックスに表示していきます。
>
>ここまではできているのでしょうか?
>
>>集計するシートはA、Bそれぞれ1枚ずつで、フォルダ名=都市名とし、都市名を選択するとそれぞれの都市の月別の集計結果が見られるようにしたいのですが…。
>
>たとえば、マクロではなく、手動でひとつずつファイルを開いて、ひとつのシート
>にまとめて、期待する表に集計することはできるのでしょうか?
>
>前半のファイル名を取得するマクロと後半の集計するマクロとは、別に考えたほう
>がいいと思います。
>前回のコメントは、ファイル名を取得する方法がわからないということだと思いま
>したので、コードを提示させていただきました。
>後半の部分は、手動でできるのならば、まずは、マクロの記録を試してみたらいか
>がでしょうか?
>そして、その中に読み込むファイル名が記述されているので、そこを前半のファイ
>ル名を取得するコードで取得したファイル名に置き換えるようにすればいいので。
>
>※タイトルは、内容を示す具体的な内容にしてください。
> 引用は、最低限なものでいいです。(掲示板がスレッド表示できるので)

10552 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free