• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセル・マクロの悩み 助けて下さい!)

エクセル・マクロの悩み 助けて下さい!

このQ&Aのポイント
  • エクセル・マクロを利用している中で行き詰まっています。マクロで行を移動する際に想定した動作にならず困っています。具体的な問題点としては、マクロの記録内容が予期しないセルに選択されてしまうことです。この問題に対して別の解決方法を見つけたいと思っています。
  • 毎日行っている請求書の作成と印刷、そして日計表へのコピー作業においてマクロを使って効率化しています。しかし、移動する行に関して何かと問題が発生しています。現在のマクロの記録内容では、行の移動先が予想外なセルになってしまいます。この問題を解決するために、他のアイディアを求めています。
  • エクセルでの作業効率化のためにマクロを使用していますが、行の移動時に問題が発生しています。最終行での行移動について記録したマクロの内容が予期しない動作を起こし、望んだ結果を得ることができません。この問題の解決策や他の方法についてアイディアを募集しています。

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

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率66% (1734/2604)
回答No.1

> エキスパートの方、お助けくださいませんか。 エキスパートではありませんが 最終行はEnd(xldown)もありですがEnd(xlUp)もありですのでxlUpにしたとしてコピーペーストを生かすのでしたら Range("B5:E5").Copy Cells(Rows.Count, "I").End(xlUp).Offset(1, 0).PasteSpecial Paste:=xlPasteValues Application.CutCopyMode = False データが入ればいいのでしたら(こちらの方が大量に処理する場合は早いです) Cells(Rows.Count, "I").End(xlUp).Offset(1, 0).Resize(1, 4).Value = Range("B5:E5").Value

bbtommy
質問者

お礼

kkkkkmさま 色々参考にして、以下のようにしましたら、何とか解決しました。 Sub 請求記録() ' ' 請求記録 Macro ' ' Range("B5:E5").Select Selection.Copy Range("I4").Select Selection.End(xlDown).Select ActiveCell.Offset(1, 0).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Range("A1").Select Application.CutCopyMode = False ActiveWorkbook.Save End Sub 大変お世話になりました。 今後も頑張ります。 また機会があれば、よろしくお願い申し上げます。

bbtommy
質問者

補足

kkkkkmさま 超特急のご指導、ありがとうございました。 ポイントに対して、漏らさずご指導いただき感謝申し上げます。 2つの素晴らしいマクロもご紹介くださり、早速、試してみましたところ どちらもうまく動きました。 短いほうのマクロなどボディーはたったの 2行!驚きました。 できる方ですね。 スゴイです! 僕もそんなレベルになりたいなと夢を膨らませました。 小生のいまの段階では、たとえ長くても、理解できるやり方でと 思って、教えていただいた Offset を元のマクロに組み込んでみました。 Sub 請求記録() ' ' 請求記録 Macro ' ' Range("B5:E5").Select Selection.Copy Range("I4").Select Selection.End(xlDown).Offset(1, 0) Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Range("A1").Select Application.CutCopyMode = False ActiveWorkbook.Save End Sub   Offsetの行がコンパイルエラーで、戻ってきました。 小生は、ビギナーでできのわるい生徒ですが、どこが悪いのか、 どう直せばよいのか、教えていただけますでしょうか? 1回目の返信の時から、ベストアンサーにする気は十分あるのですが、 そうしてしますと、コミュニケーションが途絶えてしまうと思い、していません。 最後に必ずベストアンサーとさせていただきます。 ひょっとして、マクロの指導サイトでも開設しておられるのではないかと 想像しております。 もし、そうであれば、是非、URLを教えてください。 今後も、時折、室m今させていただきたいと思っています。 どうか、よろしくお願い申し上げます。

その他の回答 (4)

  • kkkkkm
  • ベストアンサー率66% (1734/2604)
回答No.5

コンパイルエラーで「修正候補:=」 が出た場合は 指示が足りないということになります。 最後にメソッドかプロパティを足すか、その内容をどこかに代入するかなどです。 もとの最終行のセルを選択が Selection.End(xlDown).Select だったので、「一段下に」を付けたした選択なら Selection.End(xlDown).Offset(1, 0) ではなく Selection.End(xlDown).Offset(1, 0).Select になります。 マクロの記録でできたコードで手直ししたい部分なのですが Range("B5:E5").Select Selection.Copy このようにSelectとSelectionが連続した場合ほとんどの場合一行にできますし、画面のちらつきも減ります。 ↓ Range("B5:E5").Copy Range("I4").Select Selection.End(xlDown).Offset(1, 0).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False ↓ Range("I4").End(xlDown).Offset(1, 0).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False 私はサイトを持っていませんが、こちらのサイトでいろいろ見て回ってください。 http://officetanaka.net/excel/vba/ もしくは検索サイトで VBA やりたいこと (今回の場合でしたらVBA 最終行) で検索すると色々でてきます。上記のサイトも検索結果に頻繁に出てきます。 基本的には、殆どの場合上記の方法で解決するのでは、と思います。

bbtommy
質問者

お礼

色々調べている間に、追加のご指導をいただいたようです。 ありがとうございました。 よく理解できました。 変わらぬご活躍を祈念しております。

  • kkkkkm
  • ベストアンサー率66% (1734/2604)
回答No.4

コードは画像ではなくできれば質問にコピペしてください。回答に説明を加えようと思っても書き写すのが面倒なので最小の事しか書けません。 > それからもう一段下に行く方法 .Offset(1, 0) です。 以下のようにするといけると思います。マクロの記録でできる無駄な部分を省いています。 Sub 請求記録() Range("B5:E5").Copy Cells(Rows.Count, "I").End(xlUp).Offset(1, 0).PasteSpecial Paste:=xlPasteValues Application.CutCopyMode = False Range("A1").Select ActiveWorkbook.Save End Sub もしくは Sub 請求記録() Cells(Rows.Count, "I").End(xlUp).Offset(1, 0).Resize(1, 4).Value = Range("B5:E5").Value ActiveWorkbook.Save End Sub

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

質問の要点がぼやけていてわかりにくい。 データを累積(そうは言っても、上に積み上げるのでなく、下の行方向に、詰めて記録していく)する場合、そのシートの直前までに、データをセットした最終行を取得しないとならないが、 r=シート指定.Range(...).End(xlUp).Row+1をよくつかうが,これのことを聞いているのではないか? Range()内は、システム的に認められた最大行数を使うか、データがなさそうな、十分下方向の行を指定すればよい。 ーー ここへ質問する前に、WEB照会すること。この癖を付けないとVBA作成で、自立はできない。ここは、それでも見つけられない、判らない時の非常手段だ。 Googleで「Excel VBA 最終行 取得」で照会すれば、たくさん記事が出る。 5つぐらい読んで、気に入った記事を勉強したら。 もう、こういう処理ロジックにかかわることが問題になる段階に来ると、マクロの記録は役立たない。もちろん役に立つ分野・事項は多いが。)卒業すべきです。 ーー この質問に書いている、 >行き詰っている >エキスパートの方ー>初心者はエキスパートでないと、わからないと思いがちだが、皆知っていることが大半。 >JPEG 請求管理 >失敗例の自己作成コード などは、書かない方が増し。読む方は思考を乱されるだけ。 ーー 学習者は、パターン化した型を、頭に整理していくべきだ。VBA事例集の本を読んでおくとか。 このパターン収集癖の発揮が、学習のある時期には必要と思う。 画像を張り付けて、質問するのは、この発達を妨げやすいと思う。 多分本件は、「データ最終行の行番号取得」だろう。

bbtommy
質問者

お礼

コメント欄が違っていました。 こんごも、頑張ります。 ご指導、ありがとうございました。 

bbtommy
質問者

補足

imogasiさま ご指導、ありがとうございました。 今後は、WEBを良く調べてから、それでも解決しない場合に、 質問させていただきます。 ありがとうございました。 

  • kkkkkm
  • ベストアンサー率66% (1734/2604)
回答No.2

No1で説明し忘れましたが > 下矢印で、Selection.downというマクロはないようです は Range("I4").Select Selection.End(xlDown).Select の部分です。 その後貼り付けのためにI13を選択したのではないでしょうか それで Range("I13").Select となったと思います。 ちなみに .End(xlDown) を利用した場合 I4より前に行の追加などで現在のI4が下に下がった場合 Range("I4").Select のI4を書き替えないと最終行が正しく認識されません。 Cells(Rows.Count, "I").End(xlUp). とした場合には、I列の最終行が必ずデータの最終行なら、いくら行を追加してもコードを変更しなくてすみます。

bbtommy
質問者

お礼

kkkkkmさま 早速ご教示いただきまして、ありがとうございました。 すぐ、お返事いただけたことがとっても、嬉しいです。 今、充分な時間がなく、慌てて、お教えいただいたプログラムを挿入しましたが、 うまくいきませんでした。 小生の下のプログラムでは、既存データの最下行へはうまくいくのですが、 それからもう一段下に行く方法が分からないのです。 もう一度、お時間があるときに、子供にもわかるように お教えいただけませんか。 今夜、9時以降は、時間が取れますので。 理解力のない生徒で申し訳ございません。 よろしくお願い申し上げます。

関連するQ&A

専門家に質問してみよう