• ベストアンサー

エクセル マクロで行き詰まりました。助けて・・・

エクセル初心者です。初心者にも関わらず、マクロに挑戦して壁にぶち当たりました。やはり限界です。教えてください! <やりたい事> SHEET1に必要項目を入力してから計算開始ボタンを押す。計算結果を別シートに表示させると同時に、ボタンを押す毎にその計算結果を履歴として積み重ねる。 今回の計算結果    A     B    C    D    E 1       四月   20   30   40  2   9  履歴    10  2回前   六月   40   30   40  11  1回前   五月    30   40   50 12  今回   四月   20    30   40 うまく説明できませんが、数式セルを値だけコピーして、ボタンを押す度に自動改行しながらペーストをするというマクロなんだと思うんですが・・・。 非常に困っています。どうか宜しくお願いします。

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

  • ベストアンサー
回答No.5

こんにちは。 値だけ必要なら、コピーではなく代入がベターです。 PasteSpecialメソッドを使用すると使用後に範囲選択状態の解除など余計な手間が必要になります。 結果表Sheet2にCommandButtonがあるとして。 '-------------------------------------------------------- Private Sub CommandButton1_Click()  Dim LastR As Long  LastR = Range("B65536").End(xlUp).Row + 1  If LastR < 10 Then LastR = 10 ● Range(Cells(LastR, "B"), Cells(LastR, "U")).Value = Range("B2:U2").Value End Sub '--------------------------------------------------------- ●の部分はResizeを使うと Cells(LastR, "B").Resize(1, 20).Value = Range("B2:U2").Value 尚、If LastR < 10 Then LastR = 10 は 9行目に見出しがなかった場合(少なくともB9にない場合)に必要になります。 9行目に見出しがあれば不要です。 それから、最初の質問のレイアウトにある、1回前、2回前というのは、B列の四月、五月というので分かるのではありませんか? で、上記コードでは、1回前とかは省いてあります。  

exceling
質問者

お礼

おはようございます。回答ありがとうございます!! さっそく試してみたところ、やりたい事が出来ました。代入・・・、初めて知りました。ずっとコピーっていう認識しかなかったからですね。 kobouzu_suさんが回答してくださったマクロを自分なりに消化してみます。そうでないと何度もお世話になりそうですから。 今回は本当にありがとうございました。 ひとつお尋ねしたいのですが、visual basicの知識を深めるにあたり、おすすめの参考書ってありますか?

その他の回答 (4)

  • daruizm
  • ベストアンサー率61% (8/13)
回答No.4

前の回答が多少参考になったのなら幸いです。 >ボタンを押したら自動改行しながらデータはコピペ出来たのですが、 >全て最新のデータに書き換えられちゃいます。 >おそらくB2:U2のセルをコピーする際に値ではなく、 >数式をコピーしてしまってるからだと考えてます。 何がコピーされてしまってるかは実物を見ればわかりますよね。 実際のところ、数式がコピーされてましたか? で、私の書いた奴で、 Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=True の行のところが、前の行でコピーしたセルのデータを、 形式を選択して貼り付けするコマンド(正確にはメソッドと言う)で、 .PasteSpecial が実際の形式指定貼り付けコマンド名で(Selectionというのは変数みたいなもの) paste:=xlPasteValues というのが、「"値"を貼り付け」という意味です。 PasteSpecialというコマンドの詳細は参考URLをご覧下さい。 ただ、なんとなくSelectionとか使わない方法でやってるのかな、と推測します。 やっぱり一度、今作ってみてるマクロを見せていただくのが早い気もしますね。

参考URL:
http://www.moug.net/tech/exvba/0050104.htm
exceling
質問者

補足

selectionとか使わないんじゃなくて使えないんです・・・。なさけなし。 下記が現在のマクロです。ご覧の通り、値を貼り付け出来てません。 Sub 入力完了1_Click() Worksheets("Sheet2").Activate r = Cells(10, 2).CurrentRegion.Rows.Count + 9 Range("B2", "U2").Copy Destination:=Cells(r + 1, 2) End Sub コマンドボタンはSHEET1にあります。

noname#140971
noname#140971
回答No.3

Excel は操作したこともない門外漢ですが・・・・。 <Sheet1> _______________B____________C____________D____________E 10___________ 6月_________ 20___________ 30___________ 40 <Sheet2> 1_____________________________________________________________3 10__2回前__4月________20___________30___________40 11__1回前__5月________20___________30___________40 12__今回____6月________20___________30___________40 履歴の月数が違っていると思います。 実際に、ボタンを押してコピーさせると上のようになりました。 Option Explicit Const START_ROW = 10 Const COPY_ROW = 10 Private Sub CommandButton1_Click()   Dim I    As Integer   Dim intCount As Integer      intCount = Worksheets("Sheet2").Cells(1, 6)   For I = intCount To 1 Step -1     Worksheets("Sheet2").Cells(START_ROW + intCount - I, 1) = I & "回前"   Next I   Worksheets("Sheet2").Cells(START_ROW + intCount, 1) = "今回"   Worksheets("Sheet2").Cells(START_ROW + intCount, 2) = Worksheets("Sheet1").Cells(COPY_ROW, 2)   Worksheets("Sheet2").Cells(START_ROW + intCount, 3) = Worksheets("Sheet1").Cells(COPY_ROW, 3)   Worksheets("Sheet2").Cells(START_ROW + intCount, 4) = Worksheets("Sheet1").Cells(COPY_ROW, 4)   Worksheets("Sheet2").Cells(START_ROW + intCount, 5) = Worksheets("Sheet1").Cells(COPY_ROW, 5)   Worksheets("Sheet2").Cells(1, 6) = intCount + 1 End Sub コード自体はこのようです。 ただ、Worksheets("Sheet2").Cells(1, 6)にコピー回数を記録することで簡素化しています。 ※今回が実は一番上・・・・これも、アレンジすればいいです。

exceling
質問者

お礼

回答ありがとうございます。 別の回答者の方のところに補足説明(ほとんど説明しなおし)をさせていただきました。もし宜しければ、そちらの質問にも回答願えませんか?

  • MIYABF5D
  • ベストアンサー率26% (17/64)
回答No.2

えーと・・・ 初めまして。 イマイチやりたいことがわかんないです。 (ボクの知識不足&読解力がないだけかな) 例に表示されているのは 「別Sheet」で表示したい「結果」なんですよね? 未来である5月や6月が上にきているのがどうしてかわからないですが。 要は1列目の結果をマクロで一番下に表示させたいってことですか? もうちょっと補足お願いします

exceling
質問者

補足

3名の方に回答いただいきまして、ありがとうございます。私の説明不足がかなりの混乱を招いているようで・・・。申し訳ないです。未来が上に来てる・・・間違いです!すみません。 説明の仕方を変えます。 SHEET1のB10:T10までに計算に必要な数値を入力すると、その計算結果がSHEET2のB2:U2に出るようにしています。ただこれだけだと数値を入力する度に計算結果データが更新されてしまい、過去の結果データが失われます。そこで入力完了ボタンを設けて、それを押すとSHEET2のB10:U10にB2:U2の値をコピーして表示させる。2回目のデータはB11:U11、3回目はB12:U12、・・・というように自動改行しながら履歴として残したいのです。 ようするにボタンに対してのマクロだと思います。自分で色々と参考になりそうなものを見ながら試してみたら、ボタンを押したら自動改行しながらデータはコピペ出来たのですが、全て最新のデータに書き換えられちゃいます。おそらくB2:U2のセルをコピーする際に値ではなく、数式をコピーしてしまってるからだと考えてます。 ちなみに入力データをそのまま結果として使っているセルもあります。日付とか部品名とか。 PASTESPECIAL XLPASTEVALUES・・・・・・ここら辺りに辿り着いたのですがどう使っていいものやら。 これ以上は上手く説明できる自信はないです。何とか宜しくお願いします。

  • daruizm
  • ベストアンサー率61% (8/13)
回答No.1

初心者さんが挑戦するには、色々地味にややこしいマクロになりそうですね。 例えば、 1.Sheet2のA~D列の、1行目が空白になるように、空行を挿入 2.Sheet1のB1~B4のデータをコピー 3.Sheet2のA1~D1に、B1~B4のデータの値だけを貼り付け という程度のことならこんな具合ですが。 Sub Macro1() Sheets("Sheet2").Select Range("A1:D1").Select Application.CutCopyMode = False Selection.Insert Shift:=xlDown Sheets("Sheet1").Select Range("B1:B4").Select Selection.Copy Sheets("Sheet2").Select Range("A1").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=True End Sub これぐらいなら、なんとなくなにやってるかもわかると思いますけれど、 上で書かれてるように、途中に「履歴」という行をはさんだり、 2回前、1回前、というようなのを自動で入れたいということなら、 初心者の方が取り組むには、中々にややこしいマクロになります。 「マクロの勉強をしたい」なら、相応のところで手順を踏んで、 色々とサンプルマクロを作られるか、 ・今書いてみたマクロ ・実行したらどうなる を明確にしていただかないと、助言もしにくいかと。 「とりあえずこれを実現するマクロが欲しい」ということなら どなたかが作ってくれるのを待つしかないですけどね。 私は取り合えずご参考までということで。ポイントなど不要です。

exceling
質問者

お礼

回答ありがとうございます。コピペのマクロは何となく理解できました。 別の方のところに補足説明(ほとんど説明しなおし)をさせていただきました。もし宜しければ、そちらの質問にも回答願えませんか?

関連するQ&A

  • マクロで値を貼り付けたい

    Z列には数式が入っていて、マクロの実行ボタンをクリックするとその数式で出てきた答えをAA列に値で貼り付けるようにさせたいのですが、どのようにしたら良いのでしょうか? マクロの実行ボタンがそのシートを開くと常にシート上に表示されている状態にもしたいです。 マクロをわかっていないので、初心者でもわかりやすく教えていただけると嬉しいです。 よろしくお願い致します。

  • EXCELのマクロについて

    EXCELのマクロを使ってみたいと思いましたが、分からないことがあり、 みなさんの助けを借りたいと思い質問をしました。 現在、シート内にROUND関数を用いてランダムな数値を発生させています。 「開発」からボタンを設置し、そのボタンを押すとF9と同じ処理をするボタンを設置したのですが、 このボタンに「F9を1万回実行する」といった事をさせるのは可能でしょうか? ランダムな数値を1万回繰り返し発生させ、その1万回の結果をグラフなどにしたいと 思っているのですが、いかんせん初心者のため調べても分かりません;; どなたか教えていただけないでしょうか…。

  • マクロ初心者です。エクセルのマクロについてです。

    現在知識が全くない状態でマクロを使ったプログラミングを改良しようとしています。 現在のプログラミングでは、与えられたデータをあらかじめ計算し、その値を直接プログラミングに組み込んでます。 今回は直接プログラムに打ち込んである値を、別シートのマクロで自動的に計算し、その結果をプログラムが読み込むようにしたいと思います。 簡単に言えば、マクロのプログラムに直接計算結果を組み込むのではなく、別シートで計算したものをプログラムに組み込みたいということです。 例として、 100円と200円の商品を買い、それを二人で半分ずつ支払う計算結果と 200円と400円の商品を買い、それを二人で半分ずつ支払う計算結果 をプログラムに組み込むとすると、現在では一人あたり150円と、300円という数字を直接プログラムに打ち込んでいます。 これを、別シートで計算し、それをマクロのプログラムに読み込ませることは可能でしょうか? また、可能ならば、大体の流れはどういったものになるのか教えてもらえませんでしょうか? よろしくお願いします。

  • エクセルのマクロで作成した関数を他のエクセルのファイルから参照できるのですか?

    エクセルVBAに関して質問です。 a.xlsというファイルに複数のシートがあり すべてのシートにあるデータと「計算」ボタンがあります。 「計算」ボタンを押下すると、マクロが実行され 計算結果が同じシートに表示されます。 データの内容はシートごとに違いますが、 「計算」ボタンで呼び出したいマクロはすべて同じです。 この「計算」ボタンを押すと実行されるマクロを b.xlsに記述したいのですが、 (他のエクセルのファイルにも使いまわしたいので) そのようなことは可能なのでしょうか。 またどのようにマクロを記述すればこのマクロを 呼び出すことができるのでしょうか。 分かりにくい文章で申し訳ございませんが ご教授くださるとうれしいです。

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

    1)マクロでボタンを作成して、Sheet2に自動記載出来るようにしました。Sheet2で記載された文字は行で保護出来ないのでしょうか?シート全体に保護をかけたら、勿論ボタン入力出来なくなりました。 2)マクロのボタンで1回同じ項目をSheet2へ入力した人が、もう一回続けて入力ボタンを押して、Sheet2には同じ文字が入っていました。それを防ぐには何かないのでしょうか?例えば、同じ入力が項目・時間ならメッセージが出てくるとか、1回入力したら”保存されました”などのメッセージがあれば、防げるかな?と思っています。教えてください。

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

    マクロ超初心者です。 画像をみていただければわかると思いますが B3、C3にパラメータとして それぞれ50~300まの数値(10刻み)を任意で入力して C5~C11に何らかの結果を反映させる計算式の入った表が 「sheet1」にあるとします。 この時、このパラメータを総当りすれば C5~C11は676通りの結果がでると思うのですが その結果を「sheet2」の総当り表として 一発で表示させるにはどのようにすればよいでしょうか?

  • エクセル マクロ

    エクセル マクロで、シート1のA1セルないの文字列(数式)をクリックボードにコピーするマクロを組みたいのですが、セルのコピーは出来るのですが、文字列のみコピーが出来ません。貼り付けは任意でするので必要ないです。 初心者で何もわかりません。よろしくお願いします。

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

    エクセルのマクロについてお願いいたします。 E10~M10の500行全てのセルに数式が入っております。 そこでマクロにてコピーのボタンを設置しようと思ってます。 Range("E10:M10" & Range("M" & Rows.Count).End(xlUp).Row).Copy 画像のような数字の結果がある部分だけコピーをしたいです。 23行目からは数式が入ってますが結果は””空白になっております。 どうぞよろしくお願いいたします。

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

    実は、今日会社で失敗したのですが、エクセルのマクロ実行をしたら、エラー で実行中断となってしまいました。 ワークシートから別のワークシートへコピー&ペーストして印刷というマクロを組みたかったのですが、エラー内容は、 Active Cell Offset(-7,-14).Range("A1:AN15")selectです。 元のワークシートのセル位置と、コピーするワークシートのセル位置は同じ場所でないといけないのでしょうか? セルは同じ数とっているはずなのですが。何回かやってみて、 へんな場所にペーストされて、印刷までは出来たこともあるのですが、何がちがうのだろー。。解らない(;;) だれか教えてください!!!

  • Excelマクロ 複数のシートそれぞれで計算

    マクロの勉強を始めて間もない初心者です。 手持ちの解説書やネットで探してみたのですが解決できなかったので質問させてください。 計算式を手打ちで入力する手間を省くため、コードを書きました。 (不要かもしれませんが、一応記してみます。) sub 計算() dim 行番号 as integer for 行番号 = 10 to 46 cells(行番号,4).select with activecell .value=.offset(-2,0).value-.offset(-1,0) .offset(1,0).select end with next end sub マクロを実行すると、1枚目のシートでのみ、この計算がなされます。 が、私はこの計算を、複数の(もしくは全ての)シートで行いたいと考えています。 シートのフォーマットは全く同じで、入力してある数値が違うだけです。 シートが20枚以上あり、1枚ずつ選択して同じコードを書くには、コピー&ペーストを使うにしてもしんどいので、検索してみたのですが。。 調べて試してみた sheets.select や、 sheets(array("シート名1","シート名2"…).select では、セル値が異なるにもかかわらず、シート1の計算結果が以降のシートにも反映されてしまいました。 コードは共通でも各シートで独立した計算結果を導くには、どうすれば良いのでしょうか? お詳しい方、ご教示くださいますようよろしくお願い致します。

専門家に質問してみよう