目次
文字を抽出して別シートへ転記
こんにちは。伊川(@naonaoke)です。
今回は令和2回目の質問になります。
実務では、データベースを整理することがよくあります。
その際に、N行飛ばし(2行飛ばし、3行とばし)で転記という場面があります。
問題提起
(株)IKAWAの柄久 瀬瑠子(エク セルコ)は上司から下記の依頼を受けました。
3行飛ばしで、データを転記してほしい。
どのようなコードを記載するのか?
解決策
回答

・For~Next構文にStepを加える。
ループにひと手間を加える
ループに関しては、苦手な人が結構いると思います。
このループが理解すると、同じ作業をExcelが勝手にやってくれます。
この際にぜひ、覚えてください。
ループにひと手間を加える 作成手順その1 データベース確認

上のデータを転記します。
A列にデータがある限りです。
端から端までがわからないときは、上の記事を参照してください。
ループにひと手間を加える 作成手順その2 コードを解説

Sub 転記()
Dim ws As Worksheet, w As Worksheet 'WorkSheetを変数として宣言
Set ws = Worksheets("Sheet2") 'wsがSheet2の代わりになる
Set w = Worksheets("Sheet1") 'wsがSheet1の代わりになる
Dim i As Long, cut As Long, maxrow As Long 'i cut maxrow この3つの変数は数字の代わりとなるため、Longを使う
'----------------------------------------------------------------------------------------ここまでは料理でいうしこみ----------------------
maxrow = w.Cells(Rows.Count, 1).End(xlUp).Row 'Sheet1のA列の最終のセルを取得する
cut = 1 'cutは1から始まると定義する
For i = 1 To maxrow Step 4 'これがループさせることを宣言する つまりSheet1のセルA1~A列の最終の値までを、4つ飛ばしで取得する
cut = cut + 1 'これが、このプログラムの肝になり、cutの1回の処理が終了後に、さらに、cutに1回を足す
'------------------------------------------------------------------------------------ここまでが、料理で言うところの調理----------------
ws.Cells(cut, 2) = w.Cells(i, 1) '取得した値を、貼り付ける
'-------------------------------------------------------------------------------------これが料理で言うところの盛り付け------------------
Next i 'For ~Next構文のための決まり文句
End Sub
ループにひと手間を加える 作成手順その3 コードを実行する

こんな簡単なコードで、あっという間にできました。
ここがポイント
ここがポイント

今回のポイントは、Cut=Cut+1です。いまだに私も悩むのですが、Cutとう変数に1個加えていくということです。イコールは等しいという意味もありますが、Cutに代入するという意味です。この点はものすごく重要です。
まとめ
今回のまとめ

面倒なことは、Excelにまかせましょう。少しの努力で、業務短縮は可能になります。
今回のサンプルファイルは、No104です。
毎日の業務が、3時間短縮できます

わからない事を延々と考えるのは、無駄です。
- なんで作動かないの?
- もうやだ!VBAなんか嫌い!
- ネットで調べても情報がない!
必ず作動するコードが、ここにあります。














