0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

VBA .csv 取り込み & データ抽出

Posted at

■ 完成

スクリーンショット (695).png

■ シート説明

・マスター
VBAのボタンが配置されたシート

・読み込みデータ
csvファイルを読み込んだデータ

・抽出データ
読み込んだcsvから、指定のカラムを抽出したデータ

VBA ソース

・共通部分

Option Explicit

' 判定用 グローバル変数
Public loop_num As Integer

Public Sub global_var_init()
    ' グローバル変数 インクリメント
    loop_num = loop_num + 1
End Sub

・CSV取込み部分


Private Sub CommandButton1_Click()
    

' CSV取込み
Dim fileDialog As fileDialog
Set fileDialog = Application.fileDialog(msoFileDialogFilePicker)

Dim fileName As String


' ダイアログ処理
With fileDialog
    .Title = "CSVファイルを選択してください"
    .Filters.Clear
    .Filters.Add "CSVファイル", "*.csv"
    .AllowMultiSelect = False
    
  ' エラー処理
   If .Show = True Then
        fileName = .SelectedItems(1)
    Else
         MsgBox "ファイル読み込みエラー(既にファイルは読み込まれていませんか?)"
        Exit Sub
    End If

End With


' 新しいシート作成
Dim newSheet As Worksheet
Set newSheet = ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))


newSheet.Name = "読み込みデータ"


'ファイルを開く
Open fileName For Input As #1

Dim lineText As String
Dim data() As String
Dim rowNum As Long

Dim i As Integer

rowNum = 1

ActiveSheet.Cells.Select
Selection.NumberFormatLocal = "@"

Do While Not EOF(1)
    Line Input #1, lineText
    data = Split(lineText, ",")
    '========= 新しいシートに表示する =========
    For i = 0 To UBound(data)
         newSheet.Cells(rowNum, i + 1) = Replace(data(i), """", "")
       ' newSheet.Cells(rowNum, i + 1) = data(i)
    Next i
    rowNum = rowNum + 1
Loop

Close #1

・読み込んだデータを抽出部分

Dim wsSource As Worksheet
    Dim wsTarget As Worksheet
    Dim lastCol As Long
    Dim colIndex As Long
    Dim headerName As String
    
    ' コピー元シート
    Set wsSource = Worksheets("読み込みデータ")
    ' コピー先シート
    Set wsTarget = Sheets.Add(After:=Sheets(Sheets.Count))
    wsTarget.Name = "抽出シート"
    
     ' コピー元シートの最終列を取得
    lastCol = wsSource.Cells(1, wsSource.Columns.Count).End(xlToLeft).Column
    
     ' 列名に特定の文字列が含まれている列をコピー
    For colIndex = 1 To lastCol
        headerName = wsSource.Cells(1, colIndex).Value
        If InStr(headerName, "納品日") > 0 Then
            ' グローバル変数インクリメント
            Call global_var_init
           
            'コピー処理
            wsSource.Columns(colIndex).Copy wsTarget.Columns(loop_num)
            
            wsTarget.Columns(loop_num).AutoFit
      
        ElseIf InStr(headerName, "受注伝票番号") > 0 Then
            ' グローバル変数インクリメント
            Call global_var_init
          
            'コピー処理
            wsSource.Columns(colIndex).Copy wsTarget.Columns(loop_num)
            
              wsTarget.Columns(loop_num).AutoFit
            
        ElseIf InStr(headerName, "受注伝票行") > 0 Then
            ' グローバル変数インクリメント
            Call global_var_init
           
            'コピー処理
            wsSource.Columns(colIndex).Copy wsTarget.Columns(loop_num)
            
             wsTarget.Columns(loop_num).AutoFit
            
        ElseIf InStr(headerName, "伝票区分") > 0 Then
            ' グローバル変数インクリメント
            Call global_var_init
           
            'コピー処理
            wsSource.Columns(colIndex).Copy wsTarget.Columns(loop_num)
            
              wsTarget.Columns(loop_num).AutoFit
        
         ElseIf InStr(headerName, "商品コード") > 0 Then
            ' グローバル変数インクリメント
            Call global_var_init
           
            'コピー処理
            wsSource.Columns(colIndex).Copy wsTarget.Columns(loop_num)
              wsTarget.Columns(loop_num).AutoFit
        
         ElseIf InStr(headerName, "JANコード") > 0 Then
            ' グローバル変数インクリメント
            Call global_var_init
           
            'コピー処理
            wsSource.Columns(colIndex).Copy wsTarget.Columns(loop_num)
              wsTarget.Columns(loop_num).AutoFit
        
         ElseIf InStr(headerName, "商品名漢字") > 0 Then
            ' グローバル変数インクリメント
            Call global_var_init
            
            'コピー処理
            wsSource.Columns(colIndex).Copy wsTarget.Columns(loop_num)
              wsTarget.Columns(loop_num).AutoFit
        
         ElseIf InStr(headerName, "店舗コード") > 0 Then
            ' グローバル変数インクリメント
            Call global_var_init
            
            'コピー処理
            wsSource.Columns(colIndex).Copy wsTarget.Columns(loop_num)
             wsTarget.Columns(loop_num).AutoFit
            
         ElseIf InStr(headerName, "商品分類コード") > 0 Then
            ' グローバル変数インクリメント
            Call global_var_init
           
            'コピー処理
            wsSource.Columns(colIndex).Copy wsTarget.Columns(loop_num)
             wsTarget.Columns(loop_num).AutoFit
            
         ElseIf InStr(headerName, "出荷数量") > 0 Then
            ' グローバル変数インクリメント
            Call global_var_init
           
            'コピー処理
            wsSource.Columns(colIndex).Copy wsTarget.Columns(loop_num)
             wsTarget.Columns(loop_num).AutoFit
            
         ElseIf InStr(headerName, "出荷確定日") > 0 Then
            ' グローバル変数インクリメント
            Call global_var_init
          
            'コピー処理
            wsSource.Columns(colIndex).Copy wsTarget.Columns(loop_num)
             wsTarget.Columns(loop_num).AutoFit
            
         ElseIf InStr(headerName, "検収数量") > 0 Then
            ' グローバル変数インクリメント
            Call global_var_init
           
            'コピー処理
            wsSource.Columns(colIndex).Copy wsTarget.Columns(loop_num)
             wsTarget.Columns(loop_num).AutoFit
            
         ElseIf InStr(headerName, "検収原価単価") > 0 Then
            ' グローバル変数インクリメント
            Call global_var_init
          
            'コピー処理
            wsSource.Columns(colIndex).Copy wsTarget.Columns(loop_num)
             wsTarget.Columns(loop_num).AutoFit
            
         ElseIf InStr(headerName, "検収原価金額") > 0 Then
            ' グローバル変数インクリメント
            Call global_var_init
           
            'コピー処理
            wsSource.Columns(colIndex).Copy wsTarget.Columns(loop_num)
             wsTarget.Columns(loop_num).AutoFit
            
         ElseIf InStr(headerName, "欠品区分") > 0 Then
            ' グローバル変数インクリメント
            Call global_var_init
           
            'コピー処理
            wsSource.Columns(colIndex).Copy wsTarget.Columns(loop_num)
             wsTarget.Columns(loop_num).AutoFit
            
         ElseIf InStr(headerName, "理由") > 0 Then
            ' グローバル変数インクリメント
            Call global_var_init
           
            'コピー処理
            wsSource.Columns(colIndex).Copy wsTarget.Columns(loop_num)
             wsTarget.Columns(loop_num).AutoFit
            
        End If
    Next colIndex

End Sub

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?