Excel VBA質問箱 IV

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

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


7937 / 13645 ツリー ←次へ | 前へ→

【35969】外部txtからのデータ取込について こころ 06/3/16(木) 22:23 質問[未読]
【35971】Re:外部txtからのデータ取込について かみちゃん 06/3/16(木) 22:32 発言[未読]
【35972】Re:外部txtからのデータ取込について こころ 06/3/16(木) 22:38 発言[未読]
【35974】Re:外部txtからのデータ取込について かみちゃん 06/3/16(木) 22:45 回答[未読]
【35980】Re:外部txtからのデータ取込について こころ 06/3/17(金) 0:27 質問[未読]
【35981】Re:外部txtからのデータ取込について かみちゃん 06/3/17(金) 1:44 回答[未読]
【35984】Re:外部txtからのデータ取込について こころ 06/3/17(金) 3:47 質問[未読]
【35988】Re:外部txtからのデータ取込について かみちゃん 06/3/17(金) 9:47 回答[未読]
【35989】Re:外部txtからのデータ取込について こころ 06/3/17(金) 12:00 お礼[未読]

【35969】外部txtからのデータ取込について
質問  こころ  - 06/3/16(木) 22:23 -

引用なし
パスワード
   宜しくお願いします。
先ず過去の回答で下記のマクロ、とても参考になりました。
http://www.vbalab.net/vbaqa/c-board.cgi?cmd=one;no=28796;id=excel

上記の内容と私の違うところは
1、ファイル名
  050301rog.txt、050302rog.txtのようにyymmddrog.txtで毎日追加されます。
2、テキストファイル内に日付がありません。
  過去の事例ではtxtの1列目に日付がありますが、私のは無いです。
  日付はファイル名から取得します。 
  過去の事例→ 20050901,1001,0,0,1,003,1800

そこで下記のように改良して見ましたが「型が一致しません」表示します。
どうかアドバイスをお願い致します。

dim filedate As Variant


  For i = 1 To UBound(vntFileNames)
  '指定されたファイルをOpen
    dfn = FreeFile
  Open vntFileNames(i) For Input As dfn
    'ファイルから日付を取得
    Do Until EOF(dfn)
      'ファイルから1行読み込み
      Line Input #dfn, strBuff
      'フィールドに分割
      vntField = Split(strBuff, ",", , vbBinaryCompare)
      '「20050731」形式の日付をシリアル値に変換
      filedate = CLng(DateValue(Left(vntFileNames(i), 2) _
                & "/" & Mid(vntFileNames(i), 3, 2) _
                & "/" & Mid(vntFileNames(i), 5, 2)))
      '日付を探索
      lngRow = GetDateColumn(filedate, rngDate, _
                rngResult.Offset(, clngTop)) + clngTop

【35971】Re:外部txtからのデータ取込について
発言  かみちゃん  - 06/3/16(木) 22:32 -

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

>そこで下記のように改良して見ましたが「型が一致しません」表示します。

そのエラーメッセージが表示されたときに、「デバッグ」をクリックしたら、
どこの行が反転しますか?
その反転した箇所がエラーになっているコードです。

改良したコード全体がないので、検証のしようもありませんので、
せめて、どのコードでエラーになっているのか教えてください。

【35972】Re:外部txtからのデータ取込について
発言  こころ  - 06/3/16(木) 22:38 -

引用なし
パスワード
   ご指摘恐縮です。

デバックでの反転は下記のところになります。


    '「20050731」形式の日付をシリアル値に変換
    filedate = CLng(DateValue(Left(vntFileName(i), 2) _
               & "/" & Mid(vntFileName(i), 3, 2) _
               & "/" & Mid(vntFileName(i), 5, 2)))


何卒お願いいたします。

【35974】Re:外部txtからのデータ取込について
回答  かみちゃん  - 06/3/16(木) 22:45 -

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

>デバックでの反転は下記のところになります。
>
>
>    '「20050731」形式の日付をシリアル値に変換
>    filedate = CLng(DateValue(Left(vntFileName(i), 2) _
>               & "/" & Mid(vntFileName(i), 3, 2) _
>               & "/" & Mid(vntFileName(i), 5, 2)))

MsgBox vntFileNames(i)
として、vntFileNames(i) の内容を確認してみてください。
vntFileNames(i) が日付ではなくファイル名のフルパスではないでしょうか?

つまり、
filedate = CLng(DateValue(Format(Left(Right(vntFileNames(i), 13), 6), "00\/00\/00")))
としないといけないと思います。

ファイル名の後ろから13文字取って、その文字列の左から6文字を日付とし、シリアル値に変換するという方法です。
もちろん、日付でない場合は、エラーになりますので、その対処がいるかもしれません。

【35980】Re:外部txtからのデータ取込について
質問  こころ  - 06/3/17(金) 0:27 -

引用なし
パスワード
   かみちゃん さん ありがとうございます。

ご指摘の通りフルパスでした。
ありがとうございます。
>vntFileNames(i) が日付ではなくファイル名のフルパスではないでしょうか?
>つまり、
>filedate = CLng(DateValue(Format(Left(Right(vntFileNames(i), 13), 6), "00\/00\/00")))


しかし、「型が一致しません」と
filedate = CLng(DateValue(Format(Left(Right(vntFileName(i), 12), 6), "00\/00\/00")))
でエラーになります。


下記の意味を教えていただけませんか
>もちろん、日付でない場合は、エラーになりますので、その対処がいるかもしれません。

【35981】Re:外部txtからのデータ取込について
回答  かみちゃん  - 06/3/17(金) 1:44 -

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

>しかし、「型が一致しません」と
>filedate = CLng(DateValue(Format(Left(Right(vntFileName(i), 12), 6), "00\/00\/00")))
>でエラーになります。

MsgBox Left(Right(vntFileName(i), 12), 6)
で何と表示されるか教えてください。
060317
などではないものが表示されているのではないでしょうか?

私が提示したコードは、「12」ではなく「13」としているのですが・・・

>下記の意味を教えていただけませんか
>>もちろん、日付でない場合は、エラーになりますので、その対処がいるかもしれません。

上記のように「型が一致しません」となる場合もあるということです。

たとえば、こんな感じです。

Sub Macro1()
 Dim strFileName As String
 Dim filedate

 strFileName = "050301rog.txt"
 
 '日付形式かどうかを判断
 If IsDate(Format(Left(Right(strFileName, 13), 6), "00\/00\/00")) Then
  filedate = CLng(DateValue(Format(Left(Right(strFileName, 13), 6), "00\/00\/00")))
  MsgBox filedate
 Else
  MsgBox "日付ではありません " & Left(Right(strFileName, 13), 6)
 End If
End Sub

【35984】Re:外部txtからのデータ取込について
質問  こころ  - 06/3/17(金) 3:47 -

引用なし
パスワード
   かみちゃん さん ありがとうございます。


MsgBox Left(Right(vntFileName(i), 13), 6)
では 060301 と表示します。


>私が提示したコードは、「12」ではなく「13」としているのですが・・・
 テスト用のファイルを使用しましたので意図的に12に変更しました


下記でテストしました。
msgboxは 38777 と表示されエラーはでません。

> Dim strFileName As String
> Dim filedate
>
> strFileName = vntFileName(i)
> 
> '日付形式かどうかを判断
> If IsDate(Format(Left(Right(strFileName, 13), 6), "00\/00\/00")) Then
>  filedate = CLng(DateValue(Format(Left(Right(strFileName, 13), 6), "00\/00\/00")))
>  MsgBox filedate
> Else
>  MsgBox "日付ではありません " & Left(Right(strFileName, 13), 6)
> End If


しかし実際に動かしてみると

Dim strFileName As String   '追加
strFileName = vntFileName(i)  '追加

'下記で「型が一致しません」とエラーになります
filedate = CLng(DateValue(Format(Left(Right(strFileName, 13), 6), "00\/00\/00")))

filedate 変数宣言を variantやDateにしましたが駄目です。


何卒アドバイスをお願い致します

【35988】Re:外部txtからのデータ取込について
回答  かみちゃん  - 06/3/17(金) 9:47 -

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

>'下記で「型が一致しません」とエラーになります
>filedate = CLng(DateValue(Format(Left(Right(strFileName, 13), 6), "00\/00\/00")))
>
>filedate 変数宣言を variantやDateにしましたが駄目です。

ですから、なぜ、エラー処理を入れないのでしょうか?
ファイル名がおかしいのがあるのではないでしょうか?

Sub Macro1()
 Dim filedate As Long
 Dim strFileName As String

' strFileName = vntFileName(i)  '追加←あまり意味がないので
 strFileName = Left(Right(vntFileName(i), 13), 6)  '追加

 '日付形式かどうかを判断
 If IsDate(Format(strFileName, "00\/00\/00")) Then
  filedate = CLng(DateValue(Format(strFileName, "00\/00\/00")))
  MsgBox filedate
 Else
  MsgBox "日付認識できません " & vbCrLf & vntFileName(i) & vbCrLf & Left(Right(strFileName, 13), 6)
 End If
End Sub

【35989】Re:外部txtからのデータ取込について
お礼  こころ  - 06/3/17(金) 12:00 -

引用なし
パスワード
   かみちゃん さん ありがとうございました。


出来ました。

今回、エラーの対処法についてとても勉強になりました。
親切な対応感謝します。

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