人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

エクセルVBAについて次の2つについてお答えください。

質問?
「E列が空白でなければそこ、そこに記入されている文字列をN列に移動する」
というつもりで下記のマクロを作成しました。

dim xxx as integer
for xxx= 1 to 2000
If Cells(xxx, 5).Value <> "" Then
Cells(xxx, 5).Cut Destination:=Cells(xxx, 15)
xxx=xxx+1
end if
next xxx

上記のマクロを実行するとうまくいく行とうまくいかない行があります。
どこを直せばよいのでしょうか?

質問?
マクロ全体から3行目だけとか、
5?8行目だけ実行させる方法はありますか?
あれば具体的な手順を教えてください。

●質問者: taroemon
●カテゴリ:コンピュータ
✍キーワード:AS Destination NeXT VBA うつ
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● whitecat77
●27ポイント

とりあえず?、私もあんまり詳しくないのですが、

xxx=xxx+1がいらないと思いますよ。

Next xxxで、xxxは1加算されます。

◎質問者からの返答

ご回答ありがとうございます。

うまくいきました。

引き続き質問?についてのご回答をお待ちしています。


2 ● ardarim
●40ポイント

質問?についてですが、スマートなやり方はありません。


代替案としては、イミディエイトウィンドウで直接命令文を入力して実行できますので、例えば3行目をコピーして、イミディエイトウィンドウに貼り付けてEnterキーを押せば、その内容が実行できます。

イミディエイトウィンドウが表示されていない場合は、[表示]-[イミディエイトウィンドウ]で表示できます。


あとは、5?8行目だけを別のサブルーチンにして切り出すと言った方法があります。


最後にあまりきれいなやり方ではないですが、どうしても、と言う場合は、そのマクロ(Sub)内にカーソルがある状態で

(1)[デバッグ]-[ステップイン]を実行(F8キーでもok)。Subの先頭で実行が一時停止します。

(2)5行目にカーソルを持っていき、[デバッグ]-[次のステートメントの設定]を実行。すると実行箇所(黄色いライン)が5行目に移動します。

(3)[デバッグ]-[ステップオーバー]を実行(Shift+F8でもok)。5行目だけが実行され、6行目に実行箇所が移動します。

(4)8行目まで、(3)ステップオーバーの操作を繰り返します。

(5)9行目で実行を止めるときは、[実行]-[リセット]を押します。

◎質問者からの返答

丁寧なご回答ありがとうございます。

自分は独学で学習中の初心者だったので、

簡単にできるものだと思ってたのですが、そうではないのですね。

大変参考になりました。

教えていただいた方法を試してみます。


3 ● whitecat77
●13ポイント

特定のセルに、開始行と終了行を指定する方法ではいかがでしょうか。

たとえば、A1を開始行、A2を終了行として、

3行目を実行したい場合、A1 に3 A2に3 を入れます。

3-8行目を実行したい場合、A1 に3 A2に8 を入れます。

で、そのセルを読み込んで実行するマクロを書いてみます。

Sub test()


Dim xxx As Integer

Dim from_num As Integer

Dim to_num As Integer


from_num = Cells(1, 1)

to_num = Cells(1, 2)

If from_num > 0 And to_num > 0 Then

For xxx = from_num To to_num

If Cells(xxx, 5).Value <> "" Then

Cells(xxx, 5).Cut Destination:=Cells(xxx, 15)

End If

Next xxx

End If


End Sub

◎質問者からの返答

ご回答ありがとうございます。

質問を読み間違えられたのかもしれませんね。

僕が望んでいたものではなさそうです。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ