こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

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

投稿日時 - 2011-07-07 22:57:11

QNo.6861350

困ってます

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

とりあえずこんな感じでしょうか。
ちょっと不細工かもしれませんがね^^;

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

投稿日時 - 2011-07-08 00:37:05

お礼

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

投稿日時 - 2011-07-09 00:46:43

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.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方式を使うとか。

投稿日時 - 2011-07-08 21:02:10

あなたにオススメの質問