• ベストアンサー

エクセル マクロ

kagakusukiの回答

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.8

>ファイルをエリア分新規作成して、ファイルを一つずつメールの新規メッセージに添付するというのを追加できますでしょうか?エリア毎にメールに添付して送る処理を一気にマクロで処理してしまいたいのですが、このコードに追加でできますでしょうか?  VBAを使えば大抵の事は出来る筈ですので、おそらく自動的にメールに添付する事を可能にする方法も存在する事とは思います。  ですが、その様なVBAの構文を組もうとしましても、それが正しく動作するかどうかという動作確認を行うためには、複数のメールアドレスに対して実際にメールを送ってみるしか無い訳で、しかも想定される様々な状況に対してもバグがない事を確認するためにはその様なメールを何度も送らねばならならず、それはメールを送る相手の迷惑にもなりかねませんので、余程親しい間柄の協力者でもいなければ、おいそれと出来る事では無い様な気が致します。  残念ながら私には(確認のためだけのメールを1通だけならば兎も角、何通も送りつけても失礼にならない程の)親しい間柄の協力者の心当たりが無かったため、マクロによるメールの自動送信を試みようとした事は無く、そのやり方も存じません。  第一、機械的に処理しただけのファイルなのですから、中身を確認もせずに他者に送るのは如何なものかと思います。  例えば、元データに入力されていたエリア名の中に、入力ミスによって誤った名称(例えば「関東」と入力しようとして「kntoi」と入力してしまったり、「巻頭」と誤変換してしまったり、「関 東」等の様に途中に空白が挟まれた形式で入力されていたり等)が入力されてしまっている行があったりした場合、正しいエリア名と同じファイル名のファイル(例えば「関東.xlsx」)には、データに欠けが生じる事になります。  ですから、業務等で行うのであれば、作成されたファイルをメールに添付する前に、一旦内容をダブルチェックする事は必要不可欠ではないかと思われますので、自動送信するのは避けた方が宜しいのではないかと思います。  尚、「関東」を「kntoi」や「巻頭」、「関 東」等とした場合には、「kntoi.xlsx」、「巻頭.xlsx」、「関 東.xlsx」というファイルが作成されるため、まだ目視によって間違いを発見する事が容易ですが、エリア名を入力し忘れてエリア欄が空欄となっている行や、「関東?」等の様に、何かの拍子に間違ってファイル名には使う事が出来ない文字(「\」、「/」、 「?」、 「:」、「*」、「"」、「>」、「<」、「|」)が含まれたエリア名にしているものがあった場合には、ファイルが作成されないため発見が難しくなります。  その対策の一案としましては、エリア名毎に別のファイルに振り分ける前に、誤ったエリア名が入力されているものを修正する様にし、その際に役立つ様に、元データのBookに入力されるエリア名として「東北」、「関東」、「関西」、「四国」、「九州」等の様な決まった名称しか使われないのであれば、マクロを起動させる前に、そのエリア名の一覧表を別シート上に作成しておきさえすれば、オートフィルターを使ってその一覧表には存在しないエリア名が入力されている行のみを表示させる様なまた別のマクロを作成する事も可能だと思われますが、如何致しましょうか?  それから話は変わりますが、エリア名毎のデータを抽出する際や、新たなファイルを作成する際に、その度に表示を切り替えたのでは、液晶モニターの表示を変えるために僅かながら余計な時間が掛かるため、前回の回答で提案させて頂いたマクロの処理速度を少しでも速くするために、処理が終わるまで表示を切り替えない様に改良してみましたので、回答No.6で記述したVBAの構文中の i = Application.SheetsInNewWorkbook という行以下の部分を次のものと差し替えて下さい。 i = Application.SheetsInNewWorkbook Application.SheetsInNewWorkbook = 1 Application.ScreenUpdating = False Set myBook = Workbooks.Add Application.SheetsInNewWorkbook = i If myRange.Row > 1 Then Application.CutCopyMode = False ThisWorkbook.Sheets(mySheet).Rows("1:" & myRange.Row - 1).Copy With myBook.Sheets(1).Rows(1) .PasteSpecial Paste:=xlPasteAllUsingSourceTheme .PasteSpecial Paste:=xlPasteValues, Operation:=xlNone End With End If For i = 0 To n myBook.Sheets(1).Rows(myRange.Row & ":" & LastRow).ClearContents myRange.AutoFilter Field:=1, Criteria1:=myArea(i) Application.CutCopyMode = False ThisWorkbook.Sheets(mySheet).Rows(myRange.Row + Sgn(i) & ":" & LastRow).Copy With myBook.Sheets(1).Rows(myRange.Row) .PasteSpecial Paste:=xlPasteColumnWidths .PasteSpecial Paste:=xlPasteAllUsingSourceTheme .PasteSpecial Paste:=xlPasteValues, Operation:=xlNone End With Application.DisplayAlerts = False myBook.SaveAs Filename:=myFolder & myArea(i) & myNow & ".xlsx" Application.DisplayAlerts = True Next i Application.CutCopyMode = False myRange.AutoFilter myBook.Close Application.ScreenUpdating = True MsgBox "データをエリアごとに" & n + 1 & "個のファイルに分けて保存しました" _ , vbInformation, "処理の完了" End Sub

関連するQ&A

  • Excelマクロのコンボボックスに関して

    マクロを初めて扱います。 どなたか詳しい方、ご教授ください。 Excelのシート上にActiveXのコンボボックスを作成しました。 このコンボボックスに同じブックの別シートのA列のX行目からY行目までを格納したいと考えております。 どうかコードの書き方をお教えいただけませんでしょうか?

  • エクセルのマクロで悩んでます

    はじめて投稿いたします。 現在、エクセル2000でマクロを組んでいるのですが、何日も悩んでそこから動けないので質問させていただきます。 やりたいことは、 (1)検索フォームの入力テキストに記載した数値を読んで検索ボタンを押すと、 (2)データブック.xls内の完全に一致した数値のセルの行をアクティブにして (3)その行のA列からO列の値をコピーして (4)入力ブック.xlsの入力シートのB4:B18に数値だけ貼り付け したいと考えています。 検索フォームは入力ブック.xls内で作成しています。 今のところ、(3)でA列の値を読んで、(4)でB4セルに貼りつけということはできているのですが、複数になるとできていません。 根気よく、同じプログラムを書くのが良いのでしょうか? かなり面倒なので、もっと簡単にかける方法があれば教えてください。

  • こんな関数ありますでしょうか?

    こんな関数ありますでしょうか? 日頃お世話になっております。 Excel2000で、指定した検索条件に一致する隣のセルの 個数を取り出したいのですが、出来ますでしょうか? 「例」      A列     B列 1    みかん   東北 2   りんご    東北 3    りんご    関東 4   いちご    関西 5   りんご    九州 6   みかん    九州 7   いちご    四国 8   みかん    関東 上記データーより、A列の「みかん」を検索条件として B列より「東北」=1 「九州」=1 「関東」=1 というデーターを、取り出したいのですが。。。 ご教示お願い致します。 m(__)m

  • エクセルマクロで空欄と空欄の間のデータを取得する

    添付画像のようなデータが並んだエクセルシートがあります。(ブックA) ブックAsheet1のA列に数値が入っている行のB列~D列のデータを別のブックBから取得したいのです。 ブックBにsheet1~sheet20まであります。 ブックAsheet1のA列に数値が入っている行のB列~D列のデータを1セットとして、ブックBのsheet1のB1にコピーする。 次のグループをブックBのsheet2のB1にコピーする、 また次のグループをブックBのsheet3のB1にコピーする。 ブックBには書式設定してあるので、値のみコピーします。 ブックAのB列~D列の数値の配置はそのままでコピーします。 この作業をブックBからマクロで行う方法を教えて下さい。 宜しくお願いします。

  • エクセルのマクロについての質問お願いいたします。

    エクセルのマクロについての質問お願いいたします。 コピーについてお願いいたします。 A列に文字(文章)が1行目から150行ぐらいや2000行ぐらいなど文字があります。この行の間には空白の行もあります。 Range("A1:A2000").Copyこちらですと最終行の以下の空白行もコピーするので困っております。 例えば、文字が1000行までで終わっていたら、1000行までコピーする方法をどうぞご教授ください。

  • コピーするExcelマクロを作りたいです(2)

    「コピー元」ブックから「コピー先」ブックにコピー&ペーストを 行うマクロを作りたいのですが、列の計算が複雑で困っています。 Excelブックのキャプチャ画像を加えて再投稿します。 画像ではシートになっていますが、画面左のシートのような表から 右のシートの当てはまるセルにデータを写すようにお考えください。 「コピー元」ブックは月に一度ダウンロードするデータで、ピボット テーブルです。一月ごとに、前月の列が各営業所ごとに増えていき ます。行には、商品ごとの売上げが入力されています。 また、各営業所ごとに、年度合計列があります。(営業所の数は10 前後、商品の行は50以上はあります。) 「コピー先」ブックは、あらかじめ年度末までの行列セル、合計列が 用意されていて、「コピー元」ブックからデータを移動してくるのみ でレポートとして毎月提出する体裁です。 単純にコピーするだけならばよいのですが、毎月各営業所一列ずつ 増えていくというのが式にして表せません・・・また、できる限り 数値の変更を最低限にして、毎年度利用できるマクロにするという 希望もあります。 ご面倒かと思いますが、お力を貸してください。

  • エクセルのマクロの繰り返し

    よろしくお願いします。 「A1からA5までの数値を数字の大きい順に並び替えして、 そのA1からA5のデーターをC1からC5にコピーする。 次にB列に1列挿入する。」 ここまではエクセルのマクロ機能で出来ましたが それを100回くり返すコードというか、 コードの書き方、仕方がわかりません。 このばあいどのようなコードでしょうか

  • エクセルで変化する行数に対応してコピーするマクロ

    エクセルワークブックAを検索して見つかった範囲をワークブックBのシートとセルを指定して転記するマクロ。 このようなマクロコードを教えてください。 ブックAのシート1に以下のような配置で文字と数値が入っています。 A列        B列      C列      D列      E列 あいう えお            10       aa      かかか     123          20       ss      ききき     456                        くくく      8910                        けけけ     234                        こここ     5678                        さささ     9123 -------------スペース-------------------------------- かきく けこ             10      aa      かかか     123           20      ss      ききき      456           30      dd      くくく      8910                        けけけ      234                        こここ      5678 -------------スペース-------------------------------- さしす せそ             10      aa      かかか      123           20      ss      ききき      456                        くくく       8910                        けけけ       234 -------------スペース-------------------------------- 上記の様にスペースとスペースの間を1グループとしてコピーしたいのですが、行数が変化します。 また列によって入力されてる行数も違います。 ブックBから操作するマクロでブックAのシート1の”あいう”という文字列を含んだセルを検索して、 次のスペースまでの1グループをコピーしてブックBのシート1のA1に貼り付ける。 (あいう えお~9123まで) 続いてブックAのシート1の”かきく”という文字列を含んだセルを検索して、 次のスペースまでの1グループをコピーしてブックBのシート2のA1に貼り付ける。 (かきく けこ~5678まで) ブックAのシート1の”さしす”という文字列を含んだセルを検索して、 次のスペースまでの1グループをコピーしてブックBのシート3のA1に貼り付ける。 (さしす せそ~234まで) *ブックAのファイル名は固定ですが、ブックBは毎回違います。 マクロの実行はブックBから行います。 この様な条件でのマクロを教えてください。 行数変化に対応している部分に但し書きを付けて頂けると応用が利きますので有難いです。

  • エクセル:マクロの起動条件

    お世話になります。 以下の条件でのマクロを起動する方法、及びそのマクロを教えてください。 《条件》 ブックを開いた時、あるシートのC列でデータが入っている最下行の行番号とA列のデータが入って最下行の行番号の差が100以下だった場合、マクロを実行する。 (なおC列の行番号の方が必ず大きいです) ちなみに実行したいマクロは1~6の手順です。 1.ブックを開いたとき 2.「入力用」という名前のシートのC列でデータが入っている最下行の行番号とA列のデータが入っている最下行の行番号の差が100以下だった場合 3.「入力用」というシートにかかっているシートの保護をはずし 4.データが入っているC列の最下行のA~Z列を選択して、50行分 下にコピーする。  (例えば、C列の最下行が350行の場合、A350~Z350まで を選択したあと400行まで下にコピーする。) 5.再度シートの保護をかけ 6.A列でデータが入っている最下行の1つ下のセルを選択する ちなみに、2の条件に当てはまらないときはマクロを実行しません。 またC列の最下行よりA列の最下行が大きい数字になることはないはずですが、もし同じかA列の方が大きい場合、「エラー:C列よりA列が大きくなっています」と画面に表示させたい。 なお、行番号の差:100、選択するA~Z行、50行分下にコピー は変わる可能性があるので、修正する場合どの部分を修正すればよいかも教えてください。 よろしくお願いします。

  • 至急お願いします。エクセルのマクロに関してです。

    かなり至急です><エクセル2010のマクロの質問です。 2つ質問があります。 1つ目です。 以下の一連の作業を1つのマクロで行いたいのですが、どうしたらいいでしょうか? 現在は、シート1にデータがあります。 (1)選択した3列を、B~D列に移動する (2)B列に含まれるセルのうち、0(空白)でないセル数分だけシートを追加する。 (たとえば、シート1のB14~B18に数字がはいっていたら、シートを5枚追加するという感じです。) (3)B列に含まれるセルのうち、0(空白)でないセル数分に対し、2行ずつ各シートの3・4行目にコピーする。 (たとえば、シート1のB14~B18に数字がはいっていたら、シート2の3・4行にシート1の14・15行のコピーを貼り付け、シート3の3・4行にシート1の15・16行のコピーを貼り付け、シート4の3・4行にシート1の16・17行のコピーの貼り付ける・・・という感じです。) 現在は (1)Sub () Selection.Cut ActiveCell.Columns("A:C").EntireColumn.Select Selection.Cut Columns("B:B").EntireColumn.Select Selection.Insert Shift:=xlToRight End Sub (2) Sub Macro() Dim n As Long For n = 14 To 18 ' Sheets.Add Next End Sub (3) Sub Macro() Dim n As Long For n = 14 To 18 ' Sheets("Sheet1").Rows(n & ":" & n + 1).Copy _ Sheets("Sheet" & n - 252).Range("A3") Next End Sub と別々のマクロに分けてます。 また(2)(3)でみられる For n = 14 To 18 ' の部分の数字は手動でいれてますが、かなり時間をくってしまうので・・・。 2つ目です。 複数ブックに同じ動作をするエクセルのマクロが知りたいです。 現在100ほどブック(Book1~100)を開いていて、100のブックすべてのSheet1のA1のセルに「1」と入れたいのですが、 そのようなマクロはどうくんだらよろしいでしょうか。 ちなみにExcel2007です。 困っているので、お願いします。