• ベストアンサー

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

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

  • o8ji
  • お礼率55% (22/40)

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

  • ベストアンサー
回答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/17068)
回答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

  • セルに表示されている 別ファイルのシートのセルを参照するには?

    たとえば data.xlsの セルB1には "12345" と入力された別ファイルがあるとして セルA1に data.xls セルA2に Sheet1 セルA3に B1 セルA4に ( =[data.xls]Sheet1!$B$1 )  "12345" を表示したい セルA4にはどのように記入すればいいのでしょうか VBAは使いたくありません よろしくお願いします。EXCEL2000

  • ExcelVBA 他ワークブックへデータ書き出し

    いつもお世話になっております。 教えてください。 現在開いているExcelブックの特定箇所をボタンワンプッシュで、他Excelシートまでデータを書き出ししたいと考えておりますが、エラー発生のため、マクロ実行することができず困っております。コードを訂正する必要があると思うのですが、どのように訂正したらよいかわからず、ご教示頂けないかと思います。よろしくお願いします。 ex)添付ファイルを参照ください。現在開いているシート(シートA.xls)の特定箇所(A1)をマクロボタンを押下すると、他Excelシート(Cドライブの【シート】フォルダ内の【シートB】.xls)までデータを書き出ししたい(書き出す場所はシートAと同じA1)と考えております。 ※小生作成VBAコード Sub test() Workbooks("C:\シート\Bシート.xls").Worksheets("sheet1").Range("A1").Value = Workbooks("Aシート.xls").Worksheets("sheet1").Range("A1") End Sub

  • Excel VBA B列を検索して1行下をコピぺ

    はじめまして。 VBAを始めたばかりですが、自分ではどうにもならないので、教えていただければと思い、初めて質問致します。 A1~G1、1行目から1000行目まで各セルに数字がランダムに1つずつ入っているデーターSheet1があり、コマンドボタンを押すことによってMsgBoxに入力した数字をB列を下に検索していき、例えば、数字の8が入力されたら、B1から下にB列に8が出現したらそのセルの1つ下の行(A列~G列まで)をコピーしてSheet2に抽出したいと考えているのですが、なかなか出来ず、困っています。 イメージとして A B C D E F G H I 1 5 14 30 25 30 3 9 2 22 34 6 7 29 49 3 3 1 8 20 4 10 6 45 4 30 15 34 50 2 5 9 5 11 8 45 7 6 20 1 6 40 8 48 25 36 4 10 7 21 22 30 28 6 7 36 8 2 3 50 2 1 43 6 と、データがSheet1に仮にあって、8が入力されたなら4行目の 30 15 34 50 2 5 9 と 6行目 40 8 48 25 36 4 10、7行目 21 22 30 28 6 7 36という様に抽出されてSheet2に 上から順に貼り付けられる様にしたいので、皆様の御知恵をお貸しいただければと 思っております。かなり複雑かとは思いますが、どうか宜しくお願いいたします。 FINDやOFFSET、IF文、ループ等を使ってみましたが私のレベルでは全く話になりませんでした。 まだVBAかけだしなもので、なるべ簡単なくプログラムでお願いいたします。

  • 結合した文字列をファイル名に使えない

    Excel上に入力されているパス名とファイル名のデータを組み合わせて、 様々なファイルを開いたりコピーしたりするVBAのコードを作ろうとしています。 仮にシート上のA1セルに、C:\Documents and Settings\デスクトップ というパス名 A2セルに URIAGE.xls というファイル名が入力されていたとして、 A1の文字列データとB1の文字列データを結合する場合、 Sub FileSousa()  Dim a As String  Dim b As String  Dim c As String  a = Cells(1, "A").Value  b = Cells(2, "A").Value  c = Chr(34) & a & "\" & b & Chr(34)  Range("A3") = c としてみると、確かにA3セルには、"C:\Documents and Settings\デスクトップ\URIAGE.xls" と出力され、文字列が結合されたことがわかるのですが、その変数cのデータを使って  Workbooks.Open Filename:=c として、そのファイルを開こうとすると、ファイル名が見つからないとしてエラーになります。 ファイルはデスクトップ上の確かにその名前で存在しており、直接 Workbooks.Open Filename:="C:\Documents and Settings\デスクトップ\URIAGE.xls" とすると開きます。 " を Chr(34)によって入力したのがいけないのでしょうか、 Workbooks.Open Filename:=××× には、変数を置いてはいけないのでしょうか。 そもそも文字列の結合は、"あ" & "い" → "あい" となるのが基本だと思うのですが、 a="あ"、b="い"、c=a&b → c="あい"として結合した変数cについては、ファイル操作上のファイル名の設定項目として使えないのでしょうか。

  • ExcelVBAで複数セルを別シートに貼り付けたい

    Excel VBAでデータをコピーして、別シートに貼り付けるどうしたらいいのでしょうか。 Sheet1のセルA1からA4のデータをコピーして、Sheet2のC2からc5に貼り、次はSheet1のセルB1からB4のデータをコピーしてSheet2のC7からc10に貼りを500行ほど繰り返し(コピーするデータは、4行づつ横へ移動し、貼り付けるほうは4行づつ縦へ移動します。) それが終わったら、今度はB列、c列と100列ほど同じ操作を繰り返します。 いろいろな方法を試しましたが、なかなかうまくいきません。 どなたか教えていただけませんでしょうか。よろしくお願いいたします。

  • VBA2010,B3の値が変わったら、A3に

    VBA2010で,B列の値が変わったら、A列の同じ行に前日の日付を入力するには、マクロコードをどのように書けばよいですか?B列データ入力範囲はB3~B65536 尚、B3~B65536にはVLOOKUPで、他のブックから値を参照しています。 最後にA列の同じ日付セルを結合し、I列、P列、W列の同じ行に結合したセルをペーストたいのです。 宜しくお願い致します。

  • Excelで、少しプログラムのようなことがしたいのですが・・・

    『A.csv』と『B.xls』のように、別々のexcelfile(または、sheet)で、どちらにも同じ項目の『C』という列があるとします。 その列の入力されているデータ(数値)が一致したとき、『B.xls』のfile(または、sheet)の『C』という列のセルにそのデータ(数値)記入させる。 …みたいなプログラムをExcelでしたいのですが、できるでしょうか?

  • 列NOを連続するには?

    エクセル初心者ですが、教えて下さい。 A列1行目に[Book1,xls]sheet1!$B$3と他のファイルからデータを引用した時、同じくA列2行目以下に$C$3・・・・$AA$3と連続した列番号を変えた入力をどうやって指定するのか教えて下さい。

  • A列にあったものには1、C列にあったものには2

    シート1の内容をVBAをつかってシート2のようにしたいです。 つまり、シート1の2行目以降のデータをシート2のB列につなげて、 A列には シート1の1行目に記載している番号をふっていきます。 もともとA列にあったものには1、C列にあったものには2、E列にあったものには3と振りたいのですが、どのようにマクロを書けばいいでしょうか? [Sheet1]   A  B  C  D  E 1 1  2  3 2 aa aaa aaaa 3 bb bbb bbbb 4 cc cccc 5  dddd ----------------------------- [Sheet2] A B 1 1 aa 2 1 bb 3 1 cc 4 2 aaa 5 2 bbb 6 3 aaaa 7 3 bbbb 8 3 cccc 9 3 dddd

  • Excel でシート間の重複データ(Sheet1のA=Sheet2のA かつ Sheet1のB=Sheet2のB)

    Excel2000です。 Sheet1のA列・B列・C列・・・にデータが入っています。 Sheet2のA列・B列・C列・・・にデータが入っています。 Sheet1のA列とSheet2のA列は、似たようなデータが入っています。 Sheet1のB列とSheet2のB列も、同様です。 C列以降のデータは、シート間で全然関係ありません。 Sheet1の行データ(A列・B列)が、Sheet2(A列・B列)にも存在しているかどうか、 を知るには、どうすればよいですか。 C列以降の列のデータは、比較する際に使いません。 つまり、 Sheet1のA = Sheet2のA かつ Sheet1のB = Sheet2のB であるような行を知りたいのですが、 どうすればよいのでしょうか。

専門家に質問してみよう