Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


5464 / 13644 ツリー ←次へ | 前へ→

【50576】繰り返し処理について Ken 07/8/2(木) 12:24 質問[未読]
【50580】Re:繰り返し処理について ハチ 07/8/2(木) 15:09 回答[未読]
【50614】Re:繰り返し処理について Ken 07/8/4(土) 19:30 質問[未読]
【50627】Re:繰り返し処理について ハチ 07/8/6(月) 8:52 回答[未読]

【50576】繰り返し処理について
質問  Ken  - 07/8/2(木) 12:24 -

引用なし
パスワード
   はじめまして。VBA初心者で、プログラムが組めず非常に困っています。

現在あるマクロに手を加えて繰り返し操作を行いたいです。
「内容」
・CSVデータが50個程度あります。
・CSVデータは1〜50まで全てファイル名が振られています。
・マクロを使ってExcelシートに1のデータの後ろに2のデータを、
2のデータの後ろに3のデータを繰り返し貼り付けるプログラム
があり、現在5個までの貼り付けは連続で行えます。
・これに繰り返しのプログラムが組めれば50個全て行える
のでは?

参考までに、現在あるプログラムでファイル名が0.csvと1.csvのファイルを
処理した場合を載せてあります。

どなたか、繰り返し処理をご存知でしたらご教授願えませんでしょうか。


Sub データ()
  With ActiveSheet.QueryTables.Add(Connection:= _
    "TEXT;C:\0.CSV", Destination:=Range("A1" _
    ))
    .Name = "0"
    .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(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, _
    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 _
    , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
    .TextFileTrailingMinusNumbers = True
    .Refresh BackgroundQuery:=False
  End With
  行 = Range("A1").CurrentRegion.Rows.Count + 1
  Range("A" & 行).Select
  With ActiveSheet.QueryTables.Add(Connection:= _
    "TEXT;C:\1.CSV", Destination:=Range( _
    "A" & 行))
    .Name = "1"
    .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 = 2
    .TextFileParseType = xlDelimited
    .TextFileTextQualifier = xlTextQualifierDoubleQuote
    .TextFileConsecutiveDelimiter = False
    .TextFileTabDelimiter = False
    .TextFileSemicolonDelimiter = False
    .TextFileCommaDelimiter = True
    .TextFileSpaceDelimiter = False
    .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, _
    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 _
    , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
    .TextFileTrailingMinusNumbers = True
    .Refresh BackgroundQuery:=False
  End With
  
   Sheets("Sheet2").Select
   Range("B2").Select
   ActiveCell.FormulaR1C1 = "=AVERAGE(Sheet1!RC:R[10000]C)"
   Range("C2").Select
   ActiveCell.FormulaR1C1 = "=AVERAGE(Sheet1!RC[24]:R[10000]C[24])"
   Range("D2").Select
   ActiveCell.FormulaR1C1 = "=AVERAGE(Sheet1!RC[26]:R[10000]C[26])"
  
   ChDir "C:\"
   ActiveWorkbook.SaveAs Filename:= _
    "C:\データ記録.xls", FileFormat:=xlNormal, _
    Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _
    CreateBackup:=False
  
  
End Sub

【50580】Re:繰り返し処理について
回答  ハチ  - 07/8/2(木) 15:09 -

引用なし
パスワード
   ▼Ken さん:

貼り付ける部分は、あまり見てませんが、
繰り返し部分だけ。

Sub Main()
  Dim i As Integer
  
  For i = 0 To 50
    Call データ("TEXT;C:\" & i & ".csv")
  Next
End Sub

Sub データ(myFile As String)
  Dim 行 As Long
  
  If WorksheetFunction.CountA(Range("A:A")) > 0 Then
    行 = Range("A1").CurrentRegion.Rows.Count + 1
  Else
    行 = 1
  End If
  'ここに貼り付ける処理を・・
  Range("A" & 行).Value = myFile
  
End Sub

【50614】Re:繰り返し処理について
質問  Ken  - 07/8/4(土) 19:30 -

引用なし
パスワード
   ハチさん

ご回答いただきありがとうございます。
早速トライしてみましたが、どうもうまくいきません。。

教えて頂いた様に、以下のようにプログラムを変えましたが
どこに問題があるのでしょうか。

また、
Range("A" & 行).Value = myFile
をどこにもっていけば良いのか分かりません。

今からVBAを勉強していこうと思っていますが、時間がかかりそうです。
今回はお助け下さい。


Sub Main()
  Dim i As Integer
 
  For i = 0 To 50
    Call データ("TEXT;C:\" & i & ".csv")
  Next
End Sub

Sub データ(myFile As String)
  Dim 行 As Long
 
  If WorksheetFunction.CountA(Range("A:A")) > 0 Then
    行 = Range("A1").CurrentRegion.Rows.Count + 1
  Else
    行 = 1
  End If
  With ActiveSheet.QueryTables.Add(Connection:= _
    "TEXT;C:\" & i & ".CSV", Destination:=Range("A1" _
    ))

以下省略

【50627】Re:繰り返し処理について
回答  ハチ  - 07/8/6(月) 8:52 -

引用なし
パスワード
   ▼Ken さん:
>ハチさん
>
>ご回答いただきありがとうございます。
>早速トライしてみましたが、どうもうまくいきません。。
>
>教えて頂いた様に、以下のようにプログラムを変えましたが
>どこに問題があるのでしょうか。
>
>また、
>Range("A" & 行).Value = myFile
>をどこにもっていけば良いのか分かりません。

myFileに"TEXT;ファイル名"が入ってきているワケですから、

With ActiveSheet.QueryTables.Add _
 (Connection:=myFile, Destination:=Range("A" & 行))
以下略・・・

という感じでいけるのでは?
試してませんので細かいところは手直ししてください。

5464 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free