Excel VBA質問箱 IV

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

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


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

【29005】csvファイルの取り込み kao 05/9/21(水) 10:18 質問[未読]
【29006】Re:csvファイルの取り込み だるま 05/9/21(水) 11:41 回答[未読]
【29008】Re:csvファイルの取り込み kao 05/9/21(水) 12:01 質問[未読]
【29010】Re:csvファイルの取り込み だるま 05/9/21(水) 13:12 回答[未読]
【29013】Re:csvファイルの取り込み kao 05/9/21(水) 14:19 質問[未読]
【29016】Re:csvファイルの取り込み だるま 05/9/21(水) 15:30 回答[未読]
【29019】Re:csvファイルの取り込み kao 05/9/21(水) 18:33 お礼[未読]

【29005】csvファイルの取り込み
質問  kao  - 05/9/21(水) 10:18 -

引用なし
パスワード
   質問します。

毎月更新されているa.txtというcsvファイルとb.xlsというエクセルファイルがあります。a.txtファイルのA,B,C列とb.xlsのA,B,C列は対応していますが、b.xlsの方にはほかにもD,E,F列もあります。

やりたいことはb.xlsにa.txtのファイルをそれぞれの行を比較して読み込み、各行の対応する列がすべて同じならばその行には何もせず、対応していなければb.xlsに新たな行を加えていきます。

説明がわかりにくいかもしれませんがよろしくお願いします。

【29006】Re:csvファイルの取り込み
回答  だるま WEB  - 05/9/21(水) 11:41 -

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

こんな感じでいかがでしょうか。^d^

Sub test()
  Dim Dic As Object
  Dim myData As Variant
  Dim i As Long
  Dim S As String
  Dim rngDest As Range
  
  Dim myPath As String
  Dim N As Integer
  Dim V As Variant
  
  '辞書機能を使う
  Set Dic = CreateObject("Scripting.Dictionary")
  
  '元データと初期書き込み先
  With Workbooks("B.xls").Worksheets("Sheet1")
    myData = .Range("A1", .Range("C65536").End(xlUp)).Value
    Set rngDest = .Cells(UBound(myData) + 1, 1)
  End With
  
  '辞書に登録
  For i = 1 To UBound(myData)
    S = myData(i, 1)
    S = S & "," & myData(i, 2)
    S = S & "," & myData(i, 3)
    Dic.Item(S) = Empty
  Next
  
  'テキストファイル
  myPath = ThisWorkbook.Path & "\a.txt"
  N = FreeFile
  
  '読み込み
  Open myPath For Input As #N
  Do Until EOF(N)
    Line Input #N, S
    V = Split(S, ",")
    '同じ行が無ければ
    If Not Dic.Exists(S) Then
      rngDest.Resize(, 3).Value = V
      Set rngDest = rngDest.Offset(1)
      Dic.Item(S) = Empty
    End If
  Loop
  Close #N
  
  Set rngDest = Nothing
  Set Dic = Nothing
End Sub

【29008】Re:csvファイルの取り込み
質問  kao  - 05/9/21(水) 12:01 -

引用なし
パスワード
   早速の返信ありがとうございます。
辞書機能を使うということもあるんですね。初心者なので考えもつかないことです。

書き忘れておりましたが、a.txtのデータはすべて数値データですが(得意先コード、日付、金額です)、それでも辞書機能を使うことがよろしいでしょうか。よくわからないので質問します。

【29010】Re:csvファイルの取り込み
回答  だるま WEB  - 05/9/21(水) 13:12 -

引用なし
パスワード
   >それでも辞書機能を使うことがよろしいでしょうか。
別に構わないと思いますよ。^d^

で、実行してみてだめでしたか。

【29013】Re:csvファイルの取り込み
質問  kao  - 05/9/21(水) 14:19 -

引用なし
パスワード
   ▼だるま さん:
>>それでも辞書機能を使うことがよろしいでしょうか。
>別に構わないと思いますよ。^d^
>
>で、実行してみてだめでしたか。

カンマ区切りで行う分には大丈夫のようですが、あるソフトから出てくるのがタブ区切りなもので…。どのようにすればタブでもうまくいくでしょうか。お願いばかりですみません。

【29016】Re:csvファイルの取り込み
回答  だるま WEB  - 05/9/21(水) 15:30 -

引用なし
パスワード
   >カンマ区切りで行う分には大丈夫のようですが、あるソフトから出てくるのがタブ区切り>なもので…。どのようにすればタブでもうまくいくでしょうか。

初めに「a.txtというcsvファイル」と書いてあったのでカンマ区切りと理解しました。
(実は .txtという名前から変だなあとは思っていましたが。^d^)

で、"," の部分を vbTab に置きかえれば良いと思います。(3ヶ所)

【29019】Re:csvファイルの取り込み
お礼  kao  - 05/9/21(水) 18:33 -

引用なし
パスワード
   ▼だるま さん:
>初めに「a.txtというcsvファイル」と書いてあったのでカンマ区切りと理解しました。
>(実は .txtという名前から変だなあとは思っていましたが。^d^)

タブ区切りはcsvファイルとは言いませんよね。すみませんでした。提案を参考に自分の考えているものを作っていきたいと思います。だるまさんの親切なレスに感謝いたします。

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