• 締切済み

EXCEL のマクロを作りたいんですが・・・

マクロはあまり詳しくありません。マクロの記憶で設定し、多少内容の変更をする程度です。 マスターのBOOKがあり、月ごとにデータを入力し、その都度名前を付けて保存します。 (データの量はまちまちです) Sheet1にデータを入力し、Sheet2には関数が入っております。 使いたいのはSheet2にあるデータなのですが、データが無い欄は関数が入っていますので、そのままではデータとして使うのが面倒です。 CSVで出力するにしても、空の関数の欄が,,,,と出ます。 データが入っているセルだけを範囲指定して、値の貼り付けをし、使用していない空のセルの関数を消すというマクロが出来るでしょうか?

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.1

結果どういうデータが、どこへ出来れば良いのか、分かりません。 それで解答が入らないのでは。 具体例を上げるか、下記も踏まえ説明をお願いします。 >使いたいのはSheet2にあるデータなのですが どう「使いたい」のでしょう。 >データが無い欄 関数値が0か空白のセルですね。 >そのままではデータとして使うのが面倒です。 「使う」のがどう言う風に面倒なのか。 コンピュタ的に言って、何に使うのか。 >CSVで出力するにしても、空の関数の欄が,,,,と出ます これがないと、表に読みこんだ時、左詰めになって、列関係が崩れるからで、これがないと、一般的には困るでしょう。 >データが入っているセルだけを範囲指定して 編集-ジャンプ-セル選択-数式-数値で選択できるかもしれません。 >使用していない空のセルの関数を消すという 関数を消せば、後々困るのではないでしょうか。 パターンとして下記ぐらいかな。 Sub test01() Dim cl As Range For Each cl In Selection If cl.HasFormula Then If Not (cl = 0) Then ' (処理) End If Else If Not (cl = 0 Or cl = "") Then ' (処理) End If End If End Sub

SL-Blue
質問者

お礼

補足:マクロの記憶でやろうとすると選択範囲が決まってしまい、上手く出来ませんでした。教えていただいたマクロを実行するとコンパイルエラーになります。何か記入しないとだめですか?

SL-Blue
質問者

補足

imogasiさん。ありがとうございます。 書き方がまずくてすみません。 実はこれが出来れば、全く違うもので使いたいデータが二つあり、ひとつはB欄を名前とするとBを基準に並び替えてDの集計をするもの(この場合Dは金額です)データ→集計で集計表を作るのですが、関数があると印刷する時、不要な白紙のページが出来るため、先に削除しています。 もうひとつはCSVデータとして出力し、別のソフトに使うのですが、TEXTで開いた時,,,の行が複数あると重複しているというエラーになってしまう為です。 どちらもマスターがあるため、関数を残す必要はありません。     A   B   C   D 1   101  AA  XX  ZZ 2   106  BB  XX  ZZ 3   104  CC  XX  ZZ 4   103  DD  XX  ZZ この下の行から関数 : : 上の表で言うと、単純にA1:D4の範囲を値に変換し、その下の行以下の関数を消すというのでわかるでしょうか? (単位は行ごとで途中に空欄は無いため、A1:D4のブロックで考えてください) 貼るのは同じ場所です。 現在はA1:D4をコピーし空白のE1などに値で貼り付けA1:D4の関数に入った列を列削除するという方法をとっています。 今気がつきましたが、不要な関数を消せれば値の貼り付けはしなくていいのかも??? 長くなってすみません。よろしくお願いします

関連するQ&A

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

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

  • エクセルマクロ コピー元と貼り付け先を指定してコピー&ペーストを実行するマクロ

    単刀直入にやりたいことを述べます。 Cドライブと仮定します。3つのBOOKがあります。 それぞれ ----- BOOK1.xls「○○Sheet」・・・(実行するファイル)   A 1 BOOK2.xls「△△Sheet」・・・(コピーするファイル名の指定です) 2 A2:E2・・・(コピーするセル範囲の指定) 3 BOOK3.xls「□□Sheet」・・・(貼り付け先のファイル名の指定です) 4 A5・・・(貼り付け先のセルの指定) ----- BOOK2.xls「△△Sheet」・・・(コピー元ファイル)   ABCDE 1 あいうえお 2 かきくけこ 3 ・・・・・ ----- BOOK3.xls「□□Sheet」・・・(貼り付け先のファイル)   ABCDE 1 ・・・・・ 2 かきくけこ・・・(貼り付け) 3 ・・・・・ ----- >やりたいこと BOOK1.xls「○○Sheet」のA1のセルの値とA2セルの値を参照し、 その該当BOOKのセル範囲(BOOK2.xls「△△Sheet」のA2:E2)をコピーして、 BOOK1.xls「○○Sheet」のA3のセルの値と、A4セルの値を参照し、 その該当BOOKのセル範囲(BOOK3.xls「□□Sheet」のA5)へペーストする。 別のブックの指定したセルの値を別のブックの指定したセルへ貼り付けるだけなんですが、 以前関数を使って似たような事をしようとしたのですが、うまくいかなかったので、マクロならできるのでしょうか。 よろしくお願いします。(ちなみにエクセル2000又は2003です)

  • Excelのシートからシートへデータを移動したい

    Excelのシートで作成されている申込書(シート)があり、現在はその申込書シート(セル)に記載されている情報を別のシート(顧客データとして管理しているシート、複数行存在しています)に手入力しています。 この手入力の作業をマクロか関数で簡単にしたいのですが、下記の点がクリアできる良い案が分かる方がいたら教えて頂きたいです。 (1)申込書シートは顧客データシートに情報を移動したら、都度上書きしていきたい⇒申込書シートは同じbookで管理しないため(上書きについては申込書内容を都度手作業で貼り付けするつもりです) (2)顧客データシートは顧客が増える毎に2行目、3行目・・・というようA列が空欄になっている一番上に、申込書データの内容が反映されるようにしたい。 (3)貼り付けられたデータ(セル)は関数ではなく、値(文字)が貼り付けられるようにしたい。((1)のように申込書シーは都度上書きしたいため) 分かりづらい質問で申し訳ありません。。 ちなみにマクロは作成したことがありませんが、マクロでできるのであれば挑戦したいと思っています。 ご回答よろしくお願い致します。

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

    QNo.3421130で質問させて頂いた件の続きなのですが 入力シート(1)のA1に入力された値を、シート2のB1に表示(つまりB列の同じ行数のセルに表示)するというマクロをお教え頂き、早速実践してみましたが、入力シートA1に入っている値が入力シートA10から算出された値(例:A11に日付の2007/10/18と入っていて、A10にはMONTH関数で10だけを抽出している。そのA10の値10をA1が参照している状態やIF関数で反映された値等)がシート2に表示されません。 また本マクロは入力シート(1)とシート2の同じ行列のセルの表示しか出来ませんが、たとえば入力シート(1)のA2セルの値をシート2のB4に表示(任意で表示位置を変更する方法、シート2の反映セルを下へずらす等)が分りません。 以下、お教え頂いたマクロです。 Private Sub Worksheet_Change(ByVal Target As Range)  If Target.Column = 1 Then    Sheets("Sheet2").Cells(Target.Row, "B").Value = Target.Value  End If End Sub 続きの質問であることと、説明が分りにくく大変申し訳ありません。 非常に困っております。よろしくお願いします。

  • エクセルのマクロについて教えてください。

    エクセルのマクロについて教えてください。 Sheet名「1週」~「16週」の それぞれE5~E55、AC5~AC55,BA5~BA55,BY5~BY55,CW5~CW55,DU5~DU55,ES5~ES55 の値が変更されたら、そのそれぞれのセルの2つ右と、4つ右に Sheet名[データ]のC24とE24のデータを値の貼り付けで入力したいと思います。 具体的にやりたい操作がわかっているのですが、それをマクロにするのが難しくて、困っています。 具体的にどう記述すればよいか、教えていただけないでしょうか? WorkSheet Changeイベントに記述すればいいのだろうなぁまではわかっています。

  • Excelのcsv保存について

    別ブックのデータを参照して、csvで保存するためのブックを作ったのですが、参照のための関数が入力されているセルもcsvにnullで出力されてしまいます。 参照元.xls  A B C D E 1 あ い う え お 2 か き く け こ 3 さ し す せ そ 4 5 csv出力用.xls A1~E5には作業の都合上、 =IF([参照元.xls]Sheet1!A1="","",[参照元.xls]Sheet1!A1) のような関数を入れて参照しています。  A B C D E 1 あ い う え お 2 か き く け こ 3 さ し す せ そ 4 5 これをcsvで保存すると、 あ,い,う,え,お か,き,く,け,こ さ,し,す,せ,そ ,,,, ,,,, と、データは未入力だけど関数が入っている部分まで保存されてしまいます。 これを、 あ,い,う,え,お か,き,く,け,こ さ,し,す,せ,そ ここまでで保存できるような方法、 もしくは関数などはありませんでしょうか。 csv出力用のブックでは一括半角置換や全角置換、 誤入力されたハイフンやスペースの削除などをおこなっているので、 できればこの参照形式は崩したくありません。 わかるかたいらっしゃいましたらアドバイスをお願いします。

  • エクセルでマクロを作りたいのですが上手くいきません

    エクセルで会社で使うファイルを作成していますが、ファイルサイズが大きくなりすぎたので、こういうマクロが作れないかと調べていたのですが、やり方がわからないので困っています。 わからないのは、入力シートのA列にデータを入力して、シート2のB列に自動的に表示する ことを自動的にやってくれるマクロです。 今はIF関数をシート2に入力している状態ですが、セルに関数を入れる方法だとファイルサイズが大きくなりすぎてしまいます。 (IF関数をあらかじめ入力しておくセル数がとてもたくさんある為) なお、入力シートA列がブランクの場合は、シート2のB列には何も表示されないようにしたいです。 大変困っております。よろしくお願いします。 

  • エクセルマクロ:別のブックから該当するデータをコピー

    Book1のSheet1、A列に日付、B列に対応するデータがあります。 Book2のSheet1A1セルに入力された日付と一致するBook1Sheet1B列の値を、Book2のB1セルに値貼り付けしたいのですが、どのように記述すればよろしいでしょうか。 宜しくお願いいたします。

  • エクセルマクロのコードを隠す

    とあるExcel2003で開けるxlsファイルを貰いました。 セルに値を入力すると、セルの背景の色が変わります。 そういうマクロを組んでいるんだと思ったのですが、 シートに対して「コードを表示する」で見ても何も書かれていません。 プロジェクト欄にはこのシートと[ThisWorkbook]しかなく、 [ThisWorkbook]にも何も書かれていません。 組んだマクロのコードを何かして隠しているのでしょうか? それともエクセルの設定でそのようなことが可能なのでしょうか。

  • エクセルマクロ

    入力したワークシートを 新しいブックにコピーして保存するマクロを作成しました。 ただ下記の様に保管すると、 数式もそのまま元のエクセルファイルの数式を参照してしまいます。 下記のマクロをあまり変更しないで、 値貼付け(もしくは値貼付けしながら、新しいブックへコピー) するにはどの様に変更するといいでしょうか? よろしくお願いします。 'Sub newfilesave() Sheets("Sheet1").Copy '名前を付け、ファイル形式も決めてデスクトップに日付を付けて保存する。。 'ActiveWorkbook.SaveAs _ ' Filename:="C:\Users\xxxxx\Desktop\" & Format(Now(), "yyyymmdd_hhmm"), _ ' FileFormat:=xlOpenXMLWorkbook 'End Sub

専門家に質問してみよう