• 締切済み

エクセルマクロの質問です。

peachstreaの回答

回答No.3

純粋なExcelマクロではないですが、VBSを経由した間接的Excelマクロというのはどうでしょう? 01.csvが次のような内容だとしますね。 1,2,3,4 A-1,B-1,C-1,D-1 A-2,B-2,C-2,D-2 A-3,B-3,C-3,D-3 A-4,B-4,C-4,D-4 A-5,B-5,C-5,D-5 A-6,B-6,C-6,D-6 A-7,B-7,C-7,D-7 A-8,B-8,C-8,D-8 A-9,B-9,C-9,D-9 便宜的に02.csvと03.csvと04.csvというのもあったとして01.csvと同じ内容とします。 ここで、コードを簡略化するため、csvファイルの拡張子を除いた部分(01~04)をそのままシート名の番号部分に割り当てているのでcsvファイルの名称は必ず1から始まる連番にしてください(数値でなかったり連番でないとエラーになります)。 次の内容を例えばSample.vbsという名前で保存し01.csv~04.csvのファイルをドラッグしてこのSample.vbsにドロップすると処理が始まります。 '----Sample.vbs---- Set objArgs = WScript.Arguments Set objAXLS = CreateObject("Excel.Application") objAXLS.Visible = True Set Book = objAXLS.WorkBooks.Add n = objArgs.length - Book.Sheets.Count If n > 0 Then For i = 1 To n Book.Sheets.Add Next End If Set objIE = CreateObject("InternetExplorer.Application") objIE.Navigate("about:blank") Set objFS = CreateObject("Scripting.FileSystemObject") For i = 0 To objArgs.length - 1 sn = CInt(objFS.GetBaseName(objArgs(i))) sname = "Sheet" & CStr(sn) Set f = objFS.OpenTextFile(objArgs(i), 1) arrCSV = Split(f.ReadAll, vbCrLf) temp = "" For j = 0 To UBound(arrCSV) - 1 arrRow = Split(arrCSV(j), ",") temp = temp & arrRow(sn-1) & vbCrLf Next objIE.document.parentwindow.clipboardData.SetData "text" , temp With objAXLS .Sheets(sname).Select .Cells(1,sn).Select .ActiveSheet.Paste End With Next objIE.Quit '----Code End---- Excelの場合セル毎に操作すると時間がかかるようなのでクリップボード経由でExcelに貼り付けてみました。 なおソースネクストのウィルスセキュリティゼロがあると、csvファイルを開こうとするとなんだか警告ダイアログが表れますorz

関連するQ&A

  • エクセルのマクロ

    以下の処理をするマクロを教えて頂きたいのですが。 ファイルab.xlsのSheet1のA1からA100までのデータを、ファイルcd.xlsのSheet3のC列にコピーする。 ただし、Sheet3のC列には既にデータが入力されているので(空欄も有)、一番末端に付け足す形にする。 続けて、ファイルab.xlsのSheet2のA1からA100までのデータを、ファイルcd.xlsのSheet3のC列に、前と同様のやり方でコピーする。 宜しくお願いいたします。

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

    ファイルA.xls __A__B__C 1_______1 2_______5 3_______7 4_______4 5_______5 6_______6 ファイルB.csv __A__B__C 1_1__5 2_5__6 3_7__7 ファイルC.csv __A__B__C 1_6__5 2_7__8 3_6__8 のような3つのファイルがあったとして ファイルA.xlsからマクロを実行して __A__B__C 1_1__5__1 2_5__6__5 3_7__7__7 4_6__5__4 5_7__8__5 6_6__8__6 ファイルB.csvをファイルA.xlsのA列とB列に ファイルC.csvをその下の最終行に貼り付けたいと思うのですが どのようにすればいいのでしょうか? 注意点としては、 (1)今は例として3行、3行の6行ですが、実際は1000行以上あり 毎回行数は変わります。 (2)ファイルA.xlsのC列には実際は関数が入っていて、 ファイルB.csvとファイルC.csvを張り付けた情報を計算して表示する ようになっています。

  • エクセルマクロでマクロをアクティブにしたくない

    エクセルのマクロをひとつの「マクロA」という名前で、データーファイルからセルに入っている内容などを呼び出しながらまくろAのシートにデーターを貼り付けながら作業をしています。 Workbooks.Open Filename:= _ "C:\Documents and Settings\owner\My Documents\マクロ.xls" Application.Run "マクロ.xls!マクロ" と記載すると、マクロXLSがアクティブになってしまいます。 その為記載に'ActiveWindow.WindowState = xlMinimized と入れたりするのですが、アクティブになるシートがマクロ以外にうまくいかないことがあるのです。 データーシートは、毎回データーが変わる関係で、DATA.xlsがAのときやBのときが発生します。

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

    エクセルで以下のことが行いたいのですがVBのマクロを 利用すればよいのでしょうか? とても長い説明です。わかりにくいと思います。 マクロは初心者ですのでよろしくお願いします。 行いたいことは二つのエクセルデータを一つにしたいということです。 abc1.xlsの同じ名前がある行とacb2.xlsの同じ名前がある行の一部の 内容をコピーしてabc1.xlsへ同じ名前がある内容へ追加したいのです。 1.【abc1.xls】と【acb2.xls】という二つのデータがあります。 2. すべての作業は【acb2.xls】のある一部の内容を【abc1.xls、Sheet1】へコピーしたい。 3.【abc1.xls、Sheet1、A列】と【acb2.xls、Sheet1、AB~AP列】にはまったく同じ名前があります。 4.【abc1.xls、Sheet1、A列】とまったく同じ名前がある【acb2.xls、Sheet1、AB~AP列】を参照して  【abc1.xls、Sheet1、M列】に列を1つ追加して【acb2.xls、Sheet1】の【AB~AP】の同じ名前をコピーしたい。   ただし必ずしも同じ名前があるとは限らない。   また、万が一同じ名前がacb2.xlsに二つ存在する場合はabc1.xlsに行を追加し内容をコピーできるようにしたい。   (上書きされないようするため) 5. 上に続き【abc1.xls、A列】とまったく同じ名前がある【acb2.xls、AB~AP列】を参照して  【abc1.xls、Sheet1、M列】に列を2つ追加して【acb2.xls、Sheet1】【AとH列】をコピーして貼り付けたい。 6.【abc1.xls、Sheet1、A列】と【acb2.xls、Sheet2、U列】にはまったく同じ名前があります。 7.【abc1.xls、A列】とまったく同じ名前がある【acb2.xls、Sheet2、U列】を参照して  【abc1.xls、Sheet1、M列】に列を1つ追加して【acb2.xls、Sheet2】の【U】の同じ名前のみコピーしたい。   ただし必ずしも同じ名前があるとは限らない。   また、万が一同じ名前がacb2.xlsに二つ存在する場合はabc1.xlsに行を追加し内容をコピーできるようにしたい。   (上書きされないようするため) 8. 上に続き【abc1.xls、A列】とまったく同じ名前がある【acb2.xls、Sheet2、U列】を参照して  【abc1.xls、Sheet1、M列】に列を2つ追加して【acb2.xls、Sheet2】【OとR列】をコピーして貼り付けたい。 9.【abc1.xls、Sheet1、A列】と【acb2.xls、Sheet3、S列】にはまったく同じ名前があります。 10.【abc1.xls、A列】とまったく同じ名前がある【acb2.xls、Sheet3、S列】を参照して  【abc1.xls、Sheet1、M列】に列を1つ追加して【acb2.xls、Sheet2】の【S】の同じ名前のみコピーしたい。   ただし必ずしも同じ名前があるとは限らない。   また、万が一同じ名前がacb2.xlsに二つ存在する場合はabc1.xlsに行を追加し内容をコピーできるようにしたい。   (上書きされないようするため) 8. 上に続き【abc1.xls、A列】とまったく同じ名前がある【acb2.xls、Sheet2、S列】を参照して  【abc1.xls、Sheet1、M列】に列を2つ追加して【acb2.xls、Sheet3】【OとR列】をコピーして貼り付けたい。 以上よろしくお願いします。

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

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

  • エクセルファイルの1レコード(1行)を1csvファイルへ変換マクロ

    エクセルファイルの1レコード(1行)を1csvファイルへ変換し、エクセルファイルにあるレコード数分だけあるフォルダに自動作成するマクロを教えて下さい。 因みに、csvファイル名は、エクセルデータの『a列.csv』となるようにしたいです。 【例】 本日2007/11/13 ○○.xls A列 B列 C列 111 1 356 13 1 2 ・ ・ ・ ・ ・ ・ 111.CSV "2007/11/13(火)","1","356,"","","" 13.CSV "2007/11/13(火)","1","2,"","","" 変換後のcsvの中身は 1列目に、本日の日付 2列目に、1 3列目に、変換元のエクセルファイルの3列目 4、5、6列目に空白 という形式です。 どなたかお分かりになるかた、ご教授願います。

  • エクセルマクロでコピーの質問です。

    エクセルマクロでコピーの質問です。 こんにちわ^^; よくわからないエラーが起こっているため困っています。 1.xlsという別のエクセルを開いて指定のセルをコピーし、貼り付けるということで下記のマクロを作ってみました。 ちなみにマクロを書いたファイルはsum.xlsで、1.xlsのコピーしたいセルには数値のみ入っています(書式は会計)。 Sub before() Workbooks.Open Filename:="c:¥aaa¥1.xls" Range("a1:a5").Copy ActiveWindow.Close Range("a1").PasteSpecial End Sub しかし、このマクロをThisWorkbookに貼り付けると文字列として保存されてしまいます。 そこで最後の行を Range("a1").PasteSpecial Paste:=xlValues にするとエラー400が出ます。 一応、sheet1(sheet1)に貼り付けて実行してみたところ、コピー自体ができませんでした。 まだ余りエクセルマクロを理解していないため、なぜなのかが良くわからないのでアドバイスをお願いいたします。 ちなみに使っているのはoffice2003のエクセルです。

  • エクセルのマクロで」・・・

    マクロの超初心者です。 1度研修で習った程度です。 a.xlsというブックでマクロを動かし、 既にいくつかシートがあるb.xlsを開いて最後のシートの次に新しいシートを作り、 既にあるc.xlsの1つ目のシートにあるデータをb.xlsの新しく作ったシート に貼り付け、b.xlsとc.xlsのブックは閉じるようにすることはできますか?(b.xls,c.xlsは最初閉じている) どのような感じにa.xlsでマクロを組めばよいのでしょうか? 今起動しているブックではないブックを起動したりできるのかも不明です。

  • エクセルで別ファイルのシートの貼り付けマクロ

    マクロ初心者です。よろしくお願いします。 excelファイルのシートに同じシート名csvファイルのデーターの貼り付けをしたいのです。 ↓詳しくは。 excelファイルがあります。(ファイル名:全社) シート名=集計、1、2、3、4、5、6、7、8、9、10(固定) csvファイルがあります。1~始まり数は変動(1~3だったり、1~7とか) 1ファイル=1シート、ファイル名とシート名は同じ excelファイルのシート(1~10)に、開いたcsvファイルの同じシート名(1~10)のデータを貼り付けたい。 毎回コピー・貼り付けの繰り返し作業なので、マクロ作成を試しているのですが、うまくいきません。 教えてください。お願いします。

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

    エクセルのマクロについての質問です。 長文申し訳ございません。 Excelマクロが何度作り直してもうまく作動せず非常に困っております。 (1)ファイルAのシート1のDB列3行目に1の値をいれます。 (2)ファイルAのDC列172行目の値をファイルBのシート名が「1」のシートのD列4行目に入れます。 (3)ファイルAのDC列2733行目の値をファイルBのシート名が「1」のシートのD列6行目に入れます。 (4)ファイルAのDC列3128行目の値をファイルBのシート名が「1」のシートのD列7行目に入れます。 (5)ファイルAのシート1のDB列3行目に1.2の値をいれます。 (6)ファイルAのDC列172行目の値をファイルBのシート名が「1.2」のシートのD列4行目に入れます。 (7)ファイルAのDC列2733行目の値をファイルBのシート名が「1.2」のシートのD列6行目に入れます。 (8)ファイルAのDC列3128行目の値をファイルBのシート名が「1.2」のシートのD列7行目に入れます。 (9)以上のようにファイルAのシート1のDB列3行目に入れる値を0.2ずつ増やしていき、その値に対応したファイルBのシートに上記のように値を入れていくという動作を20まで繰り返す。 以上のようなマクロを作る事は可能でしょうか? マクロについて勉強はしているのですが上手く使いこなせず苦労しております。 長文の質問で大変申し訳ございませんがよろしければ皆さまのお知恵をお貸しください。 宜しくお願い致します。