- ベストアンサー
VBA セル・値の操作方法
お世話になります。 [概要] 社員1より右のセルに値がある場合は下段にセルを挿入させ 必要なところに値を移動させたいのですがわかる方お願いします。 文言だけではわかりにくいと思い下記に図を挿入します。 [マクロ実行前] |部署|社員名1|社員番号1|社員名2|社員番号2|社員名3|社員番号3| -------------------------------------------------------------- |総務|太郎1 |2 | |営業|太郎2 |3 |太郎3 |4 | |積算|太郎4 |5 |太郎5 |6 |太郎6 |7 | [マクロ実行後] |部署|社員名1|社員番号1|社員名2|社員番号2|社員名3|社員番号3| -------------------------------------------------------------- |総務|太郎1 |2 | |営業|太郎2 |3 | | |太郎3 |4 | |積算|太郎4 |5 | | |太郎5 |6 | | |太郎6 |7 | 又、社員名10ぐらいまで作成予定です。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
これはマクロを丸投げしているのですか? 修正がある場合はご自身でお願いしますね。 Sub Macro1() Dim idxR, idxC, ptr As Integer Dim ws As Worksheet Set ws = ActiveSheet Worksheets.Add after:=ws ptr = 2 With ws .Rows(1).Copy Destination:=Range("A1") For idxR = 2 To .Range("A65536").End(xlUp).Row Cells(ptr, "A").Value = .Cells(idxR, "A").Value For idxC = 2 To 255 Step 2 If .Cells(idxR, idxC) = "" Then Exit For Else .Cells(idxR, idxC).Resize(1, 2).Copy Destination:=Cells(ptr, "B") ptr = ptr + 1 End If Next idxC Next idxR End With End Sub マクロはALT+F11でVBE画面を開き、「VBAProjectエクスプローラのシート名右クリック」→「挿入」→「標準モジュール」で表示される画面にペーストして下さい。実行はシート画面に戻って、ALT+F8を押してマクロ一覧からマクロ名を選択して実行します。
その他の回答 (1)
- imogasi
- ベストアンサー率27% (4737/17069)
(A)下記のようなことを考えたのか、考えてないのか、質問文に書いてないが、ここまでは、VBAを知らなくてもできることです。そしてこれこそVBAの初心者が力を入れないといけない点だと思います。 VBの文法を知っても、手足が出ないのは、この点の訓練が少ないからです。 (B)もうひとつ、Xシート(今あるシート)行を挿入するのでなく、別シート(シートYとする)に実現後のシートを作る方式を勧めます。挿入・削除は、その後の対象が動いてしまうことがあって、注意が必要で、かつ複雑になります。これは経験を積んで学ぶことです。 ーーー 処理ロジックの1例 1XシートA列のデータ最終行を知る 2.Xシート第1行から最終行までのデータで繰り返す。(3-4)繰り返しのループの中の入れ子にするということ。 3A・B列にデータあるか?あれば、YのA,B列にXの対象列を代入する。 Yシートの書き込み(代入)行(のポインタ)を下へづらすため+1する。 C,D;E、F列、・・など無ければ、Xシートの次行に処理をしに行く。 4.2列右に処理対象をずらして3.を行う。無くなるまで3を繰り返しする。 (できればYシートのA列は、いつもXシートのA列をセットする。 表示文字色を白にするなど見えなくするのがお勧め) ーー、 完成後の並び順位ついて、質問に述べてないが、ソートして並べ替える。 述べてないのは関心の無い証拠。仕事では大切な点です。 並べ変える順序を決める部コードを別途振らないといけないかも知れない。 ーー 考えている対象行や列を動かすには、Cells(i、j)のiやjを+1するとか、セルのOffset()プロパティを指定を変えるやり方を使う。
お礼
良い回答ありがとうございます 教えて頂いた実行は確認済みでスムーズに動作が確認され安心致しました。 丸投げ等、結果申し訳ありません。 又、書式等大幅に誤差が生じ苦戦しています、もう少しのお力を頂ければ幸いです。
補足
お返事ありがとうございます 修正等行おうとしたのですがなかなか思うように行きません 実行時エラー1004がでます ある程度の説明があれば幸いです。 結果丸投げ見たくなって申し訳ありません。 よろしくお願い申し上げます