ここから本文です

エクセルに添付画像のようなCSVファイルの読み込みをマクロで行いたいです。

ifuriedoさん

2017/11/1211:58:41

エクセルに添付画像のようなCSVファイルの読み込みをマクロで行いたいです。

・赤枠内が抜き取りたいデータ→行数は変動
・緑枠のデータは毎回最後の行に出るのですが抜き取り不要

・新しいシートのA4のセルから入力を開始したい

マクロ未経験でネットから探したプログラムで
マクロの起動とデータの入力はできたのですが
必要箇所の指定と不要個所の削除の方法が
わかりません。

どなたかプログラムの作成をお願いいたします。

補足申し訳りませんでした
ネットから引用したプログラムを追記いたします。

Sub CSV入力1()
Dim varFileName As Variant
Dim intFree As Integer
Dim strRec As String
Dim strSplit() As String
Dim i As Long, j As Long
varFileName = Application.GetOpenFilename(FileFilter:="CSVファイル(*.csv),*.csv", _
Title:="CSVファイルの選択")
If varFileName = False Then
Exit Sub
End If
intFree = FreeFile '空番号を取得
Open varFileName For Input As #intFree 'CSVファィルをオープン

i = 0
Do Until EOF(intFree)
Line Input #intFree, strRec '1行読み込み
i = i + 1
strSplit = Split(strRec, ",") 'カンマ区切りで配列へ
For j = 0 To UBound(strSplit)
Cells(i, j + 1) = strSplit(j)
Next
'配列をそのまま入れる方法も、ただし全て文字列として入力される
' Range(Cells(i, 1), Cells(i, UBound(strSplit) + 1)) = strSplit
Loop

Close #intFree
End Sub

cv.ReadLine,プログラム,データ,If wa.Count,Option Explicit,so.OpenTextFile,1 or LCase

閲覧数:
131
回答数:
3
お礼:
250枚

違反報告

ベストアンサーに選ばれた回答

2017/11/1214:52:56

lin_nyan36さんへ

確か以前【Excelがタスクマネージャーに残る現象】とかの質問で、ご自身はVBSを勧めているのにその現象を知らずとか回答を見かけたようでしたけど、違いましたか?

それでタスクマネージャーに残っているかの確認方法や、残っている場合の解決策などについて、回答に含めないのは【VBSカテマス】として如何なものかと思います。

自分の環境に問題がないから発生したら質問者の環境が悪いって考えであるなら、

>無視していただいて結構です。

回答は控えるべきと思いますけど?

それとも質問者側で発生した際の対処法について(確認の仕方が先かもですが)、目処が立ったと言う事で宜しいのでしょうか?

この質問は投票によってベストアンサーに選ばれました!

ベストアンサー以外の回答

1〜2件/2件中

並び替え:回答日時の
新しい順
|古い順

プロフィール画像

カテゴリマスター

lin_nyan36さん

2017/11/1213:14:42

「VBScript」による回答ですので、無視していただいて結構です。

このプログラムは、「csv」ファイルを読み込ませたいエクセルのブックを1つだけ開いた状態で、プログラムファイルに目的の「csv」ファイルをドラッグ&ドロップするだけです。

一番右端に新しいシートを作成し、そのシートの「A4」以降(列「A」から列「E」まで)に、「csv」ファイルの2行目から最終行まで、書き込んで、最後に最終行を削除しています。

念のため、最後に「Finished!」と表示しますので、「OK」を押して、終了してください。

以下のプログラムを、メモ帳かテキストエディタに貼り付け、「~.vbs」という名前で保存してください。

「~」の部分は、何でもかまいませんが、「.vbs」の部分は、必ず半角です。

「csv」ファイルを読み込ませるエクセルのブックを1つだけ開いておき、できたプログラムファイル(「~.vbs」ファイル)に、目的の「csv」ファイルを、ドラッグ&ドロップしてください。

Option Explicit
Dim a, bk, cv, ex, i, l, r, sh, so, wa
Set so = CreateObject("Scripting.FileSystemObject")
Set wa = WScript.Arguments
If wa.Count <> 1 or LCase(so.GetExtensionName(wa(0))) <> "csv" Then
MsgBox("ドラッグ&ドロップできるのは、csvファイル1つだけです")
WScript.Quit
End If
Set ex = GetObject(, "Excel.Application")
Set bk = ex.Workbooks(1)
bk.Worksheets.Add , bk.Worksheets(bk.Worksheets.Count)
Set sh = bk.Worksheets(bk.Worksheets.Count)
Set cv = so.OpenTextFile(wa(0), 1)
r = 3
l = cv.ReadLine
Do Until cv.AtEndOfStream
a = Split(cv.ReadLine, ",")
r = r + 1
For i = 0 to 4
sh.Cells(r, i + 1).Value = a(i)
Next
Loop
sh.Rows(r).Delete
Set wa = Nothing
Set so = Nothing
MsgBox("Finished!")

簡単な説明です。

Option Explicit

「厳密に」というような意味ですが、気にしないでください。

Set so = CreateObject("Scripting.FileSystemObject")

ファイルやフォルダを扱えるようにしています。

Set wa = WScript.Arguments
If wa.Count <> 1 or LCase(so.GetExtensionName(wa(0))) <> "csv" Then
MsgBox("ドラッグ&ドロップできるのは、csvファイル1つだけです")
WScript.Quit
End If

ドラッグ&ドロップされるのを待っていて、ドラッグ&ドロップされると、そのファイルの数と、拡張子を調べて、想定外なら、メッセージを表示して、プログラムそのものを終了してしまいます。

Set ex = GetObject(, "Excel.Application")

開いているエクセルブックを取得するのに必要です。

Set bk = ex.Workbooks(1)

開いているブックを取得しています。

bk.Worksheets.Add , bk.Worksheets(bk.Worksheets.Count)

一番右端に、シートを新規作成しています。

Set sh = bk.Worksheets(bk.Worksheets.Count)

そのシートを、「sh」にセット。

Set cv = so.OpenTextFile(wa(0), 1)

ドラッグ&ドロップされた「csv」ファイルを、「読み込み専用」で開いています。

r = 3

行カウント用変数の初期化。

l = cv.ReadLine

1行読み飛ばし。

Do Until cv.AtEndOfStream

ファイルの終端まで処理。

a = Split(cv.ReadLine, ",")

1行読み込み、配列変数に格納。

「Split()」というのは、区切り記号を使って、配列変数に格納します。

今、読み込んだ1行が、「a,b,c」の場合、「a(0) = "a"」、「a(1) = "b"」、「a(2) = "c"」となります。

r = r + 1

1行カウント。

For i = 0 to 4

列「A」から列「E」まで書き出し。

sh.Cells(r, i + 1).Value = a(i)

4行目から、今読み込んだデータを書き出しています。

Next
Loop

を、ファイルの終端まで処理。

sh.Rows(r).Delete

最後の1行は不要なので、削除。

Set wa = Nothing
Set so = Nothing
MsgBox("Finished!")

あとは、終了処理で、最後に「Finished!」と表示しています。

2017/11/1212:04:24

そのプログラムを載せてくれたら良かったのでは?

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

5文字以上入力してください

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。