EXCEL超初心者マクロ(1)-CSVファイル取込み-

2018年1月24日

マクロの詳細はネットでぐぐると
先人達が分かりやすく説明しているサイトが沢山あります。
ただ、いきなりでは難しいので、そこにたどり着くまで力になれたらと思います。

-office2016ベースに説明致します。-

最初に、VBE(Visual Basic Editor)を起動します。マクロを書くところですね。
起動する前に、いろいろな起動方法があるのですが取り急ぎオーソドックスな方法で行きます。
開発タブが上のリボン(※絵がいっぱい書いてあるところ)をクリック。
※無かったら以下方法で出してください。

Office アプリケーションで [開発] タブを表示する方法。
1. [ファイル] タブをクリックします。
2. [オプション] をクリックします。
3. [リボンのユーザー設定] をクリックします。
4. [リボンのユーザー設定] および [メイン タブ] の下の [開発] チェック ボックスをオンにします。

VisualBasicボタンを押します。

VBEが開きます。

開きましたでしょうか?
一点、以下を設定してください。
1.[ツール]-[オプション]
2.[オプション]ダイアログボックスの[編集]タブで
3.[変数の宣言を強制する]チェックボックスをオンにしてください。
【説明】指定しなくてもマクロを組むことは可能ですが、指定すると変数の指示が必須になり、きれいでトラブルの少ないマクロが組めます。
※変数とは、数字や文字列等を保存しておく場所です。
これで準備完了です。

後は、好きなようにプログラミングをして下さい….。

おいおいですね。初めてのときは色々な説明聞いても分かる人のが珍しいんですね。自分は文章解読苦手なんで結構はまります。
かといって、何がしたいのか分からないので、始める事もできません。
持論ですが、一番の近道は「人まね」だと思います。

いくつかサンプルをご紹介しますが、その前に、自分の基本スタイルをお伝えします。
1.起動はEXCELシート上に、ボタンを作って、そこからマクロ(VBE)のフォームを起動する。
2.VBEのフォームにボタンやテキスト等を配置してそこから実行します。

今、適当なのがないのでとりあえず、私が作ったもののイメージです。
これは、ヤマト運輸ビジネスメンバーズのB2クラウドへの連携データ作成用に以前作ったものです
代金引換(コレクト払い)用です。

ここに、データを入力したり、ボタンをクリックしたりしてマクロを動かします


SAMPLE
1.CSVテキストファイルの取込
→フォーマットが固定(いつも同じ)なCSVファイルをEXCELシートに取り込む。
→取り込むファイルのフォルダ位置を変えられるようにする
→取り込むファイルを選択できるようにする
→取り込む前に、フィルタを解除する。解除しないとデータがおかしくなることがあるため

まず、以下を追加します
挿入/ユーザーフォーム ・・・ 追加
挿入/標準モジュール ・・・ 追加

UserForm1を選択 (ダブルクリック)
以下のようにボタンを配置してください(名前はなんでも大丈夫です)

次に
Module1を選択 (ダブルクリック)
多分、Option Explicit のみが表示されていると思いますので
以下をまるっと貼り付けてください。

↓ ここから ↓

Option Explicit

'### テキストエリア ###
Public TEXT01 As String
Public TEXT02 As String

'### テキストエリア ###
Public CLEAR001

'### カウントエリア ###
Public CNT01
Public CNT02

Sub userform1_call()
UserForm1.Show
'UserForm1.Show vbModeless ‘モードレス
End Sub

Sub sheet_clear()
'### 全シートフィルタのクリア サブプロシージャ ###
For CLEAR001 = 1 To Worksheets.Count
If Sheets(Worksheets(CLEAR001).Name).AutoFilterMode Then
Sheets(Worksheets(CLEAR001).Name).Range("A1").AutoFilter
End If
Next
End Sub

↑ ここまで ↑


説明がまだるっこしくなってきたので、CSVファイル取込サンプルをUPします。

Sample_1.xlsm
Sample_1.csv

・CSVファイルのフォルダのアドレステキストをコピーして下さい。※ファイルの場所です。
・STARTシートの画像にuserform1_callを登録してありますのでクリックしてください。
・SAMPLE_1.csvファイルを選択して取り込んでください。
こんな感じです。

csv取込ボタンには、以下が書いてあります

'※※※処理を進めてよいかの確認ダイアログBOXです。 NOを押すと何もせず終わります。
MSG_FLG = MsgBox("サンプルファイル" & vbCrLf & "取込み処理実行OK?", vbYesNo)
If MSG_FLG = vbNo Then
Exit Sub
End If

' ***クリア処理***
'※※※CSV取り込みをする際に、フィルタがかかっていると、うまくいかないことがあります。表示されている全シートを解除します。標準モジュールの読み込みです。
'### シートフィルタ解除サブプロシジー ###
sheet_clear

'※※※取込むシートの中を削除します。
Sheets("DATA").Select
Cells.Select
Selection.Delete Shift:=xlUp

Sheets("DATA").Select
Range("A1").Select

'※※※ダイアログです。取り込むときに見て下さい。
Const cnsTITLE = "○SAMPLEデータ、取込み処理"
Const cnsFILTER = "SAMPLE csvファイル (*.csv),*.csv"

'※※※取込むファイルのフォルダへ移動
With CreateObject("WScript.Shell")
.CurrentDirectory = Worksheets("KANRI").Range("B2")
End With

vFILENAME = Application.GetOpenFilename(FileFilter:=cnsFILTER, Title:=cnsTITLE)
If VarType(vFILENAME) = vbBoolean Then
MsgBox ("キャンセル")
Exit Sub
End If

<span style="color: #ff0000;">※※※データの取込み方指示です。</span>
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;" &amp; vFILENAME, Destination:=ActiveSheet.Range("A1"))

''...省略...
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 932
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = False
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = True
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(2, 2, 1, 1)
<span style="color: #ff0000;">※※※ ↑ の数字は取込むCSVの項目数 2・・・テキスト 1・・・数字</span>
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With

Range("A1").Select
MSG_FLG = MsgBox("取込み終了" &amp; vbCrLf &amp; vbCrLf &amp; "(^^)")
Application.StatusBar = "SAMPLEデータ 取込み終了" 'EXCELの下バーへメッセージ表示。

CSV取り込みマクロは以上です。

EXCELを取り込みたいときもありますよね。
こちらでご紹介します。
https://www.bookservice.jp/2018/03/29/post-551/