• ベストアンサー

excelVBA でA+B列をファイル書き出し

excel2003の VBA で、開いているシートのA列(項目行)とB列(データ)を抜粋してB列の1行目のセルに入力されているデータをファイル名として新しいEXCELファイル(B列の1行目のセルに入力されているデータ.xls)として書き出したいのです。また、B列以降も、A列+C列で1ファイル、A列+D列で1ファイル・・・のように列にデータが記載されているまでファイルとして書き出したいのです。 このような書き出しVBAを教えて下さい。宜しくお願いします。

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

  • ベストアンサー
回答No.1

とりあえずこんな感じでしょうか。 ちょっと不細工かもしれませんがね^^; Dim i As Long Dim OldName, MidName, NewName As String Dim strSheet As String OldName = ThisWorkbook.Name strSheet = ActiveSheet.Name i = 2 Do Until Workbooks(OldName).Sheets(strSheet).Cells(1, i) = "" Workbooks.Add MidName = ActiveWorkbook.Name Workbooks(OldName).Sheets(strSheet).Columns(1).Copy Workbooks(MidName).Sheets("sheet1").Cells(1, 1) Workbooks(OldName).Sheets(strSheet).Columns(i).Copy Workbooks(MidName).Sheets("sheet1").Cells(1, 2) NewName = Workbooks(OldName).Sheets(strSheet).Cells(1, i) Workbooks(MidName).SaveAs NewName i = i + 1 Loop

o8ji
質問者

お礼

早速のご回答、ありがとうございました。 とても参考になり、やりたいことがほぼできました。

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.2

これも課題を文章にしただけの丸投げで、回答者にやってくださいと、テストしているようなものになっている。 もう少し筋道立てて考えて、どういうことをするコードが必要か(私は要素技術といっている)、切り分けられないのか。 またマクロの記録なども使えるのだ。 ーー 操作をしてマクロの記録をとった。 Sub Macro4() Workbooks.Add Range("A2:B4").Select Selection.Copy Windows("Book2").Activate Range("A2").Select ActiveSheet.Paste Application.CutCopyMode = False ActiveWorkbook.SaveAs Filename:= _ "C:\Documents and Settings\XXXX\My Documents\tst0708.xls", FileFormat:= _ xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False _ , CreateBackup:=False Windows("Book1").Activate End Sub ーー 知っておくべき基本は まづ1シートだけ取り出して、独立したブックに名前をつけて保存できない。 だから新しいブックに、まずA+B列ー>A列+B列、次にA列+C列ー>A列+B列という風にデータをコピー貼り付けし、その都度名前をつけて保存しなければならない。 簡単にするために元データがA,、B、C列しかない場合を考える。質問もこのように簡素化すれば良いのだ。 データを貼り付けるブックを作っておく。(下記でWB1)VBAで出来るが初心者は手動も兼用するが良い。 元データは、私の場合は、「列ごと保存.xls」と言うブック 別ブックも含めて扱うときは、ブック名.シート名.セル範囲の順に略さず書いたほうが良い。 また名前をつけて保存するその名前のルールを決めておく。下記ではtst0708" & i & ".xlsと固定文字+日付+連番にした。", Sub Macro5() For i = 1 To 2 Workbooks.Open "WB1.xls"   ActiveWorkbook.Worksheets("Sheet1").Cells.Clear Windows("列ごと保存.xls").Activate Workbooks("列ごと保存.xls").Worksheets("Sheet1").Columns(1).Select Selection.Copy Windows("WB1.xls").Activate Workbooks("WB1.xls").Worksheets("Sheet1").Columns(1).Select ActiveSheet.Paste '---- Windows("列ごと保存.xls").Activate Workbooks("列ごと保存.xls").Worksheets("Sheet1").Columns(i + 1).Select Selection.Copy Windows("WB1.xls").Activate Workbooks("WB1.xls").Worksheets("Sheet1").Columns(2).Select ActiveSheet.Paste '-------- Application.CutCopyMode = False ActiveWorkbook.SaveAs Filename:= _ "C:\Documents and Settings\OTO\My Documents\tst0708" & i & ".xls", FileFormat:= _ xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False _ , CreateBackup:=False ActiveWorkbook.Close Next i End Sub ーーー 上記はマクロの記録のコードにひきづられている(冗長な)面はある。 あとは列数からFor i = 1 To 2の2を実情に合わせて適切にするコードを考える。 さらには改良してCopy-Paste方式からCopy Destination方式を使うとか。

すると、全ての回答が全文表示されます。

関連するQ&A