社内システムの自作なら、すず工房へ!!
エクセル仕事術などでIT経営を支援します
  • Home
  • エクセル仕事術
  • クラウド生産管理
  • サービス案内
  • つぶやきました
  • お問合せ
  • すず工房
  • 名刺

CSVファイルからデータを取り出す

更新日 2013年1月16日

2011年2月04日

CSVファイルをダブルクリックすると通常はExcelが起動して、データを分割してセルに格納してくれますが、[余計なお世話]がいやななときは、テキストファイルとして読み込んで処理します。
 
    ‥,"文字列",数値,‥ のように、各データが、文字列は["]で囲まれ、数値はそのままの形で[,]により区切られているCSVファイルで、文字列の中に[,]を含んでいるかもしれないとき、各データを配列に入れて返すプロシージャです。
ただし、文字列の中に[タブ]を含んでいるときは使用できません。
 
 
サンプルCSVファイルの内容は、
-----
"S","23 MG","",7,1,10/12/25,"001102",754800.00,"xyz-SP,mk","400/440",11/12/04
-----
です。
 
Public Sub getstr()
 
    Dim fn As Integer
    Dim buf As Variant
    Dim idx As Long
    Dim ary As Variant
    
    'CSVファイルからデータを取り出す
    fn = FreeFile
    Open ThisWorkbook.Path & "\" & "sample.csv" For Input As #fn
    Line Input #fn, buf
    Close #fn
    
    'comma区切りのデータを取り出す
    ary = SplitByComma(buf)
    
    '表示
    buf = "-----" & vbCrLf
    For idx = 0 To UBound(ary)
        buf = buf & ary(idx) & vbCrLf
    Next idx
    buf = buf & "-----"
    MsgBox buf, vbOKOnly + vbInformation, ""
 
End Sub
 
 
Public Function SplitByComma(strbuf As Variant) As Variant
    '‥,"文字列",数値,‥ のように、各データが、
    '文字列は["]で囲まれ、数値はそのままの形で[,]により
    '区切られているCSVファイルで、
    '文字列の中に[,]を含んでいるかもしれないとき、
    '各データを配列に入れて返す
    
    Dim buf As Variant
    
    Dim idx As Long
    Dim tmp As Variant
    Dim pos As Long
    Dim strnum As Long
    
    strnum = Len(strbuf)
    idx = 1
    buf = ""
    Do Until idx > strnum
        tmp = Mid(strbuf, idx, 1)
        If tmp = Chr(34) Then '
            '先頭が " だったら、次の ", を探す
            pos = InStr(idx, strbuf, Chr(34) & Chr(44), vbTextCompare) ' ",
            If pos > 0 Then
                '見つかったら、その前までをとり出す
                ''''' tmp = Mid(strbuf, idx + 1, pos - 1 - idx)
                ''''' idx = pos + Len(Chr(34) & Chr(44))
 
                If pos = idx Then      'Chr(44)が先頭にある
                    '次の ", を探す
                    pos = InStr(idx + 1, strbuf, Chr(34) & Chr(44), vbTextCompare) ' ",
                    If pos > 0 Then
                        tmp = Mid(strbuf, idx + 1, pos - 1 - idx)
                        idx = pos + Len(Chr(34) & Chr(44))
                    Else
                        '見つからなかったら最後のひとつ前までを取り出す
                        ' ← 最後は " のはずなので
                        tmp = Mid(strbuf, idx + 1, Len(strbuf) - idx - 1)
                        idx = Len(strbuf) + 1
                    End If
                Else
                    tmp = Mid(strbuf, idx + 1, pos - 1 - idx)
                    idx = pos + Len(Chr(34) & Chr(44))
                End If
 
            Else
                '見つからなかったら最後のひとつ前までを取り出す
                ' ← 最後は " のはずなので
                tmp = Mid(strbuf, idx + 1, Len(strbuf) - idx - 1)
                idx = Len(strbuf) + 1
            End If
        Else
            pos = InStr(idx, strbuf, Chr(44), vbTextCompare) ' ",
            If pos > 0 Then
                '見つかったら、その前までをとり出す
                tmp = Mid(strbuf, idx, pos - idx)
                idx = pos + Len(Chr(44))
            Else
                '見つからなかったら最後までを取り出す
                tmp = Mid(strbuf, idx)
                idx = Len(strbuf) + 1
            End If
        End If
        buf = buf & tmp & vbTab '出力用文字列に格納。タブで連結する。
        
            '普通は手入力時に文字としてtabは使わないですが、
            'たとえば、
            'Excelシートで、1行をコピーし、テキストエディタの画面に貼り付けると、
            'セルのデータがタブで区切られて貼りつけられます。
            'こんなデータには、適用不可です。
     ’ただし、こんな時は単純にtabで切り出すだけでデータを取り出せます。
            
        DoEvents
    Loop
 
    '配列に入れて返す
    SplitByComma = Split(Left(buf, Len(buf) - 1), vbTab, , vbTextCompare)
 
End Function

実行結果は下図のとおりです。

  • 仕事に生かすExcel
  • マクロ・VBA
    • Excel2013のSDIへの対応
    • WEBからデータをVBAで取込む
    • 選択したセル範囲を取出すには
    • 消費税率を読込むDLL
    • インターネット上のサイトのデータを読み込む
    • 右ボタンでのMouseDownイベントには要注意
    • CSVファイルを読みこむ(Excel)
    • テキストファイル読込速度比較
    • 進行表示の3つの方法
    • IsDate関数はおかしい‥
    • 別のワークブックのデータを読み込む
    • 2 つの指定した日付の時間間隔と満年齢
    • ワークシートのセルに特定のデータを入力する
    • CSVファイルからデータを取り出す
    • ワークシートからデータを取得する
    • ワークシートにデータをセットする
    • 特定のセル範囲からデータを探す方法を比較する
  • Excelの操作

コンタクト

メール
メール
FaceBook
FaceBook

つぶやきました

見える生産管理2022

2022年 10月 31日 月

久しぶりの投稿になってしまいましたが、「見える生産管理2022」を試用できるようになりました。「クラウド生産管理」メニュからご覧ください。

0 コメント

Webデータベース利用の生産管理

2019年 7月 22日 月

いままでExcel(R)を活用した生産管理システムを構築したり構築支援したりしてきましたが、もっと簡単に生産管理を開始できないかと考え、Webに登場してきたデータベースを利用して生産管理できるシステムを考えました。

 

続きを読む 0 コメント

iPadのSIM

2018年 11月 16日 金

iPad Pro 12.9を外出時の仕事用に使っていたが、自宅のMACにリモートアクセスするのがベストに近いかもと気づき、4G回線経由だがやってみた。

しかしこれがかなり遅い。SIMは前の機種で使ってたイオンモバイルのやつ。これが原因かもと思い、一番早いと噂のUQ  Mobileに変えてみた。体感的にはちょっと早いかなという感じ。これからじっくり検証していこうと思う。

 

インターネット接続の設定でつまづいたので以下に備忘録として残しておく。

 

 

続きを読む
プライバシーポリシー | サイトマップ
Copyright © 2002- すず工房. All Rights Reserved.
ログアウト | 編集
  • Home
  • エクセル仕事術
    • 仕事に生かすExcel
      • Excelでできること
      • ExcelからSQLiteを使う理由
    • マクロ・VBA
      • Excel2013のSDIへの対応
      • WEBからデータをVBAで取込む
      • 選択したセル範囲を取出すには
      • 消費税率を読込むDLL
      • インターネット上のサイトのデータを読み込む
      • 右ボタンでのMouseDownイベントには要注意
      • CSVファイルを読みこむ(Excel)
      • テキストファイル読込速度比較
      • 進行表示の3つの方法
      • IsDate関数はおかしい‥
      • 別のワークブックのデータを読み込む
      • 2 つの指定した日付の時間間隔と満年齢
      • ワークシートのセルに特定のデータを入力する
      • CSVファイルからデータを取り出す
      • ワークシートからデータを取得する
      • ワークシートにデータをセットする
      • 特定のセル範囲からデータを探す方法を比較する
    • Excelの操作
      • ふりがなをつける
      • 行・列を固定してスクロール
      • 他のシートのデータを表示する-カメラ機能
      • 文章を指定範囲に収まるように整形する
  • クラウド生産管理
    • 見える生産管理2022
    • 見える生産管理K(簡易版)
    • 試用申込み
  • サービス案内
    • IT経営
  • つぶやきました
    • MAC
    • IT
    • その他
    • 年月別
      • 2022/10
      • 2019/07
      • 2016/07
      • 2016/04
      • 2015/11
      • 2015/10
      • 2015/08
      • 2015/07
      • 2015/06
      • 2015/03
      • 2015/02
      • 2014/12
      • 2014/03
      • 2013/09
      • 2012/11
      • 2012/09
      • 2010/09
      • 2010/08
      • 2010/07
      • 2010/06
      • 2010/03
      • 2010/02
      • 2009/05
      • 2009/04
  • お問合せ
  • すず工房
    • 企業理念
    • 主な資格
    • 実績
  • 名刺
  • トップへ戻る