こんにちは
同じ様式のcsvファイルが幾つかあり、同じシートに取り込んでいきます。
csvファイルを簡単に取り込めるようにVBAを設定しておきたいと思います。
まず、A1セルをダブルクリックすると、
c:\document\sample1.csvを開き、$A$1を起点に取り込みます。
項目行を含め、99行まであり、次のcsvを取り込むために、
A100セルをダブルクリックすると、c:\document\sample2.csvを開き、
$A$100を起点に、項目行を除く2行目から取り込みたいのです。
取り込むファイルは、その都度「テキストファイルをインポート」のウインドーより指定し
A1セルの場合は、csvの1行目(項目行)から、A2以下のセルの場合はcsvの2行目(項目行を除く)から
取り込むようにしたいのですが、どのようなVBAになるか教えて下さい。
Excel 2013です。
よろしくお願いいたします。
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
>A1をダブルクリックして、100行目まで取り込めましたが、
>それ以降のデータが取り込めませんでした。
こちらの解釈とはかなりのズレがあるような気がします。
そのように作りましたから、そうなるはずです。
そもそもの受け取り方の意味が大きく違っていたようです。
>sample1.csv、sample2.csv、sample3.csv・・・です。
>それぞれ行数が決まっておらず、数万行の場合もあり、
>数百行の場合もあります。
それだけでは、よく理解できないのです。だから、こちらは混乱しています。
最後尾をどのようなスタイルにするかということです。
全体的な結果のイメージがついていないのですが、データを隙間なく入れることでしょうか。それとも、ダブルクリックした場所から、データを最後まで入れていくということでしょうか。
例えば、100,123行あれば、それを全部インポートして、その後、どこをダブルクックしようとも、100,124行から項目を抜いて入れていくことですか?
私は、てっきり、100行ずつ区切るものだから、最初の項目行の部分だけ、1行減ってしまうものだと思いました。
>A10001を起点に11200行まで取り込みたいのです。
こうしたピンきりの数字で収まるとも思えません。
>A101をダブルクリックすると、項目行から取り込まれました。
ここは何度も確認した事項でしたが、今コードを読むと、
If g < 99 And i = 0 Then
Cells(g + i, 1).Resize(, UBound(arBuf) + 1).Value = arBuf
'ElseIf i >= 0 And i < 100 Then '← 0を読むように書いていますから、0を読まないようにすればよいのですが……
ElseIf i > 0 And i < 100 Then
Cells(g + i, 1).Resize(, UBound(arBuf) + 1).Value = arBuf
End If
となるように思うのですが、そもそも、100行しか読まないように作られていますから、意味がありませんし、全体的に変えなくてはならないようです。
前のデータと次データの境目をどのようにするのか、分かりません。
なお、
・項目行とデータ行は、人間の目視では区別はつくでしょうけれども、明らかに、データ行と項目行に違いはありますか。同じ文字型ですと、今度は、その区別はプログラムで分けなくてはなりません。
ここを読んでいる他の方で勘の良い方なら、すぐに、解決するでしょうけれども、私は、Excel系では、徐々に、質問で読み取れないものが増えてきているような気がします。もちろん、記録マクロで解決するレベルではなさそうです。
>今回用意されているcsvはカンマを区切り文字とされているため、
>データの前後に「"」がついてきてしまうのですが、これは、
>どこで修正したらよいでしょうか。
それは、おそらく、(こちらの想像の範囲ですが、)
TextLine = Replace(TextLine, """", "")
arBuf =Split(TextLine, ",")
とすれば、問題なく通るはずです。
とりあえず、本日はここまでです。
No.3
- 回答日時:
こんにちは。
まず回答から、
>取り込むファイルは、その都度「テキストファイルをインポート」のウインドーより指定し
Application.Dialogs(xlDialogOpenText)
という意味は、ファイルオープンダイアログのことですね。それは、いろいろありますから、それは、こちらで選ばせていただきます。
それと、
>$A$100を起点に、項目行を除く2行目から取り込みたいのです。
ということは、1~99行目と100~199行目では、最初の方がデータ量が1行少ないということになりますね。まずは、試してみてください。
'シートモジュール
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Cancel = True
If Target.Value <> "" Then
MsgBox "データがあります", vbExclamation
Exit Sub
End If
Call ImportCSV
Cells(Rows.Count, 1).End(xlUp).Select
End Sub
'標準モジュールがベスト(シートモジュールでも可能)
Sub ImportCSV()
Dim Filenames As Variant
Dim fn As Variant
Dim FNo As Integer
Dim arBuf As Variant
Dim TextLine As String
Dim i As Long
Dim g As Long, cnt As Long
Dim limt As Long
Filenames = Application.GetOpenFilename("CSVファイル(*.csv),*.csv", MultiSelect:=True)
If VarType(Filenames) = vbBoolean Then Exit Sub
Application.ScreenUpdating = False
For Each fn In Filenames
g = Cells(Rows.Count, 1).End(xlUp).Row
If g > 1 Then
cnt = Int((g + 100) / 100)
g = cnt * 100
End If
FNo = FreeFile()
Open fn For Input As #FNo
i = 0
Do While Not EOF(FNo)
Line Input #FNo, TextLine
If TextLine <> "" Then
arBuf = Split(TextLine, ",")
If g < 99 And i = 0 Then
Cells(g + i, 1).Resize(, UBound(arBuf) + 1).Value = arBuf
ElseIf i >= 0 And i < 100 Then
Cells(g + i, 1).Resize(, UBound(arBuf) + 1).Value = arBuf
End If
i = i + 1
Erase arBuf
If (g + i) Mod 100 = 0 And i > 0 Then Exit Do
End If
Loop
Close #FNo
Application.ScreenUpdating = True
Next fn
End Sub
'こういうマクロを書いてみて感じるのは、私は、能力的にひどく落ちたなって気がします。すぐに書けなくなってしまいました。一応、トラアイアルでは、郵政省から出ている郵便番号のCSVを使ってやってみました。
'Excel 2013は、とても使いにくいです。やっと、オフラインでExcel 2010 のVBAヘルプを開くマクロを作ったのですが、ショートカットの割当がなくて、あまり思うように動いてくれません。オンラインですと、ヒットしないことが多いです。やはり、Excel VBAマクロは、追い出しに掛けられているような気がします。
No.1
- 回答日時:
Googleあたりで「excel マクロ csvファイル読み込み」とか「excel vba csvファイル読み込み」といった適当なキーワードで検索すると解説サイトがたくさんヒットしますので、その中からご自身が「わかりやすい」と感じるページで学習されるとよいでしょう。
また、Excelマクロの入門書などにも例をあげて説明されていますので、そういったものを1冊入手して手元に置いておかれるのもよいでしょう。
ちなみに「シート上にボタンを設け、それをクリックすると動作する」というのがスマートなように思います。
参考まで。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
- Excel(エクセル) PowerQueryで行数の指定はできますか? 2 2022/08/26 11:13
- Access(アクセス) CSVファイルの「0落ち」にVBA 6 2023/02/02 15:27
- Excel(エクセル) Excelについて教えてください。 帳票データがあります。 アクセスに取り込むため、 データ形式にし 1 2022/06/08 19:59
- Visual Basic(VBA) VBAで特定の場所にあるCSVファイル(複数)から特定場所を抜き出してExcelに転記したいです。 11 2023/05/23 16:29
- Visual Basic(VBA) フォルダの場所を可変にしたいです(マクロ) 4 2023/05/11 10:00
- システム CSVファイルのマッピング処理の省力化 1 2022/11/24 00:01
- Visual Basic(VBA) VBA 毎日取得するデータを順番に反映していく方法 6 2023/08/26 16:22
- その他(プログラミング・Web制作) Pythonで、データファイルと列名ファイルを1つのファイルにしたいです。 1 2023/07/27 20:29
- Visual Basic(VBA) VBA初心者です。電話番号の数字の前に0を表示させたいです。 2 2022/12/14 03:58
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
数学 Tan(θ)-1/Cos(θ)について...
-
スマートな関数を教えて下さい。
-
Excel ウインドウ枠の固定をす...
-
EXACT関数とIF関数の組み合わせ...
-
4つのパターンを表示するEXACT...
-
関数を教えて下さい。
-
Excel:一部のフォントでセルの...
-
エクセルで指定した日付、店舗...
-
エクセルでセルに「氏名を入力...
-
Excel 2019 のピボットテーブル...
-
スプレッドシートの関数VLOOKUP...
-
エクセルで日付の入ったセルの...
-
Excelファイルの「数式」タブ→...
-
excelの不要な行の削除ができな...
-
Excelのif関数で文字が見えなく...
-
各ページの1番上の表示について
-
エクセル関数に詳しい方、教え...
-
INDIRECTを使わず excelで複数...
-
Excel 2019 は、SPILL機能があ...
-
UNIQUE関数が使えないバージョ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ファイル内にある数字の出現回...
-
Excel関数の先頭に「@」が入っ...
-
エクセルの気味悪い不思議
-
Excel VBAで、実行時にsheet上...
-
表示されている人数だけを数え...
-
他人が作ったマクロの理解
-
Excelの関数について質問です。
-
Excel 集計表
-
エクセル 日時の計算式について
-
Excelの関数に関して質問です。...
-
エクセル:セル内の文字列の下...
-
絞り込み検索
-
エクセルの関数で
-
エクセルの書式設定について教...
-
余分なEXCELファイルに印刷され...
-
VBA 同一シート内での転記の仕方
-
長期休みの関数はありますか
-
Excelの空のセル
-
エクセルで入力してある文を別...
-
Excelのマクロで、セルを結合し...
おすすめ情報
とても詳しくご回答くださり、ありがとうございます。
ファイルオープンダイアログは、上手く行きました。
すでにデータがあるセルでダブルクリックすると、
「データが有ります」のアラートが出てきて親切ですね。
完璧だと思ったのですが、
私のcsvファイルの説明が悪く申し訳ございません。
項目が同じcsvファイルが幾つかあります。
sample1.csv、sample2.csv、sample3.csv・・・です。
それぞれ行数が決まっておらず、数万行の場合もあり、
数百行の場合もあります。
例えば・・・
sample1.csvは、先頭の項目行を含め10000行(データ行は9999行)あり、
A1を起点に10000行まで取り込んだあと、
次にA10001を起点にsample2.csvを取り込みます。
sample2.csvは、先頭の項目行を含め1200行(データ行は1199行)あります。
sample2.csvの項目行は不要ですので、csvの2行目から1199行まで
A10001を起点に11200行まで取り込みたいのです。
sample3.csvも同様に、A11201を起点に取り込みたいです。
A1をダブルクリックして、100行目まで取り込めましたが、
それ以降のデータが取り込めませんでした。
A101をダブルクリックすると、項目行から取り込まれました。
あと、今回用意されているcsvはカンマを区切り文字とされているため、
データの前後に「"」がついてきてしまうのですが、これは、
どこで修正したらよいでしょうか。
>Excel 2013は、とても使いにくいです。
VBAの方も仕様が変わっているのですね。
>Excel VBAマクロは、追い出しに掛けられているような気がします。
わからないなりに便利に使っているので、これは困りました。