プロが教える店舗&オフィスのセキュリティ対策術

For n = 8 To gyo
If Cells(n, 1) <> "" Then
Cells(6, 1) = ""
Rows("5:6").Select
Selection.Copy
Rows(n, n + 1).Select
Selection.Insert Shift:=xlDown
End If
n = n + 1
Next n
マクロ初心者で、基礎が分かってません。読まれれば、分かられると思いますが、1列目の8行目から行を見ていって、数字が入っていれば、1列目6行目に入っている文字を消して、5、6行目をコピーして、数字の見つかった行とその次の行に5、6行目を挿入コピーし次に行きなさいと書いたつもりですが、Rows(n, n + 1).Selectで動かないように思われます。gyoはgyo = Cells(Rows.Count, 9).End(xlUp).Rowとし、Dim gyo as longと変数宣言してます。nもDim n as longと変数宣言しました。5、6行目には文字の入った結合セルがたくさんあります。Cells(6, 1) = ""は1回すれば良いので、本来はこの位置ではないと思いますが。

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

  • めぐみんさん有難うございます❗1度試してみます❗書き方の違いわかってませんでした。

      補足日時:2017/09/10 19:11

A 回答 (3件)

>Rows("5:6")


これと
>Rows(n, n + 1)
これは、書き方が違っている事はわかりますか?

上は文字列、下は数値になってます。
よって文字列にするため

Rows(n & ":" & n + 1) が同じ書き方になりますね。

でも挿入なら

Rows(n).Select

でいけなかったかな?
    • good
    • 0
この回答へのお礼

ありがとうございました、とりあえず教えていただいたかたちでもコピーはできません。ただ、debugの時に型が一致しませんというエラーは出なくなりました。
 gyo = Cells(Rows.Count, 9).End(xlUp).Rowの参照列を29列目にすると、9行目はマクロでスペースを入れたり文字を入れたりするため、だめかなと思いスペースしか入れない29列めで最終行を取得することにしました。すると、最終行(データが200程度ありますので200行目)に5、6行目をコピーします。1列目の数字は8行目にあるのですが、無視されているようです。n = n + 1の位置が悪いのでしょうか?
たくさんの操作をマクロでさせている一部なので、他の部分に問題があるのでしょうか。ネットを見ながら作成しているので。けったいなことになっているようです。
基礎力がない人間には敷居が高いですね。

お礼日時:2017/09/10 21:11

あ、見落としてましたね。



>End If
>n = n + 1
>Next n

For~Nextの中ではループ変数に対して
>n = n + 1
を付ける必要は本来ないはず。

もし必要と感じたのなら

>For n = 8 To gyo
を下から

For n = gyo To 8 Step -1

とやった方がよいかな。

そう言えば挿入でしたものね。
    • good
    • 0
この回答へのお礼

再度のアドバイス大変ありがとうございました。やってみましたが、うまくいきません。おじいさんなので、何かミスっているのでしょう。明日の朝もう一度試して見ます。2つの別ブックの表をsheet1にコピーし、そこからsheet2にピポットテーブルを作り、それをsheet3にコピーしてさらに、それを空白行を入れたり、文字を入れたり結合したりというややこしい操作をこの前にしているため、動かないのだと思います。ご回答自体は正しいと思うのですが、多分私の今までの初心者、基礎力なしマクロのため、何か変なことがおこっているのだと思います。最悪マクロを使わずとも手動でできる範囲なので、この部分は手動でやろうと思います。私の今までのマクロを全部載せるのは、多分読まれる方が苦労されると思いますので。下手くそマクロなので。
今後ともアドバイス宜しくお願いします。昨年からマクロに手を染め始めたばかりなので。大変ありがとうございました。

お礼日時:2017/09/10 22:29

>結合したり



なるほど。
仮に縦に結合をしていたから質問にあるように2行を選択してInsertしようとかんがえたのですかね?

確かに全体のシート構成(セルの状態)が読めないと、行のコピー・Insertだけの問題ではないかもですね。
    • good
    • 1
この回答へのお礼

>仮に縦に結合をしていたから質問にあるように2行を選択してInsertしようとかんがえたのですかね?
そうです。縦の結合です。
Range("F5:F6").Select
Range("F6").Activate
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Selection.Merge
Range("F5:F6").Select
ActiveCell.FormulaR1C1 = "moji1"
ActiveCell.Characters(1, 2).PhoneticCharacters = "モジ1"
Range("G5:G6").Select
Range("G6").Activate
性格に取り出せたかどうかは分かりませんが、表題の結合部分です。挿入しても1列目に数字が残っているのが原因かと考えEnd If
Cells(n + 1, 1) = ""
を入れましたがn=n+1を入れても、入れなくてもデータ行数分の後ろに挿入の現象は止まりません。endifの前にn=n+1を入れると元の表題の前か後ろにデータ行数分挿入をしてしまいます。私自身ももう少し考えてみます。自己流でくんでいるので、大変です。基礎を勉強しないとだめですね。文化系人間の限界ですかね!

お礼日時:2017/09/11 09:23

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