こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Excel2007で質問?です

E3から、各セルにABCのいずれかが入っており、下に向かっているデータがあります。

それとは別でO3にもE3のような形でデータも入っており関数も入ってます。
今回の私の質問はここからになります。

先程のE列のデータをマクロボタンを押すたびにE3から1つずつ下に向かっていきO3に1つずつ値だけをコピー挿入し今までの値を下へ1つずつずらしたいです

それまでにあったO3から下のデータ群には既に関数が入っており値だけが1つずつ下にずれていく形にしたいです。O3から下の関数は動かないようにしたいです。

本当にわかりませんのでお願いします。エラーになる度にヘコみます。

投稿日時 - 2018-07-16 23:28:26

QNo.9518962

困ってます

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

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

投稿日時 - 2018-07-19 21:48:39

お礼

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

投稿日時 - 2018-07-19 23:10:05

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(6)

ANo.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

投稿日時 - 2018-07-20 09:33:36

お礼

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

投稿日時 - 2018-07-21 03:35:44

ANo.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

投稿日時 - 2018-07-19 07:55:44

お礼

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

投稿日時 - 2018-07-19 21:13:12

ANo.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

投稿日時 - 2018-07-17 22:50:53

お礼

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

投稿日時 - 2018-07-19 01:02:55

ANo.2

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

投稿日時 - 2018-07-17 10:12:34

お礼

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

投稿日時 - 2018-07-19 04:08:16

ANo.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

投稿日時 - 2018-07-17 08:28:57

補足

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

投稿日時 - 2018-07-17 20:41:56

お礼

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

投稿日時 - 2018-07-17 21:49:30

あなたにオススメの質問