電子書籍の厳選無料作品が豊富!

マクロボタンに登録して、そのボタンを押すのですが、列全体を直してほしいマクロなのに、2行しか変化しません。
マクロボタンではなく、VBA構文を開けて実行させると、列全体が変化します。
そこで、マクロボタンを削除し、新しくボタンを設定して、もう一度登録しなおしました。
でも、やはりボタンを押すと2行しかいきません。

原因わかりますか?

よろしくお願いいたします。

質問者からの補足コメント

  • 失礼いたしました。
    以下のような設定で、この画面を出して緑の三角の実行ボタンを押すと全行に4桁コードが入りますが
    マクロボタンに記録させてマクロボタンを押すと2行しか埋まりません。よろしくお願いいたします。

    Dim i As Long

    For i = Range("A1").End(xlDown).row To 2 Step -1

    Sheets("今月顧客データ").Select
    Cells(i, "K") = Left(Cells(i, "A"), 4)

    Next i

      補足日時:2018/08/27 14:07

A 回答 (4件)

ボタンがクリックされた時のアクティベイトされたシートと


VBA構文を開けて実行させた時のアクティベイトされたシートが異なる為に発生する現象です。
以下のマクロは、
どのシートがアクティベイトされた状態であっても、常に、”今月顧客データ”を操作するようにしています。
-------------------------------------
Dim i As Long
With Sheets("今月顧客データ")
For i = 2 To .Cells(Rows.Count, "A").End(xlUp).Row
.Cells(i, "K").Value = Left(.Cells(i, "A").Value, 4)
Next
End With
    • good
    • 0
この回答へのお礼

お礼が遅くなり申し訳ございません。
会社で、このままコピーしてやってみたらできました。
ありがとうございました。

お礼日時:2018/08/30 20:32

こんにちは。



以下の部分が疑問ですね。
>Sheets("今月顧客データ").Select  ←?
>Cells(i, "K") = Left(Cells(i, "A"), 4)

今のところ、どちらのシートのデータを取るのか書かれていないので、あくまでも想定なのですが、
「今月顧客データ」シートのK列にデータを貼り付けるのだとしたら、

Sheets("今月顧客データ").Cells(i, "K") = Left(Cells(i, "A"), 4)
(もしくは、Worksheets("今月顧客データ").Cells(i,"K").Value = Left(Cells(i,"A").Value,4)

Select を使ったら、行ったきりになって、ActiveSheet が、「"今月顧客データ"」のままになってしまっています。

>For i = Range("A1").End(xlDown).row To 2 Step -1
また、特に、逆から取る必要があるのでしょうか?

For i= 2 To Cells(Rows.Count, 1).End(xlUp).Row
でも良さそうです。
    • good
    • 0
この回答へのお礼

お礼が遅くなり申し訳ございません。
なるほど、selectってほかでも使ってましたけど
そういう問題があるのですね。
ありがとうございました。

お礼日時:2018/08/30 20:31

マクロを見なきゃわかんないって意見に賛成ですが、その「列全体」って言うのをどうやって指定しているかがポイントでしょう。

マクロの中で開始と終了を指定しているはずなので、そこが可変になっていることでボタンクリックの影響を受け、今の結果になっているわけですよね。
    • good
    • 0

そのVBAのマクロを提示してください。

    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!