目次
文字を抽出して別シートへ転記
こんにちは。伊川(@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なんか嫌い!
- ネットで調べても情報がない!
必ず作動するコードが、ここにあります。