この記事では【Excel】VBAマクロでcsv読み込みを列指定する方法(1列:複数列範囲指定:飛び飛びなど)を行う方法【Range, OpenText, InputBox】について解説していきます。
ポイントとしてはRangeオブジェクト、OpenTextメソッド、InputBox関数を使用することです。
なお、下記の解説では完全な初心者でもわかりやすいようにあえて変数名を少々変わった名称にしております。
そのため、あなた自身がご活用の際には、ここを適切な(英語表記でしっくりくるものが一般的)ものに変更してご活用くださいね。
それでは詳しく見ていきましょう!
VBAマクロでcsv読み込みを列指定を行う方法(1列のみ)【Range】
続いては、1列のみのcsv読み込みについて解説していきます。こちらでは、VBAを使用して特定の1列を選択し、そのデータを読み込む方法を学んでいきましょう。
Alt + F11にてVBE画面を開いて、以下コードをコピペしましょう。
Sub ReadColumnAFromCSV()
' CSVファイルのパスを指定してください
Dim csvPath As String
csvPath = "C:\path\to\your\file.csv"
' CSVファイルを開き、A列のみを読み込む設定で開きます
With Workbooks.OpenText(Filename:=csvPath, _
Origin:=xlMSDOS, _
StartRow:=1, _
DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:=False, _
Tab:=False, _
Semicolon:=False, _
Comma:=True, _
Space:=False, _
Other:=False, _
FieldInfo:=Array(1, 1), _
TrailingMinusNumbers:=True)
' 開いたCSVファイルのデータをアクティブなワークシートのA列にコピーします
ThisWorkbook.Sheets("Sheet1").Range("A:A").Value = _
.Sheets(1).Range("A:A").Value
' 開いたCSVファイルを閉じます
.Close SaveChanges:=False
End With
End Sub
コードのAlt+F8を押し、マクロ選択画面でYomikomiKataHitori関数を実行します。
このコードは、CSVファイルからA列のみを選択し、アクティブなワークブックの`Sheet1`のA列にデータをコピーします。
ファイルのパスとシート名は実際の環境に合わせて適切に書き換えてください。このマクロを実行すると、指定したCSVファイルからA列のデータが読み込まれます。
上の引数の各意味は以下の通りです!
Filename:=csvPath
: 開くCSVファイルのフルパスです。変数csvPath
には、ファイルの場所とファイル名を含む文字列が格納されています。Origin:=xlMSDOS
: ファイルの起源(ここではMS-DOS)を指定します。これは、ファイルの文字エンコーディングに関連しています。StartRow:=1
: データの読み込みを開始する行を指定します。この場合、1行目から読み込みが始まります。DataType:=xlDelimited
: データタイプが区切り文字で分割されたものであることを指定します(CSVなど)。TextQualifier:=xlDoubleQuote
: テキスト限定子としてダブルクォーテーションを使用することを指定します。これは、フィールド内のコンマなどの区切り文字をテキストの一部として扱うために使われます。ConsecutiveDelimiter:=False
: 連続する区切り文字を単一として扱うかどうかを指定します。False
は連続する区切り文字を個別に扱うことを意味します。Tab:=False
: タブを区切り文字として使用しないことを指定します。Semicolon:=False
: セミコロンを区切り文字として使用しないことを指定します。Comma:=True
: カンマを区切り文字として使用することを指定します(CSVの標準)。Space:=False
: スペースを区切り文字として使用しないことを指定します。Other:=False
: 他のカスタム区切り文字を使用しないことを指定します。FieldInfo:=Array(1, 1)
: 各列のデータ形式を指定する配列です。ここでは、1列目をテキストとして読み込むことを示しています(2番目の1
はxlTextFormat
を意味します)。他の列は読み込まれず、スキップされます。TrailingMinusNumbers:=True
: 数字の後のマイナス記号(例: 123-)を数値として扱うかどうかを指定します。True
はそのようなケースを数値として扱います。
VBAマクロでcsv読み込み時に複数列の列指定を行う方法(連続範囲)【Range】
続いては、連続する複数列のデータを読み込む方法について解説していきます。ここではRangeオブジェクトを使用して指定範囲のデータを取り扱います。
Alt + F11にてVBE画面を開いて、以下コードをコピペしましょう。
Sub YomikomiRenketu()
Dim kaishiGyou, owariGyou As Integer
kaishiGyou = 1
owariGyou = 10
' 例として1行目から10行目までのデータを読み込みます。
Workbooks.OpenText Filename:="C:\yourpath\yourfile.csv", DataType:=xlDelimited, Comma:=True, FieldInfo:=Array(Array(1, 1), Array(2, 1))
' ここでは1列目と2列目を読み込む設定です。
End Sub
コードのAlt+F8を押し、マクロ選択画面でYomikomiRenketu関数を実行します。
このコードは、csvファイルから1列目と2列目を選択してデータを読み込む方法を示しています。
VBAマクロでcsv読み込みを複数列の列指定を行う方法(インプットボックス:飛び飛び複数囲)【InputBox】
最後に、インプットボックスを使用してユーザーが指定した特定の列のデータのみを読み込む方法について説明します。この方法は柔軟性が高く、実行時に読み込みたい列をユーザー自身が選択できます。
Alt + F11にてVBE画面を開いて、以下コードをコピペしましょう。
Sub YomikomiInputBox()
Dim retsuHairetsu As Variant
retsuHairetsu = InputBox("読み込みたい列番号をカンマ区切りで入力してください。例: 1,3,5")
' ユーザーが指定した列番号を取得します。
Workbooks.OpenText Filename:="C:\yourpath\yourfile.csv", DataType:=xlDelimited, Comma:=True, FieldInfo:=Array(Array(retsuHairetsu(0), 1), Array(retsuHairetsu(1), 1))
' 取得した列番号に基づいてcsvファイルを開きます。
End Sub
コードのAlt+F8を押し、マクロ選択画面でYomikomiInputBox関数を実行します。
この関数は、実行時にユーザーがインプットボックスで入力した列番号に基づいてデータを読み込む方法です。読み込む列を動的に変更することができます。
以上で、についての解説を終えます。この知識を活用して、効率的なデータ管理を行ってください。
まとめ VBAでcsv読み込みを列指定(1列:複数列範囲指定:飛び飛びなど)を行う方法【Range, OpenText, InputBox】
この記事ではVBAを使用してcsvファイルから特定の列を読み込む方法(Range, OpenText, InputBox)を解説しました。
それぞれの関数の活用方法について理解を深め、日々の業務に役立てることができればと思います。