Excel VBA質問箱 IV

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

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


6759 / 76734 ←次へ | 前へ→

【75572】Re:マクロで、同じ番号行だけを残す方法
発言  γ  - 14/5/18(日) 22:25 -

引用なし
パスワード
   興味深いので、作成してみました。
Yukiさんのは、必要なデータのみコピーする方式ですが、
質問者さんは Sheet2をそのままコピーして、あとから削除する方式。
私もYukiさん方式を採用するだろうが、一応、質問者さん方式で作成しました。

また、質問の最初にあるように結合セルをあえて対象にしています。

■問題の説明(改めて)

<<Sheet1>>
  A  B   C
1 No. 名前  性別
2 A01 梅尾  女
3 A02 福田  男
4 B01 石川  女
5 B02 森田  男

<<Sheet2>>
  A  B   C    D   E
1 
2 タイトル
3 番号 No. 住所 年齢 特徴
4                  
5 1  A01  東京  19歳 国語が得意
20 2  A02  鹿児島 19歳 国語、国語、英語、数学、運動が得意
35 3  A03  米国  19歳 数学が得意
(なお、3〜4行目はセル結合されている。
5〜19,20〜34,35〜49行のA〜D列は、セル結合されています。

------------------------------
やりたいことは、
・Sheet2をコピーした Resultシートを作成し、
・以下のように、
 B列とC列の間に、(No.に対応してSheet1で得られる)名前を挿入することです。

<<Result>>
  A  B   C    D    E   F
1 
2 タイトル
3 番号 No. 名前  住所  年齢 特徴
4                  
5 1  A01  梅尾  東京  19歳 国語が得意
20 2  A02  福田  鹿児島 19歳 国語、国語、英語、数学、運動が得意

(なお、セル結合はSheet2と同じ。1データが15行に渡って結合されている。)

-------------
手順:

1. Sheet2をコピーして Resultシートを作成
2. ResultシートのB列をC列に挿入コピー(それより右の列は右側に移動)
3. Resultシートについて以下の作業を行う。
  (1)B列のデータあり最終行を求める。
  (2)その行から、5行目までについて、15行おきに下から、以下の作業を繰り返す。
  (2)そのセルのNo.がSheet1にあれば、それに対応する「名前」をC列に上書き。
  (3)そのセルのNo.がSheet1になければ、そのセルの行から始まる15行を削除する。

-------------
参考コード(あえてDictionaryを使わない方式)

Sub test2()
  Dim resWS As Worksheet
  Dim k As Long
  Dim lastRow As Long
  Dim s As String
  Dim v
  
  Worksheets("Sheet2").Copy after:=Worksheets("Sheet2")
  Set resWS = ActiveSheet
  resWS.Name = "RESULT"

  With resWS
    .Columns("B").Copy
    .Columns("C").Insert Shift:=xlToRight
    .Range("C3").Value = "名前"
    lastRow = .Cells(.Rows.Count, 2).End(xlUp).Row
    
    For k = lastRow To 5 Step -15
      s = .Cells(k, 2).Value
      
      v = Application.VLookup(s, Worksheets("Sheet1").Range("A:C"), _
                  2, False)
      If Not IsError(v) Then
        .Cells(k, 3).Value = v
      Else
        .Cells(k, 1).Resize(15, 1).EntireRow.Delete
      End If
    Next
  End With
End Sub

なお、セル結合は、ソートしたくても簡単にはできないし、
データ部分をセル結合するのは避けた方が得だと思う。

-------------
それから、
> しかし、今回の場合、本を見ても、そのまま使える例が無く、また応用も出来ませんでした。
> どうやれば、このようなコードが書けるようになるのでしょうか?
> もっと例題の多い本やネットのサイト等があるのでしょうか?
についてひとこと。

そのまま写せば済むようなら誰も苦労しません。現実はそれなりに複雑です。
そう難しくもないだろうが、舐めてかかってできるものでもない。
ネットのどこかに答えが書いてあるわけでもありません。
面倒でも、ひとつひとつのケースを深掘りして経験を蓄積していくしかありません。

他人とのやりとりも一字一句を正確に記述する、
そのような、ある意味で辛気くさいことを実行する覚悟がないと、簡単には行きません。
しかし、掛けた労力は必ずきちんと返って来るはずです。
2 hits

【75555】マクロで、同じ番号行だけを残す方法 ザ 焼鳥男 14/5/17(土) 15:05 質問
【75556】Re:マクロで、同じ番号行だけを残す方法 カエムワセト 14/5/17(土) 18:01 発言
【75557】Re:マクロで、同じ番号行だけを残す方法 カエムワセト 14/5/17(土) 18:03 発言
【75558】Re:マクロで、同じ番号行だけを残す方法 ザ 焼鳥男 14/5/17(土) 19:39 発言
【75559】Re:マクロで、同じ番号行だけを残す方法 ザ 焼鳥男 14/5/17(土) 19:40 発言
【75560】Re:マクロで、同じ番号行だけを残す方法 ザ 焼鳥男 14/5/17(土) 19:46 回答
【75561】Re:マクロで、同じ番号行だけを残す方法 ザ 焼鳥男 14/5/17(土) 21:22 発言
【75562】Re:マクロで、同じ番号行だけを残す方法 ザ 焼鳥男 14/5/17(土) 22:51 発言
【75563】Re:マクロで、同じ番号行だけを残す方法 Yuki 14/5/18(日) 8:42 発言
【75564】Re:マクロで、同じ番号行だけを残す方法 ザ 焼鳥男 14/5/18(日) 10:13 発言
【75565】Re:マクロで、同じ番号行だけを残す方法 Yuki 14/5/18(日) 11:30 発言
【75566】Re:マクロで、同じ番号行だけを残す方法 カエムワセト 14/5/18(日) 11:44 発言
【75567】Re:マクロで、同じ番号行だけを残す方法 ザ 焼鳥男 14/5/18(日) 15:22 発言
【75568】Re:マクロで、同じ番号行だけを残す方法 ザ 焼鳥男 14/5/18(日) 15:36 発言
【75569】Re:マクロで、同じ番号行だけを残す方法 Yuki 14/5/18(日) 16:55 発言
【75571】Re:マクロで、同じ番号行だけを残す方法 ザ 焼鳥男 14/5/18(日) 20:33 お礼
【75572】Re:マクロで、同じ番号行だけを残す方法 γ 14/5/18(日) 22:25 発言

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