• ベストアンサー

VBAでおしえてください

hofuhofuの回答

  • hofuhofu
  • ベストアンサー率70% (336/476)
回答No.9

VBAでは無くて、VBSですが。 以下のソースをメモ帳などに貼り付けて拡張子をvbsとして保存します。 C:\新規Microsoft Excel ワークシート(?).xlsの各シートのB列をC:\Target.xlsの同名のシートに集めるようになっています。 ファイル名は環境にあわせて適当に変えてください。 Const DstFileName = "C:\Target.xls" Dim SrcFileName Dim objXlsApp Dim objDstXls Dim objSrcXls Dim objDstSht Dim objSrcSht Dim DstXlsList(4) DstXlsList(0) = "C:\新規Microsoft Excel ワークシート.xls" DstXlsList(1) = "C:\新規Microsoft Excel ワークシート (2).xls" DstXlsList(2) = "C:\新規Microsoft Excel ワークシート (3).xls" DstXlsList(3) = "C:\新規Microsoft Excel ワークシート (4).xls" DstXlsList(4) = "C:\新規Microsoft Excel ワークシート (5).xls" Set objXlsApp = CreateObject("Excel.Application") Set objDstXls = objXlsApp.Workbooks.Open(DstFileName) For Each SrcFileName In DstXlsList Set objSrcXls = objXlsApp.Workbooks.Open(SrcFileName) For Each objSrcSht In objSrcXls.Worksheets Set objDstSht = FindSheet(objDstXls, objSrcSht) If objDstSht Is Nothing Then Set objDstSht = objDstXls.Worksheets.Add objDstSht.Name = objSrcSht.Name End If CopyDataColumn objSrcSht, objDstSht Next objSrcXls.Close Next objDstXls.Close True, objDstXls.FullName objXlsApp.Quit Private Function FindSheet(objDstXls, objSrcSht) Dim objDstSht For Each objDstSht In objDstXls.Worksheets If objDstSht.Name = objSrcSht.Name Then Set FindSheet = objDstSht Exit Function End If Next Set FindSheet = Nothing End Function Private Sub CopyDataColumn(objSrcSht, objDstSht) Dim objDstCell Dim objSrcCell Set objDstCell= objDstSht.Range("B2") While objDstCell.Value <> "" Set objDstCell = objDstCell.Offset(0, 1) Wend Set objSrcCell = objSrcSht.Range("B2") While objSrcCell <> "" objDstCell.Value = objSrcCell.Value Set objSrcCell = objSrcCell.Offset(1, 0) Set objDstCell = objDstCell.Offset(1, 0) Wend End Sub 蛇足ですがイミディエイトウインドウはVBAでは基本の分野にあたります。 インターネット等で調べてみるだけでなく、初期のうちは本を読むなどしたほうが理解がスムーズに行くと思います。

towa2005
質問者

お礼

ご丁寧にありがとうございます やってみます

関連するQ&A

  • Excel VBA シート間のコピー・ペースト

    いつもお世話になります。 「sheetA」「sheetB」の二つのシートがあります。 このシート間でのコピー・ペーストをしたいのです。 (1)「sheetA」の『R1C4』を「sheetB」の『R1C2』に、  「sheetA」の『R1C9』を「sheetB」の『R1C7』に、コピー・ペースト。  尚、最終行は、毎回違います。 (2)「sheetB」の『R1C1』には、先程、ペーストした、『R1C2』に値があるだけ、  ≪○≫印を入れたいのです。 以上、よろしくお願いします。

  • excelのオートフィル

    すいません、いろいろと調べてみましたがわからなかったので質問させてください。 あるシート(sheetA)に集計データがあり、それを別シート(sheetB)に表示したいとき、 シート名を固定し、参照するセル番号を10刻みで増やしたい場合、オートフィルで可能でしょうか? 具体的には、sheetAのAE4~AE242およびにランダムな数値データがあった際に、 ・sheetBのB3~B26にsheetAのAE4,AE14,AE24・・・と十刻みでコピー ・sheetBのC3~C26にsheetAのAE5,AE15,AE25・・・と十刻みでコピー ・sheetBのD3~D26にsheetAのAE6,AE16,AE26・・・と十刻みでコピー ということをしたいと思っています。 拙い文章で恐縮ですが、どなたか教えていただけると幸いです。 よろしくお願いいたします。

  • sheet1セルA1のデータ切り替えについて

    Excel2010に3つのシートsheetA、sheetB、sheetC があります。 それぞれセルA1のデータは,sheetAのA1=ブランク、sheetBのA1=b、sheetCのA1=c とします。 この状態で、 sheetBがActiveの時に、sheetAのA1=b sheetCがActiveの時に、sheetAのA1=c になるような関数、もしくはマクロを組み込みたいと思います。 どのようにしたら実現できますでしょうか? よろしくお願いします。

  • エクセルで自動的に範囲選択させるには?

    職場のエクセルの表を壊してしまいました。チカラを貸してください。 SHEETaに表があります。 常に表の最終行にデータを入力しています。  A10     B10    C10    D10   E10 3月3日   りんご   8個   みかん  5個 この一部を同じブックのSHEETbの表の最終行に =IF(SHEETa!A10="","",SHEETa!A10)といったふうに返しています。  A15     B15    C15 3月3日   みかん   5個 ちなみにSHEETaとSHEETbのデータの並び順は違います。 行の番号も違います。 作業としては、SHEETaを入力したあと、SHEETbの最終行を1行だけ 印刷します。 SHEETaを入力すると自動的にSHEETbの最終行が選択されるようにするにはどうしたらいいのでしょうか?    

  • エクセルのデータ移動(マクロ使用)

    エクセルのSheetAを使用して入力画面を作成し、そのデータをSheetBやSheetCへリンクさせて印刷を行っています。1件ごとの入力になるので、データが残りません。このSheetAのデータを別のSheetDか別のファイルへ行ごとの横一直線という形式で残したいのですが、どうすればよろしいでしょうか? また、反対に移動したデータを戻す場合などどうしたらいいのでしょうか? マクロを利用すればいいように思うのですが、マクロは印刷程度の簡単なマクロの知識しかありません。 もしも、何か方法があるようでしたら、いろんな応用が利きそうなので、今後に向かって幅が広がりそうなので、是非詳しい方お願いします。 <例> 1つめのデータをSheetAへ入力 SheetA セルA1 h16.12.1                  B2 ○○商事                           C3 △△-□□          ↓(データー移行) SheetD セルA1 h16.12.1 B1 ○○商事 C1 △△-□□  (この間にSheetAのデータはすべて削除) 2つめのデータをSheetAへ入力 SheetA セルA1 h16.12.3                 B2 ●●販売                            C3 ▲▲-■■          ↓(データー移行) SheetD セルA1 h16.12.1 B1 ○○商事 C1 △△-□□       A2 h16.12.3 B2 ●●販売 C2 ▲▲-■■

  • エクセル2003(VBA)で複数条件の合計を出したい

    エクセル2003(VBA)で日別個人集計表を作っています。が 配列関数を使うとほぼ動かない量のデータがあり、ユーザー関数等 を作って処理すべきなのかなと思い、ご質問させて頂きました。 一括処理してくれるようなVBAを希望しております。 下記に具体的なデータを記載しますので、どうかお知恵をお貸し下さい。 よろしくお願い致します。 ○元の参照データ(SheetA) ※レジのデータです A1: (日時)   B2: (担当) C2: (売上額) A2: 09/03/03 08:26 B2: 伊藤 C2: 1,000 A3: 09/03/04 18:12 B3: 武田 C2: 1,000 A4: 09/03/05 15:48 B4: 甲斐 C4: 1,000 A5: 09/03/05 09:24 B5: 迫田 C5: 1,000 A6: 09/03/04 03:23 B6: 武田 C6: 2,000 ・ ・ 以下30000行ぐらいあります。 ○日別個人集計表(SheetB) A1: (日付)   B2: (担当) C2: (売上額) A2: 09/03/03 B2: 伊藤 C2: 1,000 ←下記参照 A3: 09/03/04 B3: 武田 C2: 3,000 A4: 09/03/05 B4: 甲斐 C4: 1,000 A5: 09/03/05 B5: 迫田 C5: 1,000  ※C列には現在配列関数を入れ、オートフィルしていますが30行(人)を超えるともう動きません   C列は現在、下記の通りです。   例){=SUMPRODUCT(TEXT(SheetA!$A$2:$A$65536,"yy/mm/dd")=A2)*      (SheetA!$B$2:$B$65536=B2),SheetA!$C$2:$C$65536)}

  • 【Excel】印刷前の設定に戻す

    Excel2003を使用しています。 4シート(9ページ)を作業グループにして、印刷前にセルの塗りつぶしを解除して印刷。印刷終了後、セルの塗りつぶしを元の設定に戻す。 というマクロを作りたく、とりあえず、「新しいマクロの記録」でやってみました。 Sheets(Array("SheetA", "SheetB", "SheetC", "SheetD")).Select Sheets("SheetA").Activate で、コードが始まっていました。(SheetA,B,C,Dはシート名とします) このシート名の部分をシート名ではなく、シート番号で指定したいのですが、どのようにすればいいでしょうか?(単にシート番号に変更しても、エラーが出てしまいましたので。。。) マクロ勉強中でして、『Array』というのも今回初めて目にしました。よろしくお願いします。

  • 【エクセル】結合したセルからのリンクについて

    教えてください! エクセルのワークシート間のリンクについてです。 ワークシート(SheetA)内に結合したセルを作ってその中で計算式を作っているのですが、その計算された値を他の作業ワークシート(ここでは仮にSheetBとします)にリンクさせようとすると、SheetBのセル内に ='SheetA'!C1301:I1304 というように表示され、確定すると#VALUEとなってしまいます。また、リンク先のセルを選択するだけで固定された状態('SheetA'!$C$1301:$I$1304)になってしまいます。 毎回、:以降を消去して値をリンクさせているのですが、そのようなわずらわしい作業を行わずにリンクをさせたいのですがどのようにすればいいのでしょうか?設定で変更ができるようであればその方法を教えて下さい。 よろしくお願いします!

  • エクセルVBAで困ってます。

    エクセルVBAで困っています。 データ入力済みのシートが2つあります。 シート名を「Sheet1」「Sheet2」とします。 「Sheet1」のA列のデータが「Sheet2」のA列のデータと一致した時に それぞれのシートのセル番地を取得したいのですが出来ません。 教えて下さい。 データの並び順は「Sheet1」と「Sheet2」で異なります。

  • エクセルで入力済みのセルのみ見つけて・・

    エクセルで入力済みのセルだけを見つけ出して、 指定した場所に並べる作業をマクロで1発で出来るようにしたいのですが、その方法を教えてください。 シートが37シートあります。(sheetA1~sheetA12,sheetB1~sheetB12,sheetC1~sheetC12,sheet37) それぞれセルC5からC20まで数値が入っていますが、 最終行はC20とは限りません。(sheet37はまとめるためのシートで空白) C15が最終行の場合もあれば、C18が最終行の場合もあります。 各シートそれぞれ最終行が違います。(列は同じですスタートもC5です) 各シートのC列の入力済みのセルの数値をsheet37のB1セルから順番に縦に並べたいのです。 A,B,Cのシート順にC列に入力された数値を縦に並べます。 空白は無しで詰めて並べます。 これを1回の作業でできるマクロを教えてください。 それから入力済みの最終行を見つけ出すマクロの部分を表示して頂けるとありがたいです。 宜しくお願いします。