Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


1385 / 13644 ツリー ←次へ | 前へ→

【74761】年度が変わったらスペース ミラクルえりこ 13/9/11(水) 15:40 質問[未読]
【74762】Re:年度が変わったらスペース γ 13/9/11(水) 20:52 発言[未読]
【74766】Re:年度が変わったらスペース ミラクルえりこ 13/9/12(木) 11:28 質問[未読]
【74767】Re:年度が変わったらスペース Blue 13/9/12(木) 11:42 発言[未読]
【74771】Re:年度が変わったらスペース ミラクルえりこ 13/9/12(木) 17:00 質問[未読]
【74772】Re:年度が変わったらスペース Blue 13/9/12(木) 17:23 回答[未読]
【74781】Re:年度が変わったらスペース ミラクルえりこ 13/9/13(金) 11:45 お礼[未読]

【74761】年度が変わったらスペース
質問  ミラクルえりこ  - 13/9/11(水) 15:40 -

引用なし
パスワード
   年度が変わったらスペース空けるには
どうすればよいですか??
お願いしますm(_ _)m

20101001
20101101
20101201
20110101
20110201
20110301
20110401
20110501
20120401
20120501
20120601
20120701
20130301
20130401
20130501
 ↓
20101001
20101101
20101201

20110101
20110201
20110301
20110401
20110501

20120401
20120501
20120601
20120701

20130301
20130401
20130501

【74762】Re:年度が変わったらスペース
発言  γ  - 13/9/11(水) 20:52 -

引用なし
パスワード
   こういう場合は、下から上に向かって作業します。
というのは、こうしないと挿入する操作が次の作業に影響してしまうからです。
(1)その行の年 と 上の行の年 とを比較して
(2)不一致の場合は、その行に一行挿入します。

なお、(1)は文字列なら、Left(s,4)で取得できます。
(2)はマクロ記録をとれば、行挿入のコードは得られます。
こんな方針でいかがですか?

【74766】Re:年度が変わったらスペース
質問  ミラクルえりこ  - 13/9/12(木) 11:28 -

引用なし
パスワード
   ▼γ さん:

不一致で解決したかと思いきや2011と2012の間がなぜか空きませんでした。
申し訳ありませんがコードチェックお願いします。m(_ _)m


Sub 年末一行あけ()

For i = 2 To 221
If Left(Range("h" & i), 4) <> Left(Range("h" & i).Offset(-1, 0), 4) Then

Rows(i).Insert Shift:=xlDown

End If
i = i + 1

Next i

End Sub

【74767】Re:年度が変わったらスペース
発言  Blue  - 13/9/12(木) 11:42 -

引用なし
パスワード
   下からループを開始しないとダメじゃないかな。
(空行を挿入したせいで次の行がおかしくなっちゃうから)

【74771】Re:年度が変わったらスペース
質問  ミラクルえりこ  - 13/9/12(木) 17:00 -

引用なし
パスワード
   ▼Blue さん:

これで下からになってますか?
出来るのですがエラーが出ます。
値は文字列です。お願い致しますm(_ _)m


Sub 年末一行あけ()


For i = Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1


If Left(Range("h" & i), 4) <> Left(Range("h" & i).Offset(-1, 0), 4) Then

Rows(i).Insert Shift:=xlDown

End If

Next i


End Sub

【74772】Re:年度が変わったらスペース
回答  Blue  - 13/9/12(木) 17:23 -

引用なし
パスワード
   >For i = Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1
1列目には必ず値が入りますか?
H列を対象にするなら他の記述と合わせて

Range("h" & Rows.Count).End(xlUp).Row

としたほうがいいでしょう。

で、ループの終わりを 1 にしていますが、オフセットで一行上を見るので
ない行を参照してしまうことになります。(これがエラーになる)

ですので、

For i = Range("h" & Rows.Count).End(xlUp).Row To 2 Step -1

としておけば動くと思います。
1行目がヘッダ行なら 2 じゃなくて 3 になりますけど。

【74781】Re:年度が変わったらスペース
お礼  ミラクルえりこ  - 13/9/13(金) 11:45 -

引用なし
パスワード
   ▼Blue さん:

できましたっ!!!ヽ(´ー`)ノ
本当にありがとうございますっ!!!

1385 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free