Excel VBA質問箱 IV

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

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


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

【28798】取得してあるCSVファイルの情報を別のBOOKに順に貼り付けていきたい チキ 05/9/14(水) 23:17 質問[未読]
【28807】Re:取得してあるCSVファイルの情報を別のB... ichinose 05/9/15(木) 7:40 発言[未読]
【28834】Re:取得してあるCSVファイルの情報を別の... チキ 05/9/15(木) 20:51 質問[未読]
【28839】Re:取得してあるCSVファイルの情報を別の... チキ 05/9/15(木) 23:35 質問[未読]
【28844】Re:取得してあるCSVファイルの情報を別の... ichinose 05/9/16(金) 7:54 発言[未読]
【28847】Re:取得してあるCSVファイルの情報を別の... チキ 05/9/16(金) 9:30 お礼[未読]

【28798】取得してあるCSVファイルの情報を別のBO...
質問  チキ  - 05/9/14(水) 23:17 -

引用なし
パスワード
   初めての投稿なのですがよろしくお願い致します。
質問の内容ですが、

ダウンロードしてきたファイルがそれぞれフォルダの中に入っています。
そのフォルダ名は取得して"フォルダ名"というシートにA2から順に下へ一覧になっています。
その一覧の名前のBOOKをA2から下に順に開いて、A1からB10000までコピーして
USD_JPYチャートというまとめるためのBOOKに順に貼り付けたいと思っていますが、うまくいきません。
以下に自分で作ってみたものを書きますがどこがおかしいのでしょうか?


Sub 貼り付ける()

Dim 取得フォルダ名 As String
Dim ファイル名 As String

行 = 2
列 = 1

Do While 取得フォルダ名 <> ""
取得フォルダ名 = Workbooks("USD_JPYチャート").Sheets("フォルダ名").Cells(行, 1).Value
ファイル名 = "C:\Documents and Settings\Owner\デスクトップ\為替レート\USD_JPY\レート\取得フォルダ名\.csv"
Workbooks(ファイル名).Open
Sheets("USD_JPY_bid").Range("A1:B10000").Copy
Workbooks("USD_JPYチャート").Sheets("レート").Cells(1, 列).Paste
行 = 行 + 1
列 = 列 + 2

Loop

End Sub

【28807】Re:取得してあるCSVファイルの情報を別の...
発言  ichinose  - 05/9/15(木) 7:40 -

引用なし
パスワード
   ▼チキ さん:
おはようございます。

>初めての投稿なのですがよろしくお願い致します。
>質問の内容ですが、
>
>ダウンロードしてきたファイルがそれぞれフォルダの中に入っています。
>そのフォルダ名は取得して"フォルダ名"というシートにA2から順に下へ一覧になっています。
>その一覧の名前のBOOKをA2から下に順に開いて、A1からB10000までコピーして
>USD_JPYチャートというまとめるためのBOOKに順に貼り付けたいと思っていますが、うまくいきません。

フォルダ名が実際、どのように入っているのか
例を挙げてください。
それから、「うまくいかない」と記述するのではなく、

「xxxという仕様で記述したコードですが、
実際に実行してみると、何も起こらずに終了してしまいます」

とか

「コードのこの箇所でXXXXというエラーが発生します」

等、詳細に記述してください。


>Sub 貼り付ける()
>
>Dim 取得フォルダ名 As String
>Dim ファイル名 As String
>
>行 = 2
>列 = 1
>


>Do While 取得フォルダ名 <> ""
'     ↑取得フォルダ名が未入力でない間は ループ
'     だけど、いきなり 未入力だから、ループしないでしょ?
'     大きい間違いはここだと思います。
>取得フォルダ名 = Workbooks("USD_JPYチャート").Sheets("フォルダ名").Cells(行, 1).Value
>ファイル名 = "C:\Documents and Settings\Owner\デスクトップ\為替レート\USD_JPY\レート\取得フォルダ名\.csv"
'この文字列と文字列変数の連結(だと思いますが)も記述が違うと思いますから、
'過去ログを調べてください。

>Workbooks(ファイル名).Open
>Sheets("USD_JPY_bid").Range("A1:B10000").Copy
>Workbooks("USD_JPYチャート").Sheets("レート").Cells(1, 列).Paste
>行 = 行 + 1
>列 = 列 + 2
>
>Loop
>
>End Sub

【28834】Re:取得してあるCSVファイルの情報を別の...
質問  チキ  - 05/9/15(木) 20:51 -

引用なし
パスワード
   ▼ichinose さん:

返事が遅れてしまい申し訳ありません。


>▼チキ さん:
>おはようございます。
>
>>初めての投稿なのですがよろしくお願い致します。
>>質問の内容ですが、
>>
>>ダウンロードしてきたファイルがそれぞれフォルダの中に入っています。
>>そのフォルダ名は取得して"フォルダ名"というシートにA2から順に下へ一覧になっています。

ex
    A
2 20050812
3 20050813
4 20050815
5 20050816
6 20050819
    ・
    ・


>>その一覧の名前のBOOKをA2から下に順に開いて、A1からB10000までコピーして
>>USD_JPYチャートというまとめるためのBOOKに順に貼り付けたいと思っていますが、うまくいきません。
>
>フォルダ名が実際、どのように入っているのか
>例を挙げてください。

C:\Documents and Settings\Owner\デスクトップ\為替レート\USD_JPY\レート以下に
tick_********_USD_JPYというフォルダがたくさんあり(********の部分は日付です。ex20050901)、
その下にUSD_JPY_bidというどのフォルダも共通の名前のファイルが入っています。


>それから、「うまくいかない」と記述するのではなく、
>
>「xxxという仕様で記述したコードですが、
>実際に実行してみると、何も起こらずに終了してしまいます」
>
>とか
>
>「コードのこの箇所でXXXXというエラーが発生します」
>
>等、詳細に記述してください。


申し訳ありません。何も起こらず終了してしまいます。


>
>
>>Sub 貼り付ける()
>>
>>Dim 取得フォルダ名 As String
>>Dim ファイル名 As String
>>
>>行 = 2
>>列 = 1
>>
>
>
>>Do While 取得フォルダ名 <> ""
>'     ↑取得フォルダ名が未入力でない間は ループ
>'     だけど、いきなり 未入力だから、ループしないでしょ?
>'     大きい間違いはここだと思います。
>>取得フォルダ名 = Workbooks("USD_JPYチャート").Sheets("フォルダ名").Cells(行, 1).Value
>>ファイル名 = "C:\Documents and Settings\Owner\デスクトップ\為替レート\USD_JPY\レート\取得フォルダ名\.csv"
>'この文字列と文字列変数の連結(だと思いますが)も記述が違うと思いますから、
>'過去ログを調べてください。
>

Do Loopを使ったプログラムを書くのは全く初めてなので、かなり見当違いのことをしてしまっているようです。
もう少し粘って調べてみます。
お返事ありがとうございます。


>>Workbooks(ファイル名).Open
>>Sheets("USD_JPY_bid").Range("A1:B10000").Copy
>>Workbooks("USD_JPYチャート").Sheets("レート").Cells(1, 列).Paste
>>行 = 行 + 1
>>列 = 列 + 2
>>
>>Loop
>>
>>End Sub

【28839】Re:取得してあるCSVファイルの情報を別の...
質問  チキ  - 05/9/15(木) 23:35 -

引用なし
パスワード
   最終的にこのように書き直してみたのですが、

以下の

ファイル名 = "C:\Documents and Settings\Owner\デスクトップ\為替レート\USD_JPY\レート\" & "取得フォルダ名" & "\ USD_JPY_bid.csv"

のところで

実行時エラー"1004"
'C:\Documents and Settings\Owner\デスクトップ\為替レート\USD_JPY\レート\" & "取得フォルダ名" & "\ USD_JPY_bid.csv'が見つかりません。

と出てしまいます。

これは取得フォルダ名が文字列変数として認識されていないということなのでしょうか?
もしくはこのような構文は全く見当違いなのでしょうか?
全く分かりません。

どなたか教えて下さい。お願いします。


Sub 貼り付ける()

Dim 取得フォルダ名 As String
Dim ファイル名 As String

行 = 2
列 = 1
取得フォルダ名 = Workbooks("USD_JPYチャート").Sheets("フォルダ名").Cells(行, 1).Value

Do While 取得フォルダ名 <> ""

ファイル名 = "C:\Documents and Settings\Owner\デスクトップ\為替レート\USD_JPY\レート\" & "取得フォルダ名" & "\ USD_JPY_bid.csv"
Workbooks.Open Filename:=ファイル名
Sheets("USD_JPY_bid").Range("A1:B10000").Copy
Workbooks("USD_JPYチャート").Sheets("レート").Cells(1, 列).Paste
行 = 行 + 1
列 = 列 + 2

Loop

End Sub

【28844】Re:取得してあるCSVファイルの情報を別の...
発言  ichinose  - 05/9/16(金) 7:54 -

引用なし
パスワード
   ▼チキ さん:
おはようございます。

>最終的にこのように書き直してみたのですが、
>
>以下の
>
>ファイル名 = "C:\Documents and Settings\Owner\デスクトップ\為替レート\USD_JPY\レート\" & "取得フォルダ名" & "\ USD_JPY_bid.csv"
>
>のところで
>
>実行時エラー"1004"
>'C:\Documents and Settings\Owner\デスクトップ\為替レート\USD_JPY\レート\" & "取得フォルダ名" & "\ USD_JPY_bid.csv'が見つかりません。
>と出てしまいます。
>
>これは取得フォルダ名が文字列変数として認識されていないということなのでしょうか?
そうです、そのとおりです。

""で囲むのは文字列です。取得フォルダ名というのは文字列変数ですよね?
""(ダブルコーテーション)で囲んでしまうと「取得フォルダ名」という文字列が
ファイル名という変数の中に他の文字列と一緒に設定されてしまいます。
よって、ファイル名という変数にはいつも同じ文字列が設定されることになってしまいます。


>もしくはこのような構文は全く見当違いなのでしょうか?
>全く分かりません。
>
>どなたか教えて下さい。お願いします。
>
>
>Sub 貼り付ける()
>
>Dim 取得フォルダ名 As String
>Dim ファイル名 As String
>
>行 = 2
>列 = 1
>取得フォルダ名 = Workbooks("USD_JPYチャート").Sheets("フォルダ名").Cells(行, 1).Value
>
>Do While 取得フォルダ名 <> ""
>
ファイル名 = "C:\Documents and Settings\Owner\デスクトップ\為替レート\USD_JPY\レート\" & 取得フォルダ名 & "\USD_JPY_bid.csv"
' 取得フォルダ名は、""で囲まない
'  "\ USD_JPY_bid.csv"の\とファイル名の間は詰めてください          
>Workbooks.Open Filename:=ファイル名
>Sheets("USD_JPY_bid").Range("A1:B10000").Copy
>Workbooks("USD_JPYチャート").Sheets("レート").Cells(1, 列).Paste
Workbooks("USD_JPY_bid.csv").close False
'開いたブックは閉じなければなりませんね
doevents
>行 = 行 + 1
>列 = 列 + 2
取得フォルダ名 = Workbooks("USD_JPYチャート").Sheets("フォルダ名").Cells(行, 1).Value
' 新たなフォルダ名も設定しないと次に進まないし、今度は、終わりませんよ!!
>Loop
>
>End Sub

ざっと見た限り、気が付いたのはこんなところです。

【28847】Re:取得してあるCSVファイルの情報を別の...
お礼  チキ  - 05/9/16(金) 9:30 -

引用なし
パスワード
   ▼ichinose さん:


ご指導ありがとうございました。
最終的に以下のように書き直したところ無事にできました。
感謝感謝です。


Sub 貼り付ける()

Dim 取得フォルダ名 As String
Dim ファイル名 As String

行 = 2
列 = 1
取得フォルダ名 = Workbooks("USD_JPYチャート").Sheets("フォルダ名").Cells(行, 1).Value

Do While 取得フォルダ名 <> ""

ファイル名 = "C:\Documents and Settings\Owner\デスクトップ\為替レート\USD_JPY\レート\" & 取得フォルダ名 & "\USD_JPY_bid.csv"
Workbooks.Open Filename:=ファイル名
Sheets("USD_JPY_bid").Range("A1:B10000").Copy
Windows("USD_JPYチャート.xls").Activate
Sheets("レート").Select
Cells(1, 列).Select
ActiveSheet.Paste
Application.CutCopyMode = False
Workbooks("USD_JPY_bid.csv").Close False
行 = 行 + 1
列 = 列 + 2
取得フォルダ名 = Workbooks("USD_JPYチャート").Sheets("フォルダ名").Cells(行, 1).Value
Loop

End Sub

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