• ベストアンサー

Excel2007で質問?です

E3から、各セルにABCのいずれかが入っており、下に向かっているデータがあります。 それとは別でO3にもE3のような形でデータも入っており関数も入ってます。 今回の私の質問はここからになります。 先程のE列のデータをマクロボタンを押すたびにE3から1つずつ下に向かっていきO3に1つずつ値だけをコピー挿入し今までの値を下へ1つずつずらしたいです 。 それまでにあったO3から下のデータ群には既に関数が入っており値だけが1つずつ下にずれていく形にしたいです。O3から下の関数は動かないようにしたいです。 本当にわかりませんのでお願いします。エラーになる度にヘコみます。

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

  • ベストアンサー
  • watabe007
  • ベストアンサー率62% (476/760)
回答No.5

>マクロボタンを1回ずつ押す度にE3から1つずつ下に向かうソースを教えて 最初に「最初はセルをE3に置いて実行してください。」とお願いしました。 次にマクロボタンを押す毎に ActiveCell.Offset(1).Activate アクティブセルであるE3から1つ下のセルをアクティブにしています。

961awaawa
質問者

お礼

あっ、そうでした。今のところはこのやり方の方が便利です。そういうところも推測されてたのかな、ありがとうございます。

その他の回答 (5)

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.6

>今のところはこのやり方の方が便利です。 E列を循環する方法も   Next   Range("O3").Value = Range("E3").Value   Cells(Rows.Count, "E").End(xlUp).Offset(1).Value = Range("E3").Value   Range("E3").Delete Shift:=xlUp   ActiveSheet.EnableCalculation = True   Application.ScreenUpdating = True End Sub

961awaawa
質問者

お礼

Excelって本当に凄い便利ですね!!それに私の質問も理解した上でスピードまで調節してくださる貴方もまた凄い!!もしかしてWATABE007さんはAIですか?

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.4

さらに少しスピードアップしました。 Sub Test3()   Dim i As Long, j As Long   Application.ScreenUpdating = False   ActiveSheet.EnableCalculation = False   For i = Cells(Rows.Count, "O").End(xlUp).Row To 3 Step -1     If Not Cells(i, "O").HasFormula Then       j = i + 1       Do         If Not Cells(j, "O").HasFormula Then           Cells(j, "O").Value = Cells(i, "O").Value           Exit Do         End If         j = j + 1       Loop     End If   Next   Range("O3").Value = ActiveCell.Value   ActiveCell.Offset(1).Activate   ActiveSheet.EnableCalculation = True   Application.ScreenUpdating = True End Sub

961awaawa
質問者

お礼

凄い!速くなりました。ありがとうございます。ついでに聞きたいのですが、マクロボタンを1回ずつ押す度にE3から1つずつ下に向かうソースを教えて欲しいんですが。お願いできますか。

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.3

少しスピードアップしました。 Sub Test2()   Dim i As Long, j As Long, tmp As String   Application.ScreenUpdating = False   ActiveSheet.EnableCalculation = False   For i = Cells(Rows.Count, "O").End(xlUp).Row To 3 Step -1     If Not Cells(i, "O").HasFormula Then       tmp = Cells(i, "O").Value       Cells(i, "O").ClearContents       j = i + 1       Do         If Cells(j, "O").Value = "" Then           Cells(j, "O").Value = tmp           Exit Do         End If         j = j + 1       Loop     End If   Next   Range("O3").Value = ActiveCell.Value   ActiveCell.Offset(1).Activate   ActiveSheet.EnableCalculation = True   Application.ScreenUpdating = True End Sub

961awaawa
質問者

お礼

いつも本当にありがとうございます。ヤッパり凄いですね。速さまで変えられるなんて!!驚愕します!何年ぐらい経験を積んでらっしゃいますか?その点について凄く疑問と興味があります。(; ・`д・´)

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

補足したら。 まず、マクロを使って回答しても、わかるの? 非常に、質問者の今回限りの、一般性のないタイプの質問なので、十分説明しないと、質問の意図がわかりにくい。 O3セルを選択しておいて、ホームー挿入ーセルの挿入ー下方向にシフト、の 操作で実現することをすれば仕舞いでは。そしてE3セルの値をO3セルにコピー貼り付け(または多分代入)すればよいのか。 >E3から1つずつ下に向かっていき・・ 1回ボタンを押すたびに、E列のデータ最下行セルの分まで1セル分ずつ、同じ操作(O列に挿入、それO4より下を、下へシフト)を繰り返すのか。 一遍にやってしまうと不可か? E3-ExをO3より下へ挿入ではだめか? (VBAでやるようなことは、一般には2007でも2016でも変わりはない場合がほとんど。表題に掲げるのは意味が少ない。表題の軽視だ。 もっと質問内容を、人間のエクセル操作に即して(どうしたらできるか)説明すべきと思うが。多数回の繰り返しや、場合によっての切り替えは、VBAでやるとしても。

961awaawa
質問者

お礼

ご解答ありがとうございます。多数回の繰り返しと多くの関数を組み合わせるので。もちろんマクロを重ねることもあります。色々と知っておく事も必要になるんです。

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.1

>E列のデータをマクロボタンを押すたびにE3から1つずつ下に向かって 最初はセルをE3に置いて実行してください。 Sub Test()   Dim i As Long, j As Long, tmp As String   For i = Cells(Rows.Count, "O").End(xlUp).Row To 3 Step -1        If Not Cells(i, "O").HasFormula Then       tmp = Cells(i, "O").Value       Cells(i, "O").ClearContents       j = i + 1       Do         If Cells(j, "O").Value = "" Then           Cells(j, "O").Value = tmp           Exit Do         End If         j = j + 1       Loop     End If   Next   Range("O3").Value = ActiveCell.Value   ActiveCell.Offset(1).Activate End Sub

961awaawa
質問者

お礼

ご解答ありがとうございます。とても私の主旨に合ってて、素晴らしくバッチリできたんですがデータが膨大なため1回を実行するたびに60秒程かかります。 でも感動しました。 時間がかからないもっと良い方法ってありませんか?

961awaawa
質問者

補足

ご解答ありがとうございます。とても私の主旨に合ってて、素晴らしくバッチリできたんですがデータが膨大なため1回を実行するたびに20秒程かかります。 でも感動しました。 時間がかからないもっと良い方法ってありませんか?

関連するQ&A

  • Excel2007で解答いつもありがとう

    いつも解答してくださる方々、心より感謝しています。いつもありがとうございます。時々、私のお礼の返事と解答者さん達の文章の文字数を比べてたりしたら申し訳なく思ったりします。(;´д⊂) お礼が無しにならぬよう急ぐせいか短文になりがちでドライに思われる方もいらっしゃるのでは……と不安もあり、この場を利用して皆様に深くお礼申し上げます。m(_ _)m本当にありがとうございます。 お礼の続きで失礼なんですがまた質問させてください。 E3から、各セルにABCのいずれかが入っており、下に向かっているデータがあります。 それとは別でO3にもE3のような形でデータが入っております。 今回の私の質問はここからになります。 先程のE列のデータをE3から1つずつ下に向かっていきO3に1つずつコピー挿入したいです。 それまでにあったO3から下のデータ群は1つずつ下にずれていく形になります。 ご無理なさらぬようお願いいたします。

  • 前回Excel2007で複数のセルを併せて

    前にも似たような形で質問しましたが、今回は自分で検索したい形で値を入れたタイプなんです。 (1)列HIJの3行目から下に向かって既に入ってあるデータを消して (2)range(A10:C12)に自分が検索したい(ワイルドカードも時には含めた)形で値A~Fのいずれかを各セルに入れてからマクロボタンを押して (3)range(A10:C12)の複数のセルの値を併せて参照して (4)(列OPQの最後尾には新しいデータが常に追加されます)O列+P列+Q列から検索し(その検索された1つ下のセルを黄色く色を着けて)、検索された1つ下の値をコピーして (5)列HIJの3行目から下に向かってそれをペイストして表したいです。 誰か教えて下さい。お願いします。

  • Excel2007で質問です。

    sheet1にセルD3から下に向かってデータが2000個以上入ってます。 (1)マクロボタンを押します。 (2)D列で任意の行番号の値(今回は1000行目)をコピーします。 (3)sheet2,sheet3,sheet4のN6に(2)をペイストします。 (4)、(1)に戻りマクロボタンを押します。 (5)、(2)に行きまして、1つ下の1001行目をコピーします。 (6)、(3)に行きN6の下のN7にペイストします。 これをマクロボタンを押す度に繰り返したいです。

  • Excel2007で複数を単体として検索

    前にも似たような形で質問しました。今回は、range(A10:C12)に値A~H + ワイルドカードを自分で1つを選び入れて、1つの形にして検索できるタイプにしたいです。 (1)列HIJの3行目から下に向かって既に入ってあるデータを消して (2)range(A10:C12)に自分が検索したい(ワイルドカードも時には含めた)形で値A~Hのいずれかを各セルに入れてからマクロボタンを押して (3)range(A10:C12)を単体とし、それを参照して (4)(列OPQの最後尾には新しいデータが常に追加されます)O列+P列+Q列から検索し、その検索された1つ下のセルを黄色く色を着けて、その値だけをコピーして (5)列HIJの3行目から下に向かってそれをペイストして表したいです。 誰か教えて下さい。お願いします。

  • Excel2007で複雑なセルコピペ。

    sheet8のセル範囲C3からセルI10000までの各セルにA~Jのいずれかがランダムに入ってます。 マクロボタンをおします。 (1)、C12の値をM3にコピペしてC12から5行戻ったC7の値をセルO3にコピペします。 (2)、M3の値とO3の値が同じならM3の背景色を黄色にしたいです。同じでないならそのままです。 マクロボタンを押します。 (3)、1つ下のC13に行き(1)と同じことをするのですが、1つ下のM4にC13の値をコピペしてC13から7行戻ったC6の値をO4にコピペしたいです。 (4)、(2)と同じようになり マクロボタンを押します (5)、1つ下のC14に行き(1)と同じことをするのですが、1つ下のM4にC14の値をコピペしてC14から9行戻ったC5の値をO5にコピペしたいです。 (6)、(2)と同じようになります。 マクロボタンを押します。 End マクロボタンを押す度にC12から1つずつ下に向かい、M3から1つずつ下に向かって値をコピペするのですが、セルOにコピペされるのは1つずつ下に向かうセルCの値から、5行戻り、7行戻り、9行戻りと戻ってはまた5行、7行、9行と戻った値を繰り返しコピペしたいです。 よろしくお願いいたします。

  • Excel2007で困ってます1

    全くわからなくてお手上げ状態です。誰か助けて下さい。 Sub test1() Range("O4:O1012").Value = Range("O3:O1011").Value End Sub [("O3:O1011")には関数も入ってるので値だけを("O4:O1012")に入れて、1行ずらした形にします] Sub test2() Range("O3").Value = Selection ActiveCell.Offset(1).ActivateEnd Sub [test1で空いたセルO3に、選択されたE3の値を入れまして、E4、E5、E6、…と移動してはO3に入れていきます。] Sub test3() Range("X5").Value = Selection ActiveCell.Offset(1).ActivateEnd Sub [test2でE3から始まる値を1つずつO3に入れると、それに伴って、セルC3の値をX5に1つずつ入れてはC4、C5、C6、…と移動してX5に入れていきます。] ……Excel2007で困ってます2に続きます……

  • No.4、Excel2007で質問です

    範囲C3~I10の各セルにABCのいずれかがデータとして適当に既に入ってます。 そして範囲C11~I11から次々と下へ向かってデータが行単位で追加されます。 とあることから範囲C3~I10を範囲N3~T10に上下逆さまにしコピーして挿入しました。 ここからが私のしたいことになります。 範囲(C11:I11)から下へ向かってデータが追加されるたびに、そのデータが1番上の範囲N3~T3にコピー挿入されて、それまでに入ってたデータ(N3:T3)が、データ(N4:T4)→(N5:T5)→…へと一行ずつ下へ行くようにずらしたいです。 マクロでお願いいたします。 画像を添付する

  • エクセル(excel)の計算式(関数)について

    エクセル(excel)の計算式(関数)でよいアイディアがありましたら教えてください。 1行目は項目行です。 セルA1から右に15列=セルO1まで、 a | b | c | d | e | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 と入っています。 2行目からデータとして、 セルA2から右に5列=セルE2まで、 4 | 2 | 2 | 1 | 1 と入力したとします。(データ例(1)) あるいは、 セルA3から右にセルE3まで、 6 | 3 | 0 | 0 | 0 と入力したとします。(データ例(2)) 1つのデータの5個の数字のルールは2つで、 「合計で10以下である。」 「左から順に小さくなるか、同じ数字となる。」 です。 (目的は、) このとき、F列からO列にかけて、 データ例(1)のケースでは、 a | a | a | a | b | b | c | c | d | e データ例(2)のケースでは、 a | a | a | a | a | a | b | b | b | と表示されるように、 つまり、項目行の下にある数だけ、その列の1行目の記号を 1(F列)から右に向かって順に埋めていくような、 F列からO列までの2行目以下に入れる適当な計算式(関数)は ないでしょうか。 拙い説明で申し訳ありません。どなたかよい考えをお持ちの方がいらっしゃいましたらと存じます。 どうぞよろしくお願い致します。

  • EXCEL2010 壊れる

    こんにちは。 関数とマクロ、条件付き書式など、あまりシンプルとは言えないファイルではあるのですが、データを入れていない空ファイルにテストレコードを数件入れて動作確認するとサクサク軽快に動くので本運用。 データ量が多めなので重くなるのは良いとして、関数やマクロなどのプログラム系には全く触らず、ただひたすらレコードの追加をするだけで、行挿入や列挿入はもちろん、セルの書式設定すらかえていないのに、しばらく使っていると「読み込めない内容がある」旨のエラーが出、修復しますか?と聞かれます。 そこで修復し、上書き保存してそのまま利用すると、またしばらくすると今度は編集をしていないのに「編集を保存しますか?」と聞かれる。 何度も出続けるので保存を選択すると、上書きができずに「名前をつけて保存」になる。 依然としてファイル内の関数やマクロは動作しているので、使えるのですが、毎回名前をつけて保存をしなければならない事になる。 これはどういう事なのでしょうか。 どなたかお解りになる方いらっしゃいましたら、お教え頂きたくお願い致します。

  • 関数でなんとかなりませんか?(EXCEL)

    マクロや関数に関してはあまり知識がありません。 そこでお教えいただきたいことがあり、質問させていただきました。 まず、あるワークシートに以下のような表があります。 A列|B列 a   1 b   1 c   1 d   2 e   2 この表を新しいワークシート(ワークシート名:並べ替え)以下のように並べ替えたいと思っています。 A列|B列|C列|D列 1   a   b   c 2   d   e 要するに、B列の値を認識して値が同じものを1行目に横並びにしたいのです。 関数やマクロでなんとかなりませんか? 膨大なデータがあるので手作業でやるととてもしんどいですし、間違いがでやすくなり困っています。 お願いいたします。

専門家に質問してみよう