人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

エクセルマクロの製作をお願いします

フォルダ内に複数のcsvファイルが入っています。
このcsvファイルは入っている数値が違うだけの同一形式のデータです。
このファイル名が1行目に入り、2行目以降指定した列の数値を指定した行から指定した行まで左から順に入れていけるものです。

具体的には,ファイル名「A1.csv」「A2.csv」があり
「A1.csv」には1列目に1,2,3,4,5,6,が入っており
「A2.csv」には1列目に11,22,33,44,55,66,と入っている場合に
1列目の2行目から5行目までを選んだ場合、

A1 A2
2 22
3 33
4 44
5 55

というようになる物です。
分かりにくい場合は確認してください。
マクロ以外でもフリーで同一の事が出来るソフトがあれば教えてください。


●質問者: iwayuru_kami
●カテゴリ:学習・教育 科学・統計資料
✍キーワード:A1 CSV エクセル ソフト データ
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● SALINGER
●35ポイント ベストアンサー

とりあえず作ってみました。

inputboxで数字を入力するようにしてますが、無効な数字を入れるとエラーがでます。


Sub Macro()
 Dim startRow
 Dim endRow
 Dim c
 Dim i As Integer
 Dim j As Integer
 Dim l As Integer
 Dim textline, csvline() As String
 Dim ch1 As Long
 Dim FileNamePath As String
 Dim FSO
 Dim f
 
  'CSVのフォルダを指定
 Const FolderPath As Variant = "C:\Documents and Settings\hogehoge\デスクトップ\あるフォルダ\"
 
 Set FSO = CreateObject("Scripting.FileSystemObject")
 
 startRow = Application.InputBox(Prompt:="開始行を入力してください。", Type:=1)
 If startRow = "False" Then Exit Sub

 endRow = Application.InputBox(Prompt:="終了行を入力してください。", Type:=1)
 If endRow = "False" Then Exit Sub
 
 c = Application.InputBox(Prompt:="表示列を入力してください。", Type:=1)
 If c = "False" Then Exit Sub
 
 j = 1
  '空いているファイル番号を取得します
 ch1 = FreeFile
 
 For Each f In FSO.getfolder(FolderPath).Files
 FileNamePath = FolderPath & "\" & f.Name
 
 Cells(1, j).Value = Left(f.Name, Len(f.Name) - 4)
 
  'FileNamePath のファイルをオープンします
 Open FileNamePath For Input As #ch1
 
 l = 2
 
 For i = 1 To endRow
  '1行読み込みます
 Line Input #ch1, textline
 
 If i >= startRow Then
  'カンマで分離します
 csvline() = Split(textline, ",")
 
 Cells(l, j).Value = csvline(c - 1)
 l = l + 1
 End If
 Next i
 
 j = j + 1
 
 Close #ch1
 Next f
 Set FSO = Nothing
End Sub
◎質問者からの返答

有難うございます。

かなりイメージに近いマクロです。

もし出来れば、フォルダの指定を都度マクロ内で入れ替えるのではなく

マクロ実行時に選択できる用できないでしょか?


2 ● Mook
●35ポイント

マクロの使用例ですが、下記のものでどうでしょうか。


2行目の Data_FolderPath に実際のデータのあるパスを記載して実行してみてください。

'--- CSV ファイルのあるフォルダパス:この中を処理
Const Data_FolderPath = "C:\Data"

Sub loadCSVFiles()
 Dim fso As Object
 Set fso = CreateObject("Scripting.FileSystemObject")
 
'--- 選択セルの行範囲
 Dim startRow As Long
 startRow = Selection.Row
 
 Dim endRow As Long
 endRow = Selection.Row + Selection.Rows.Count - 1
 
'--- データ列
 Dim dCol As Long
 dCol = 1
 
 Dim aFile As Object
 Dim data As Variant
 For Each aFile In fso.getFolder(Data_FolderPath).Files
'--- CSV ファイルの確認
 If InStr(UCase(fso.GetExtensionName(aFile.Path)), "CSV") > 0 Then
  '--- ファイル名の記載
 Cells(1, dCol).Value = aFile.Name
 
  '--- データの読込み
 data = Split(fso.OpenTextFile(aFile.Path).ReadAll(), ",")
  '--- データの転記
 i = 0
 For j = startRow To endRow
 If UBound(data) < i Then
 Cells(j, dCol).Value = ""
 Else
 Cells(j, dCol).Value = data(i)
 End If
 i = i + 1
 Next
 dCol = dCol + 1
 End If
 Next
End Sub
◎質問者からの返答

有難うございます。

実行は出来たのですが、行や列の指定が出来ないようです。

マクロ実行時に変更できるようにできないでしょうか?

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ