Excelマクロを用いてのファイル作成方法

このQ&Aのポイント
  • Excelマクロを使用して、複数のファイルを作成する方法について教えてください。
  • 作成されるファイルの内容を特定の形式で変更したいですが、マクロ本文中での変更方法がわかりません。
  • マクロ本文中でダブルクォーテーションを省略する方法について教えてください。
回答を見る
  • ベストアンサー

excelマクロを用いてのファイル作成について

excelマクロを用い複数個のファイルを作成する作業を行いたいです。 ファイルの作成そのものは実行できているのですが、その内容に関して 変更したい個所があります。 その変更の仕方がわからないので教えて頂きたいです。 Dim i As Integer For i = 1 To 100 Workbooks.Add Range("a1").Value = "[data,text]=xlsread('DS_0frac.xls','ds0_" & i & "')" Range("a2").Value = "u=" Range("a3").Value = "n=data(u,2)" Range("a4").Value = "a=data(u+n+1,2);b=data(u+n+1,3);c=data(u+n+1,4)" Range("a5").Value = "x1=data(u+1,2);y1=data(u+1,3);z1=data(u+1,4)" Range("a6").Value = "tank=b/a" ChDir "C:\Documents and Settings\orner\My Documents\DS\m" ActiveWorkbook.SaveAs Filename:= _ "C:\Documents and Settings\orner\My Documents\DS\m\flds0_" & i & ".m", _ FileFormat:=xlText, CreateBackup:=False Windows("flds0_" & i & ".m").Close savechanges:=False Next i End Sub 上記のようなマクロを実行したところ得られるファイルの内容は以下のようになりました。 "[data,text]=xlsread('DS_0frac.xls','ds0_1')" u= "n=data(u,2)" "a=data(u+n+1,2);b=data(u+n+1,3);c=data(u+n+1,4)" "x1=data(u+1,2);y1=data(u+1,3);z1=data(u+1,4)" tank=b/a 実際には1,3,4,5行目の " を省いた形での出力を望んでいます。 マクロ本文中で " を取り除いた場合には 複数エラーが発生し実行できません。 解決法について教えて頂きたいです。 宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.1

単純にテキストファイルを作成するのではいかがでしょうか。ご参考まで。 Sub test() Dim FSO As Object Dim i As Long Set FSO = CreateObject("Scripting.FileSystemObject") For i = 1 To 1 With FSO.CreateTextFile("C:\flds0_" & i & ".m") .WriteLine "[data,text]=xlsread('DS_0frac.xls','ds0_" & i & "')" .WriteLine "u=" .WriteLine "n=data(u,2)" .WriteLine "a=data(u+n+1,2);b=data(u+n+1,3);c=data(u+n+1,4)" .WriteLine "x1=data(u+1,2);y1=data(u+1,3);z1=data(u+1,4)" .WriteLine "tank=b/a" .Close End With Next i Set FSO = Nothing End Sub

参考URL:
http://officetanaka.net/excel/vba/filesystemobject/filesystemobject06.htm
moozooo
質問者

お礼

どうもありがとうございました。 ご回答頂いた内容、添付して頂いたサイトの内容ともにとても参考になりました。 今後活用させて頂きます。

関連するQ&A

  • Excelの目次作成のマクロ

    Excel 2000 で本の目次を作りたいと、思いネットで下記ののようなマクロを見つけました。 Sub 索引作成()   Dim R As Range, R2 As Range, LastFound As Range   Dim Found As Boolean   Range("C2", Range("D65536").End(xlUp).Offset(1, 0)).Clear   For Each R In Range("A2", Range("A65536").End(xlUp))     Found = False     Set LastFound = Range("C65536").End(xlUp)     For Each R2 In Range("C2", LastFound)       If R2.Value = R.Value Then         R2.Offset(0, 1).Value = R2.Offset(0, 1).Value & "," & R.Offset(0, 1).Value         Found = True       End If     Next     If Found = False Then       LastFound.Offset(1, 0) = R.Value       LastFound.Offset(1, 1) = R.Offset(0, 1).Value     End If   Next End Sub このマクロを使うと下記のような結果になるのですが、頁数の桁が多い場合(1000ページ以上)や、項目名の重複が多い場合は上手く動きません。  A    B    C    D 項目名  頁 A     1 B     2 C     3 D     4 A     5 B     6 C     7 D     8   ↓上記マクロを使うと  A    B    C    D 項目名  頁 A     1    A    1,5 B     2    B    2,6 C     3    C    3,7 D     4    D    4,8 A     5 B     6 C     7 D     8 となりますが、頁が1000桁以上になると A B      C     D 項目名  頁 A     1000    A    100,010,04 B     1001    B    100,110,05 C     1002    C    100,210,06 D     1003    D    100,310,07 A     1004 B     1005 C     1006 D     1007 のようになります。 頁が1000桁以上になる場合や、項目名の重複が多くなる場合でも上手く動くマクロは無いものでしょうか。 何卒、宜しくお願いいたします。

  • マクロについて

    マクロでデータをクリアするコマンドボタンを作りました。でも、計算の答えがでなくなりました。 例えば、 A1:A10までの情報はクリアになります。 答えの“=SUM(A1:A10)”というCセルだけが前の情報のままになります。(Cセルはマクロに登録していません。) 全くのど素人で、マクロの登録も他の書類からコピーしてセルだけ変えました。 マクロの内容は、下記の通りです。 Sub Macro1() ' ' Macro1 Macro ' マクロ記録日 ' Sub allclear() Application.Calculation = xlManual Range("D4").Value = "" Range("B6").Value = "" Range("B8").Value = "" Range("E11").Value = "" Range("E12").Value = "" Range("F11").Value = "" Range("B21").Value = "" Range("B23").Value = "" Range("B25").Value = "" Range("B27").Value = "" Range("B29").Value = "" Range("P5:P9").Value = "" Range("Q5:Q9").Value = "" Range("P15:P19").Value = "" Range("Q15:Q19").Value = "" End Sub よろしくおねがいします。(_ _)

  • エクセルのマクロ(range)について

    マクロの作りと理解の方法について教えてください。 今、日報を作り直しています。 以前作成した方は、このように作っていました。 Worksheets("日報").Select Range("Q7:Q23").Value = Range("U7:U23").Value Range("S7:S59").Value = Range("V7:V59").Value Range("A1").Select MsgBox " 転写を終了しました。" End Sub マクロでは複数の行列を指定していますが、1行だけ表すと、 具体的な表とデータの変化の仕方とするとこのようになっています。 M    O    Q     S       U     V 個数 金額  累計個数 金額金額 (=M+Q) (=O+S) 0、   0、   100、   1000、    100、   1000  1,初期状態 10、  100、  100、   1000、    110、   1100 2,個数を入力すると、計算式を入力してあるUとVの数が変わる 10、  100、   110、   1100、    120、   1200 3,マクロを実行すると、UとVの数がQとSに入力され、計算式を入力してあるUとVの数がさらに変わる。 0、   0、    110、   1100、   110、    1100 4,MとOの数をゼロ(クリア)にすると、計算式を入力してあるUとVの数が変わる。      なかなか理解できないのは、Range("Q7:Q23").Value = Range("U7:U23").Valueの部分で、 2,の後にマクロを実行すると、U 110、V 1100がQ 100とS 1000に書き込まれることです。 通常の計算式だと=は対象となったセルをそのまま表示していると思うのですがのですが、 マクロに書いてある式だと3,のところでUとVの数をQとSに書き込んであります。 なぜ=なのにマクロでは一方のセルに数を書き込んでいるのでしょうか。 また、QやSをUやVへ書き込んでいないのでしょうか。 どなたか詳しく教えていただけると幸いです。

  • エクセルのマクロについての質問です。

    エクセルのマクロについての質問です。 複数のシートのデータを一つのシートにまとめるマクロを使用しています。 以下のものになります。 Sub まとめ() Dim i As Long, ii As Long ii = 1 With Worksheets .Add before:=.Item(1) For i = 2 To .Count .Item(i).Range("BX6:CQ15").Copy .Item(1).Cells(ii, "A") .Item(i).Range("C59:U68").Copy .Item(1).Cells(ii, "U").PasteSpecial Paste:=xlPasteValues ii = ii + 10 Next i End With Application.CutCopyMode = False Range("1:1").Insert Sheets(2).Range("BX5:CQ5").Copy Sheets(1).Range("A1") Sheets(2).Range("C58:U58").Copy Sheets(1).Range("U1") Columns("B").SpecialCells(xlCellTypeBlanks).EntireRow.Delete Sheets(1).Columns("C:D").Delete Sheets(1).Columns("F:G").Delete Sheets(1).Columns("G:O").Delete End Sub このマクロを使用してまとめたシートの数値の部分(各シートのC59:U68のデータを貼り付けた部分、まとめたシートのH2のセルが起点です)を変更するとコピー元(各シートのC59:U68)の数値も同じように変わるというものを作りたいです。 いろいろと調べましたが手も足も出ませんでした。 ご教示いただけないでしょうか? 宜しくお願いいたします。

  • EXCELのマクロに関して

    vbaのマクロに関して質問があります。 マクロをどのように作ればよいでしょうか? マクロは以下のようになっています。sheet1以外(sheet2,sheet3など)に単語を入れて、sheet1でフラッシュ単語のようにするマクロです。これに付け加えたい内容があります。sheet1のセルにある値を入れれば、sheet1以外のシートのある特定の列をフラッシュ単語としてだしたいと考えています。シートと列を指定したいと考えています。 どのように付け足せばよいでしょうか? Sub sample() Dim i As Integer i = 1 Worksheets("sheet1").Activate Do Sheet1.Range("A1").Value = Sheet3.Range("b" & i).Value '1000で1秒,oで場所,sheet2の場所 Call Sleep(1000) DoEvents i = i + 1 Loop Until IsEmpty(Sheet3.Range("b" & i).Value) '1000で1秒,oで場所,sheet2の場所 End Sub

  • エクセル マクロの設定方法について

    差込印刷でSheet1に作成した名簿データにより、sheet2に作成しているデータへ差込印刷をしています。現在、次のようなマクロを組んで名簿の件数に合わせて、For = 2 To 500 Step 8を修正しながら、印刷しています。できたら、名簿の件数の増減に関係なく印刷できるようになればと考えています。始めたばかりのマクロ初心者です。よろしくご教授ください。お願いします。 Dim i As Long Dim ws1 As Worksheet, ws2 As Worksheet Set ws1 = sheets(″sheet1″) Set ws2 = sheets(″sheet2″) For i = 2 To 500 Step 8 ws2 .Range(″A1″).Value = ws1.Cells(i+1,2).Value ws2 .Range(″A7″).Value = ws1.Cells(i+2,2).Value ws2 .Range(″A13″).Value = ws1.Cells(i+3,2).Value ws2 .Range(″A19″).Value = ws1.Cells(i+4,2).Value ws2 .Range(″F1″).Value = ws1.Cells(i+5,2).Value ws2 .Range(″F7″).Value = ws1.Cells(i+6,2).Value ws2 .Range(″F13″).Value = ws1.Cells(i+7,2).Value ws2 .Range(″F19″).Value = ws1.Cells(i+8,2).Value DoEvents ws2.PrintOut Next End Subws2 .Range(″F1″).Value = ws1.Cells(i+5,2).Value ネット等で調べて、上記のようなマクロで作業してます。(マクロの設定方法が間違っているところがあると思いますが?)

  • マクロについて教えてください。

    マクロ初心者です。以下について教えてください。 1.B1~B5までの範囲内にA1~A5までのデータをランダムに1つづつ貼り付ける 2.もしB1にデータが入力されていたら、ひとつ下へデータを貼り付ける 3.これを、B5まで繰り返す If Range("B1)=""Then Range("B1").value=Range("A1").Value Else Range("B1").Offset(1,0).Select ( ? )←ここに何か入れれば表示されますか? これだと、B1にセルが移動しただけで終わりになってしまいます。移動した先にデータを貼り付けるにはどうすればよいですか?? よろしくお願いします。

  • エクセルのマクロ

    Sub test() x = Range("b1") z = Len(x)  For i = 1 To z   Range("a1").Offset(i - 1, 0).Value = Mid(x, i, 1)  Next i End Sub 上記は、"B1"に入力されているデータを、"A1"から下方向に一文字ずつ入力していくマクロです。 これに条件を付け加えたいのですが。 "今日(きょうは)雨[あめ]でした"のように、"( )"や"[ ]"内の文字はカッコも含めてフォントが赤(ColorIndex = 3)になるようにしたいのですが。 上の例だと、"(きょうは)"と"[あめ]"のフォントが赤になります。 おわかりの方がいましたら、お願いいたします。

  • エクセルマクロでの計算について(2007)

    エクセルマクロ初心者です。 試行錯誤しながら作成しています。 セルB1には直接計算式を入れており(=(480+(A1)*10)/480*I1) その結果次第(70以下)でセルC1に計算結果(=(75-B1)*.48)をいれて 70より大きければセルC1に"-"を入れたいのですが上手く計算してくれません。 この処理を約65個のセルにしようと思っています。(セルの列はバラバラです) どうすればよいかご教示ください。 ちなみに現在作成している文は Private Sub 計算_Click() Worksheets("sheet2").Select If Range("B1").Value <= 70 Then Range("C1").Formula = "=(75 - (B1)) * 0.48" Else: Range("C1").Value = "-" End If End Sub よろしくお願いいたします。

  • エクセル マクロについて

    Book1で入力データ作成し、保存次第、添付画像の黄色部分に、自動転記する様マクロを組みたいと考えています。 現在、勉強中で、簡単な下記の様なマクロはできました。 これを応用して実践してみたいのですが、何を加えればよいのか、アドバイス頂けたら幸いです。 --------- Sub Macro1() ' ' Macro1 Macro ' ' a = ActiveCell.Value Range("A2").Select ChDir "C:\Users\takana\Desktop" Workbooks.Open Filename:="C:\Users\takana\Desktop\転記.xlsx" Sheets("Sheet2").Select ActiveCell.FormulaR1C1 = "" Range("B2").Select ActiveCell.FormulaR1C1 = a Range("B3").Select End Sub -----------

専門家に質問してみよう